3

我在筏子上有问题。

在论文“寻找可理解的共识算法(扩展版)”中说:

要开始选举,追随者会增加其当前任期并转换到候选状态。(在第 5.2 节中)

它还说:

在 AppendEntries RPC 和 RequestVot RPC 中,reciever 应该是“Reply false if args.term < currentTerm”

所以,让我们想象一下这个场景,raft系统中有5台机器,现在机器0是leader,机器1到4是follower,现在是term 1。突然,机器1断开网络,然后机器1超时,并且它开始领导选举,它发送 RequestVot RPC,肯定会失败(网络断开)。然后它将开始新的领导人选举......等等。机器 1 的期限是多次增加。可能增加到10。当机器1'Term增加到10时,它连接网络。并且领导者(机器0)向机器1发送心跳,机器1将拒绝心跳(机器0'期限小于机器1),现在机器1将无法重新加入系统。

4

1 回答 1

4

这里要记住的重要一点是,当节点收到更大的术语时,它总是更新其本地术语。因此,由于机器 1 将拒绝领导者的请求,领导者最终将了解更高的任期 (10) 并下台,然后将选出任期 >10 的新节点。

Obviously this is inefficient, but it's why most real world implementations use the so called "pre-vote" protocol, checking to ensure a node can win an election before it transitions to the candidate role and increments the term.

于 2017-11-30T17:12:08.797 回答