Raft 可以选举一个没有提交日志的领导者吗?

Fik*_*ken 5 leader raft

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

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

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

sup*_*ell 3

是的,B 可以赢得选举,如果它确实成为领导者,那么它做的第一件事就是在其日志中创建一个包含新术语的日志条目,并开始将其日志复制到所有追随者。由于 B 的日志包含 log-X,如果一切顺利,最终 log-X 条目将被复制并被视为已提交。

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

更多详细信息请参见筏纸第 5.4.2 节。

此外,这意味着您不能将失败视为尝试的条目绝对不存在,只是调用者不知道结果。第 8 节提供了一些处理此问题的建议。