Sentinel 集群实现主从集群的自动故障恢复(监控集群状态)
Sentinel 的作用
监控:Sentinel 不断检查master与slave是否正常工作
自动故障恢复:若 master 故障则 Sentinel 将一个 slave 提升为 master,master 恢复后也以新 master 为主
通知:当集群发生故障转移时,Sentinel将最新信息推送给Redis客户端(RedisClient)
Sentinel 的实现
基于心跳机制检测服务状态,每隔1s向集群的每个实例发送 ping 命令
主观下线:某 Sentinel 节点实例未在规定时间响应
客观下线:超过一定数量(quorum)的 Sentinel 都认为该节点主观下线
注:quorum 值最好超过 Sentinel 实例数量的一半
选举新的master
- 判断 slave 节点与 master 节点断开时间长短,若超过指定值(down-after-milliseconds*10)则排除
- 判断 slave-priority 值 值越小优先级越高 0则排除
- 判断 slave 节点的 offset 值 值越大数据越新优先级越高
- 判断 slave 节点的运行 id 值越小优先级越高
故障转移
- Sentinel 给备选的 slave 发送 slaveof no one 命令
- Sentinel 给其他 slave 发送广播 slaveof 新master的 IP地址与端口号
- Sentinel 将故障节点标记为 slave 强制修改节点配置为 slaveof 新master的 IP地址与端口号