redis自学(33)哨兵的作用和工作原理

哨兵的作用

Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。哨兵的结构和作用如下:

 

 

 

 

服务状态监控

Sentinel基于心跳机制监测服务状态,每隔1秒向集群的每个实例发送ping命令。

主观下线:如果某sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线。

客观下线:若超过指定数量(quorum)的sentinel都认为该实例主观下线,则该实例客观下线。Quorum值最好超过sentinel实例数量的一半。

 

 

选举新的master

一旦发现master故障,sentinel需要在slave中选择一个作为新的master,选择依据是这样的:

首先会判断slave节点与master节点断开时间长短,如果超过指定值(down-after-milliseconds * 10)则会排除该slave节点

然后判断slave节点的slave-priority值,越小优先级越高,如果是0则用不参与选举。(默认值是1,如果不修改的配置的话,这一条等于没有)

如果slave-priority一样,则判断slave节点的offset值,越大说明数据越新,优先级越高(最关键的)

最后是判断slave节点的运行id大小,越小优先级越高

如何实现故障转移

当选中了其中一个slave为新的master后(例如slave1),故障的转移的步骤如下:

 

 

Sentinel给备选的slave1节点发送slaveof no one命令,让该节点成为master

 

 

Sentinel给所有其他slave发送slaveof 192.168.150.101 7002 命令。让这些slave成为新master的从节点,开始从新的master上同步数据

 

 

最后,sentinel将故障节点标记为slave,当故障节点恢复后会自动成为新的masterslave节点

 

 

 

posted @ 2024-04-11 14:26  蓝海的bug本  阅读(12)  评论(0编辑  收藏  举报