怎么解决Redis故障恢复问题?如果Redis主机故障怎么办?
利用Redis哨兵(sentinel)机制,实现健康检测和自动故障恢复。
哨兵(sentinel)三大作用:
监控: 哨兵Sentinel会不断检查您的master和slave是否按预期工作。
自动故障恢复: 如果master故障,哨兵集群会选出一个哨兵,这个哨兵会选出其中的一个slave提升为master。当之前的master故障实例恢复后变为新的master的slave。
通知: Sentinel充当Redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送给Redis的客户端。
哨兵集群监控原理(Sentinel如何判断一个redis实例是否健康?):
哨兵Sentinel集群基于心跳机制监测服务状态,每隔1秒向集群的每个实例发送ping命令:
主观下线:如果某sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线。
客观下线:若超过指定数量(quorum)的sentinel都认为该实例主观下线,则判定该实例客观下线即服务下线。
quorum的值可自由设置,最好设置为超过Sentinel实例数量的一半。
集群故障恢复原理流程:
一旦发现master故障时,
1、哨兵sentine集群会先选举一个领头哨兵Sentinel,并由领头哨兵Sentinel对下线主服务器执行故障转移操作。
2、领头Sentinel根据选举规则选出一个slave提升为新的master,sentinel给选举出来的slave节点发送slaveof no one 命令,让该节点成为新master。(选master)
3、sentinel给所有其它slave发送slaveof 新master的IP 新master的port 命令,让这些slave成为新master的从节点,开始从新的master上同步数据。(建立新连接)
4、最后,哨兵sentinel将故障节点标记为slave,当故障节点恢复后会自动成为新的master的slave节点。(故障恢复成为slave)
新的master选举依据:
1、首先会判断slave节点与master节点断开时间长短,如果超过指定值(down-after-milliseconds 10)则会排除该slave节点
2、然后判断slave节点的slave-priority值,越小优先级越高,如果是0则永不参与选举
3、如果slave-prority一样,则判断slave节点的offset值,越大说明数据越新,优先级越高
4、最后是判断slave节点的运行id大小,越小优先级越高。