Redis 主从复制与哨兵(2)

哨兵节点每隔2s向__sentinel__:hello频道发送自身哨兵节点信息和自身了解的 master 信息。所有哨兵节点均会订阅该频道,并以此更新哨兵集群信息。

若哨兵节点发现 master 节点心跳响应超时,则认为 master 主观下线。此时,master 可能真的已经崩溃也可能仅仅是此哨兵节点与 master 之间出现网络故障。

认为 master 主观下线的哨兵会向其它哨兵发送sentinel is-master-down-by addr询问 master 是否下线。若半数以上的哨兵认为 master 已经下线则认为 master 客观下线。

哨兵节点会选举自己第一个收到的 is-master-down-by 命令的发送者为哨兵领导者。若某一个节点得到过半投票则会成为哨兵领导者,若没有节点得到半数以上票则会进入下一轮投票。此选举流程与 Paxos 算法类似。

哨兵领导者负责选择一个slave节点提升为新 master 节点, 选择逻辑为:

过滤掉不健康的 slave 节点

选择 slave-priority 配置值最小的从节点。若有多个从节点 slave-priority 最小且相同则进入下一步

选择复制偏移量最大的从节点,这意味着这个从节点上面的数据最完整。若仍有多个 slave 节点偏移量相同则进入下一步

选择 runid 最小的从节点

新的 master 节点选出后会执行提升流程:

向新选出的 master 节点发出 SLAVEOF NO ONE 命令,提升为新的 master 节点

向其它 slave 节点发出 SLAVEOF 命令跟随新的 master 节点

在哨兵集群中将下线的 master 节点更新为下线的 slave 节点,在其回复后命令其跟随新的 master

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b154e0805041b8c2ad4513279bc6abd1.html