Redis学习(Redis哨兵)
引入:master节点宕机怎么办
一个可行的解决办法是:在master节点宕机之后,立刻将一个slave节点变成master节点,之后将恢复后的master节点变为slave节点
那么监测和重启该怎么做,这里我们就需要哨兵
哨兵的作用和原理
哨兵(Sentinel)实现主从集群的自动故障恢复
- 监控:哨兵不断检查master和slave是否按预期工作
- 恢复:master故障后,sentinal会将slave提升为master
- 通知:sentinal充当Redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送到Redis的客户端
服务状态监控
sentinal基于心跳机制监测服务状态,也就是每隔1s向集群的每个示例发送ping命令
- 主观下线:某个哨兵节点发现某个实例未在规定时间内响应,则认为该实例主观下线
- 客观下线:超过指定数量(quorum)的哨兵认为该实例主观下线,则该实例就是客观下线。quorom最好超过哨兵实例数量的一半
选举新的master
选举新的master的依据如下:
- 首先判断slave与master节点断开时间的长短,如果超过指定值则会排除该slave节点
- 然后判断slave节点的slave-priotity,越小优先级就越高,但是当优先级为0时代表永远不会被提升为master节点
- 判断slave的offset,越大代表数据越新,优先级越高
- 前面都一样的情况下判断slave节点的运行id大小,越小则优先级越高
如何实现故障转移
故障转移的步骤如下:
- 哨兵给备选的slave节点发送slave of no one的指令,让该节点成为master
- 哨兵给其它所有的slave节点发送slaveof命令,让这些slave成为新master的从节点,并且从新的master上同步数据
- 最后,哨兵节点将故障节点标记为slave,当故障节点恢复后自动成为新的master的slave节点