哨兵(Sentinel)机制:实现主从节点故障转移,是一个特殊的Redis节点,部署也需要集群,至少为三个。
- 监控:监测主节点是否存活
- 每隔一秒给所有的主从节点发送 PING 命令
- 如果节点在规定时间(配置项)无响应,标记为主观下线
- 如果主节点被一个哨兵标记为主观下线,会问其他哨兵,超过配置的 quorum 值(一般是哨兵数量的一半+1)都报告为主观下线,那么就是判定主节点为客观下线,之后就要进行选主
- 选主:如果发现主节点挂了,它就会选举一个从节点切换为主节点
- 通常由上面第一个判定主节点客观下线的哨兵进行故障转移(这个是一个选举过程)
- 新主节点选举过程,会将已经下线、网络不好的节点过滤,按照优先级、复制进度、ID号等进行排序,进行选举,选举结束后,通知该节点晋升,之后监测直到晋升完成
- 通知:并且通知给从节点和客户端。
- 新节点晋升成功后,需要通知从节点指向新节点
- 并且通知客户端主节点已经变更
- 后续如果旧主节点上线,通知其降级为从节点
哨兵节点之间是通过 Redis 的发布者/订阅者机制来相互发现的。
- 主节点知道所有「从节点」的信息,所以哨兵会每 10 秒一次的频率向主节点发送 INFO 命令来获取所有「从节点」的信息。
