哨兵机制是针对于Redis集群模式下对主从进行监控而存在的
哨兵机制会对Redis主从进行监控,当主节点故障下线时会从从节点中选出一个性能好的变成新主节点,并将IP地址和端口号发送给连接了旧主节点的客户端
哨兵机制在判断主节点是否故障下线时,为了减小误判的可能性,所以哨兵机制一般会部署为集群模式
一、监控主节点是否故障下线
如何判断主节点故障下线?
- 哨兵机制通过PING-PONG对节点状态进行判断,每隔一秒哨兵机制会给主节点发送PING命令,若参数 down-after-milliseconds 时间内还未收到主节点PONG命令回应则判断主节点主观下线
- 当一个哨兵判断主节点为主观下线后,会向其他哨兵发送确认命令,其他哨兵收到确认命令后会回复自身对于主节点是否下线的判断。若判断主节点下线的哨兵达到参数 quorum 值时,则判断该主节点为客观下线
由哪个哨兵选取新的主节点?
- 当某个哨兵判断主节点客观下线后,该哨兵会向其他哨兵发送确认命令,其他哨兵会对该哨兵进行选取新主节点进行是否同意判断。每个哨兵只能同意一个哨兵进行选取新主节点的操作,只有判断主节点客观下线的哨兵才能同意自己进行选取新主节点的操作,当某个哨兵:
- 得到哨兵集群半数以上的同意
- 拿到的同意数达到参数 quorum 值
- 当满足了以上两个条件时,就由该哨兵进行选取新的主节点操作
二、选取新主节点并替换旧主节点
选取新的主节点:
- 首先会过滤掉网络状态不好的节点
- 其次会选出相对优先级高,复制进度靠前,ID号小的节点作为主节点
然后将从节点指向新的主节点,将新的主节点的IP地址、端口号发送给客户端,最后将旧的主节点变成从节点