1.结构与作用
如图:哨兵(Sentinel)主要作用有三个
1.监控:哨兵会不断检查master和slave是否工作正常
2.自动故障恢复:如果master故障,哨兵会将一个slave提升为master
3.通知:如果发生故障转移(更换master),会将最新信息推送给Redis客户端
2.监控原理
哨兵基于心跳机制监控mastert与slave,每隔1秒发送ping命令,如果在一定时间内,master没有回应,就会被认为主观下线。如果超过一定数量的哨兵都认为这个master主观下线,则该实例客观下线 。这个一定数量最高超过哨兵的一半
3.集群故障恢复
一旦发现master故障,sentinel需要在salve中选择一个作为新的master,选择依据是这样的:
首先会判断slave节点与master节点断开时间长短,如果超过指定值(down-after-milliseconds * 10)则会排除该slave节点
然后判断slave节点的slave-priority值,越小优先级越高,如果是0则永不参与选举
如果slave-prority一样,则判断slave节点的offset值,越大说明数据越新,优先级越高
最后是判断slave节点的运行id大小,越小优先级越高。
当选出一个新的master后,该如何实现切换呢?
流程如下:
sentinel给备选的slave1节点发送slaveof no one命令,让该节点成为master
sentinel给所有其它slave发送slaveof 192.168.150.101 7002 命令,让这些slave成为新master的从节点,开始从新的master上同步数据。
最后,sentinel将故障节点标记为slave,当故障节点恢复后会自动成为新的master的slave节点