背景:slave节点宕机了恢复后可以找master节点同步数据,那master节点宕机了怎么办?
master宕机了,数据如何同步。而且master宕机了,无法执行写操作。这个时候就引入了Redis哨兵模式。
哨兵(Sentinel)模式机制来实现主从集群的自动故障恢复。
从上图可以看出:
Sentinel集群模式,为什么Sentinel会有集群模式,这是因为可能Sentinel单节点会出现宕机的状态。
Sentinel会不断检查您的master和slave是否按期工作。
如果master故障,Sentinel会将一个slave提升为master。如果slave故障,则重启slave。
因为Redis主节点负责写,从节点负责读。但是如果master更换了,restemplate怎么知道呢,这个时候Sentinel充当Redis客户端的服务发现来源。当集群发生故障转移时,会将最新的信息推送给Redis的客户端。
Sentinel基于心跳监测服务状态,每隔1s向集群的每个实例发送ping命令:
主观下线
如果某sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线。
客观下线
若超过指定数量(quorum)的sentinel都认为该实例主观下线,则该实例客观下线。
1.首先判断slave节点与master节点断开时间长短,如果超过指定值(down-after-milliseconds*10)则会排除该slave节点。
2.然后判断slave节点的优先级,越小优先级越高,如果是0,则永不参与选举。
3.如果是slave-priority一样,则判断slave节点的offset值,越大说明数据越新,优先级越高
4.最后是判断slave节点的运行id大小,越小优先级越高。
总结起来,就是先看节点断开时间长短,然后判断优先级,如果优先级相等,那么就判断offset值,越大,数据越新。最后是判断slave节点运行id大小,越小优先级越高。
1.sentinel给备选的slave1节点发送slave of no one命令。
2.sentinel给所有其他slave发送slaveof 192.168.150.101 7002命令。让这些slave成为新的master的从节点,
3.sentinel将故障节点强制修改配置文件,标记为slave。