筏子能否选出一位未提交日志的领导者?

时间:2018-06-14 11:52:50

标签: raft leader

假设一个由5个节点组成的集群(ABCDE),节点A在开头就被选为领导者,而leader-A向追随者(BCDE)发出AppendEntries RPC以复制日志条目(log-X),只有节点 - B接收并返回成功,此时领导者-A崩溃。

如果节点C(或D或E)赢得下一个领导者选举,那么一切都很好,因为只有节点B有log-X,这意味着没有提交log-X。

我的问题是,节点B(具有最长期限和最长日志)能否赢得下一次领导人选举?如果是这样,node-B会将log-X传播到其他节点吗?

1 个答案:

答案 0 :(得分:2)

是的B可以赢得选举,如果它确实成为领导者,那么它首先要在其日志中创建一个带有新术语的日志条目,并开始将其日志复制到所有关注者。由于B的日志包含log-X,如果一切顺利,最终将复制log-X条目&被认为是承诺

如果节点C赢得选举,那么当它成为领导者时,它将没有log-X条目,并且最终将覆盖节点B上的该条目。

有关详情,请参阅raft paper的第5.4.2节。

这也意味着您不能将失败视为意味着尝试的输入肯定不存在,只是调用者不知道结果。第8节有一些处理这个问题的建议。