这是我参与2022首次更文挑战的第12天,活动详情查看2022首次更文挑战
Redis哨兵模式-节点通信
节点通信
当哨兵启动后,会与master建立一条连接,用于订阅master的_sentinel_:hello频道
该频道用于获取监控该master的其它哨兵的信息,并且还会建立一条定时向master发送INFO命令获取master信息的连接
当哨兵与master建立连接后,定期会向(10秒一次)master和slave发送INFO命令,如master被标记为主观下线,频率就会变为1秒一次。
并且,定期向_sentinal_:hello频道发送自己的信息,以便其他的哨兵能够订阅获取自己的信息,发送的内容包含哨兵的IP和端口、运行ID、配置版本、master名字、master的IP端口还有master的配置版本等信息。
以及 定期的向master、slave和其他哨兵发送PING命令(每秒一次),以便检测对象是否存活,若是对方收到PING命令,无故障情况下,会回复PONG命令
所以 哨兵会通过建立这两条连接、通过定期发送INFO、PING命令来实现哨兵与哨兵、哨兵与master之间的通信
INFO:获取主从数据库的最新信息,可以实现新节点的发现
PING:使用最频繁,封装了自身节点和其他节点的状态数据。
PONG:当节点收到MEET和PING,会回复PONG命令,也把自己状态发给对方。
MEET:在新节点加入集群时,会向老节点发送该命令,表示自己是新节点
FAIL:当节点下线,会向集群中广播该消息。
上线和下线
当哨兵与master相通后会定期一直保持联系,若是某一个时刻哨兵发送的PING在指定时间内没有收到回复,发送PING命令的哨兵会认为master主观下线。
有可能哨兵与master之间网络问题造成的,而不是master本身的原因,所以哨兵同时会询问其它的哨兵是否也认为该master下线,若是认为该节点下线的哨兵达到一定的数量,就会认为该节点客观下线。
若是没有足够数量的哨兵同意该master下线,则该master客观下线的标识会被移除,若是master重新向哨兵的PING命令回复了客观下线的标识也会被移除。