2024-05-02  阅读(69)
版权声明:本文为博主付费文章,严禁任何形式的转载和摘抄,维权必究。 本文链接:https://www.skjava.com/mianshi/baodian/detail/4023163175

回答

一旦确认主节点客观下线,就需要进行故障转移。这个时候各个 Sentinel 之间会进行一次选举,选出一个领导者来负责这次的故障转移流程。

Sentinel 之间通过发送 RAFT 的投票协议消息来选举领导者。每个 Sentinel 节点都会给某一个请求它进行投票的 Sentinel 节点投票,但在整个选举过程中,每个 Sentinel 只能投一次票。通常情况下,第一个请求投票的 Sentinel 会获得同意。

如果某个Sentinel 节点发现自己得到的票数已经超过半数且超过 <quorum>,那么它就成为领导者。

如果这个过程中有多个 Sentinel 成为领导者,那么将等待一段时间重新进行选择,直到有且只有一个 Sentinel 节点成为领导者为止。

扩展

假如有 ABCD 四个节点构成 Sentinel 集群。假如 A 率先完成客观下线,则 A 会向 BCD 发出成为领导者的申请,由于 BCD 没有同意过其他 Sentinel 节点,所以会将投票给 AA 得到三票。B 则向 ACD 发起申请,由于 CD 已经同意了 A,所以会拒绝,但是他会得到 A 的同意,所以 B 得到一票,同理 CD 得到零票,如下图:

节点 得到的票数
A B 、C、D
B A
C
D

所以 A 会成为领导者,进行故障转移工作。一般来说,哨兵 leader选择的过程很快,谁先完成客观下线,一般就能成为领导者。