假设一个由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传播到其他节点吗?
答案 0 :(得分:2)
是的B可以赢得选举,如果它确实成为领导者,那么它首先要在其日志中创建一个带有新术语的日志条目,并开始将其日志复制到所有关注者。由于B的日志包含log-X,如果一切顺利,最终将复制log-X条目&被认为是承诺
如果节点C赢得选举,那么当它成为领导者时,它将没有log-X条目,并且最终将覆盖节点B上的该条目。
有关详情,请参阅raft paper的第5.4.2节。
这也意味着您不能将失败视为意味着尝试的输入肯定不存在,只是调用者不知道结果。第8节有一些处理这个问题的建议。