Raft的PreVote实现机制
1. 背景
在Basic Raft算法中,当一个Follower与其他节点网络隔离,如下图所示:

Follower_2在electionTimeout没收到心跳之后,会发起选举,并转为Candidate。每次发起选举时,会把Term加一。由于网络隔离,它既不会被选成Leader,也不会收到Leader的消息,而是会一直不断地发起选举。Term会不断增大。
一段时间之后,这个节点的Term会非常大。在网络恢复之后,这个节点会把它的Term传播到集群的其他节点,导致其他节点更新自己的term,变为Follower。然后触发重新选主,但这个旧的Follower_2节点由于其日志不是最新,并不会成为Leader。整个集群被这个网络隔离过的旧节点扰乱,显然需要避免的。
2. Provote算法
Raft作者博士论文《CONSENSUS: BRIDGING THEORY AND PRACTICE》的第9.6节 "Preventing disruptions w
Raft共识算法的PreVote机制解析

在Basic Raft中,网络隔离的Follower会不断发起选举导致Term增大。PreVote算法通过让Candidate先确认能赢得多数节点的投票再发起真正的选举,解决了网络分区节点重新加入时中断集群的问题。PreVote是一个2PC协议的预阶段,避免不必要的选举操作。
最低0.47元/天 解锁文章
2357

被折叠的 条评论
为什么被折叠?



