我一直在https://youtu.be/vYp4LYbnnW8?t=3244观看 Raft 算法视频,但不清楚一种情况。
在任期 4 的领导者选举中,如果节点 s1 在 s3 之前广播 RequestVote,那么节点 s2、s4 和 s5 会投票给它,而 s3 不会。然后节点s3向其他人广播RequestVote,它如何获得其他人的投票?
我能弄清楚的处理这种情况的一种可能方法是:
- 如果节点 s1 收到 s3 的拒绝,发现 s3 的日志比自己更新,即使获得多数票也不将自己设置为领导者
- 至于其他节点,他们会记住他们投票的leader信息,如果有新的投票请求(更大
<lastTerm, lastIndex>
),他们会投票给更大的节点<lastTerm, lastIndex>
。
在这两种情况下,最终节点 s3 都会获得所有其他人的投票,并将自己设置为领导者。我不确定我的猜测是否正确。