redis自学(33)哨兵的作用和工作原理
哨兵的作用
Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。哨兵的结构和作用如下:
服务状态监控
Sentinel基于心跳机制监测服务状态,每隔1秒向集群的每个实例发送ping命令。
l 主观下线:如果某sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线。
l 客观下线:若超过指定数量(quorum)的sentinel都认为该实例主观下线,则该实例客观下线。Quorum值最好超过sentinel实例数量的一半。
选举新的master
一旦发现master故障,sentinel需要在slave中选择一个作为新的master,选择依据是这样的:
l 首先会判断slave节点与master节点断开时间长短,如果超过指定值(down-after-milliseconds * 10)则会排除该slave节点
l 然后判断slave节点的slave-priority值,越小优先级越高,如果是0则用不参与选举。(默认值是1,如果不修改的配置的话,这一条等于没有)
l 如果slave-priority一样,则判断slave节点的offset值,越大说明数据越新,优先级越高(最关键的)
l 最后是判断slave节点的运行id大小,越小优先级越高
如何实现故障转移
当选中了其中一个slave为新的master后(例如slave1),故障的转移的步骤如下:
Sentinel给备选的slave1节点发送slaveof no one命令,让该节点成为master
Sentinel给所有其他slave发送slaveof 192.168.150.101 7002 命令。让这些slave成为新master的从节点,开始从新的master上同步数据
最后,sentinel将故障节点标记为slave,当故障节点恢复后会自动成为新的master的slave节点