我一直在https://youtu.be/vYp4LYbnnW8?t=3244观看Raft Algorithm视频,但不清楚其中一种情况。
在第4届的领导人选举中,如果节点s1在s3之前广播RequestVote,则节点s2,s4和s5会投票给它,而s3则不会。然后节点s3向其他人广播RequestVote,如何获得其他人的投票?
一种我可以解决的可能的方法是:
<lastTerm, lastIndex>
更大),他们会投票给<lastTerm, lastIndex>
更大的节点。在两种情况下,最终节点s3都会获得其他所有人的投票,并将自己设置为领导者。我不确定我的猜测是否正确。
答案 0 :(得分:2)
(在我发表评论之前,请注意,提交条目#9可能没有 NO 的方式。没有指示提交哪些日志条目的指示,但是此讨论适用于#中的任何一项s 1-8被提交。)
简而言之,s3不会成为领导者,而s1则是因为它获得多数票。如果您担心的是#9条目将会丢失,那是真的,但是无论如何它都没有提交。
来自§5.3:
在木筏中,领导者通过强迫来处理不一致之处 关注者的日志以复制自己的日志。这意味着 追随者日志中的冲突条目将被覆盖 以及领导者日志中的条目。
评论您对情况的处理。
1,如果节点s1收到来自s3的拒绝,并且发现s3的日志比其本身新,并且即使它获得多数选票,也不要将自己设置为领导者
它可以这样做,但是它将使故障转移花费更长的时间,因为s3必须以不同的超时时间再次尝试,并且您进入了竞争状态,其中s1总是在s3之前广播广播RequestVote。但是,再次删除s3具有的多余条目总是安全的。
第5.3节的最后一段讨论了如何使用这种基于超时的简单选举过程,而不是对节点进行排名和选择最佳节点。我同意结果。 简单的协议更可靠。
2,对于其他节点,他们记得自己投票的领导者信息,如果有新的投票请求(
<lastTerm, lastIndex>
更大),他们将投票给<lastTerm, lastIndex>
更大的节点。
严格禁止,因为它会破坏领导人选举。就是说,如果您有这样的安排,您通常会选出多位领导人。 这很糟糕。我不能太强调这有多糟糕。不好,不好,不好。