Redis搭建(三):哨兵模式

一、sentinel介绍

Redis 2.8中提供了“哨兵”工具来实现自动化的系统监控和故障恢复功能。

Redis 2.6 版也提供了哨兵工具,但此时的哨兵是1.0版,存在非常多的问题,任何情况下都不应该使用这个版本的哨兵。

1. Sentinel功能:

  • 监控:哨兵不断的检查master和slave是否正常的运行。
  • 通知:当监控的某台Redis实例发生问题时,可以通过API通知系统管理员和其他的应用程序。
  • 自动故障迁移:当一个master不正常运行了,哨兵会开始一次故障转移操作,它会将一个slave升级成为master,并让其他的slave重新配置使用新的master,并且应用程序使用Redis服务端通知的新地址。

2. 优缺点:

  • sentinel有效的解决了故障转移的问题,也解决了主节点下线客户端无法识别新的可用节点的问题
  • 但是如果是从节点下线了,sentinel是不会对其进行故障转移的,并且连接从节点的客户端也无法获取到新的可用从节点

3. Sentinel工作方式:

  • 每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令
  • 如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。
  • 如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。
  • 当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线
  • 在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有Master,Slave发送 INFO 命令
  • 当Master被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次
  • 若没有足够数量的 Sentinel 同意 Master 已经下线, Master 的客观下线状态就会被移除。
  • 若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。

4. 相关概念: 

主观下线:Subjectively Down,简称 SDOWN,指的是当前 Sentinel 实例对某个redis服务器做出的下线判断。
客观下线:Objectively Down, 简称 ODOWN,指的是多个 Sentinel 实例在对Master Server做出 SDOWN 判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master Server下线判断,然后开启failover.

二、单哨兵配置

1. 部署环境
如下图所示,其中虚线表示主从复制关系,实线表示哨兵的监控路径:

 

  • 一个master,两个slave,一个sentinel
  • 新建sentinel目录,准备配置文件
  • redis.conf中的ip应设置为外网可访问的真实ip,不然jedis会报错

 

2. 统一配置

daemonize yes //默认值是no,把值修改为yes,以后台模式运行
appendonly yes //默认值是No,意思是不使用AOF增量持久化的方式,使用RDB全量持久化的方式。把No值改成Yes,使用AOF增量持久化的方式

//若设置密码,master和slave需同时配置下面两个参数:
masterauth "12345678"    //连接master的密码
requirepass "12345678"    //自己的密码

 

3. slave的配置

  • 修改pid和端口号,与文件名对应
  • 配置slaveof,指定master地址

 

 


4. sentinel的配置

sentinel monitor mymaster 192.168.127.129 6379 1    //ip应为外网能访问的,最后的1表示最低通过票数
sentinel down-after-milliseconds mymaster 5000    //哨兵程序每5秒检测一次Master是否正常,默认30秒
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 60000
sentinel auth-pass mymaster 12345678    //若设置了密码,需配置此项

 

5. 启动所有Redis

redis-server redis.conf
redis-server redis6380.conf
redis-server redis6381.conf
redis-sentinel sentinel.conf & --->或 redis-server sentinel.conf --sentinel &


6. 测试

  • 先连接各个redis server,使用info replication命令查看集群信息
  • 杀死master,看sentinel的日志
  • 再次查看集群信息,并操作redis
  • 恢复启动之前的master,发现它成了从节点

 

三、多哨兵配置

1. 部署环境
在一主多从的Redis系统中,可以使用多个哨兵进行监控,以保证系统足够稳健,此时,不仅哨兵会监控主库和从库,哨兵之间也会互相监控。如下图所示:

 

2. 拷贝、修改sentinel配置文件

  • 修改最低通过票数
  • 修改端口号
  • sentinel之间会自动监控,不需要配置

 

3. 测试

 

四、注意事项


1. IP的配置

  • redis.conf、sentinel.conf中使用的ip,应设置为外网可访问的真实ip,不然jedis会报错
  • 若有多块网卡,需配置bind ip绑定一个ip地址

2. 设置密码

  • master和slave都得配置 masterauth "12345678" 和 requirepass "12345678",且密码必须相同
  • sentinel需配置 sentinel auth-pass mymaster 12345678
posted @ 2018-06-07 18:26  时间-海  阅读(511)  评论(0编辑  收藏  举报