Redis哨兵机制
Redis主从复制的缺点:没办法对master进行动态选举(Master宕机后,需要重新选举master),需要使用Sentinel哨兵机制完成动态选举。
目录
1. 简介
Redis 的哨兵模式到了 2.8版本之后
Sentinel (哨兵)进程是用于监控 Redis 集群中 Master主服务器工作的状态
在 Master 主服务器发生故障的时候,可以实现 Master 和 Slave 服务器的切换,保证系统的高可用。
2. 哨兵进程的作用
监控(Monitoring):哨兵(sentinel)会不断的检查Master和Slave是否正常运作。
提醒(Notification):当被监控的某个Redis节点出现问题时,哨兵可以通过API向管理员或者其他应用发送通知。
自动故障迁移(Automatic failover):当一个Master不能正常工作是,哨兵会开始一次自动故障迁移操作。
3. 故障判定原理分析
1. 每个Sentinel进行以每秒钟一次的频率想整个集群的Master主服务器,Slave从服务器以及其他sentinel进行发送一个PING命令。
2. 如果一个实例(instance)距离最后一次有效回复PING命令的时间超过 down-after-milliseconds 选项所指定的值,则这个实例会被sentinel进程标记为主观下线(SDOWN)。
3. 如果一个master主服务器被标记为主观下线,则正在监视这个master的所有sentinel进程要以每秒一次的频率确认master服务器的确进入了主观下线状态。
4. 当有足够数量的sentinel进程(大于等于配置文件中指定的值 [sentinel monitor mymaster 192.168.231.134 6380 1])在指定的时间范围内确认master进入了主观下线状态,则master会被标记为客观下线。
5. 一般情况下,每个sentinel进程会以每10秒一次的频率向集群中的所有master、slave发送INFO命令。
6. 当master被sentinel进程标记被客观下线(ODOWN)时,sentinel向下线的master主服务器的所有slave从服务器发送INFO命令的频率会从10秒一次改为每秒一次。
7. 若没有足够数量的sentinel进程同意master主服务器下线,master主服务器的客观下线状态就会被移除。若master重新向sentinel进程发送PING命令返回有效回复,master的主观下线状态就会被移除。
4. 自动故障迁移
- 它会将失效 Master 的其中一个 Slave 升级为新的 Master , 并让失效 Master 的其他 Slave 改为复 制新的 Master ;
- 当客户端试图连接失效的 Master 时,集群也会向客户端返回新 Master 的地址,使得集群可以使 用现在的 Master 替换失效 Master。
- Master 和 Slave 服务器切换后, Master 的 redis.conf 、 Slave 的 redis.conf 和 sentinel.conf 的配置文件的内容都会发生相应的改变,即, Master 主服务器的 redis.conf 配置文件中会多一行 slaveof 的配置, sentinel.conf 的监控目标会随之调换。
5. 案例演示
- 修改从机的sentinel.conf配置文件
- 其他配置项说明
6. 哨兵启动
./redis-sentinel sentinel.conf