我目前正在自己实现Raft共识算法,因此遇到了以下问题。
考虑到有4个节点(A,B,C和D),因此日志条目的提交可以超过2票。现在,我们启动集群,并以term = 0
选出LeaderA。然后发生以下事情:
LogEntry
X。term = 1
开始选举。RequestVote
RPC。LogEntry
X。因此群集中没有领导者。LogEntry
X复制到B。现在,节点A / B / C具有完全相同的LogEntry
X,即(index = 0, term = 0)
。但是,根据Raft的论文,组长A不能提交X,尽管它是由自己生成的,并且大多数人都同意X。
筏从不提交前项的日志条目 副本。仅领导者当前任期的日志条目是 通过计算副本数来提交;
LogEntry
来自客户端要复制,因此LogEntry
X未被提交。我的问题是:
答案 0 :(得分:2)
否
是的。在第13页的牛皮纸中,您具有以下内容:
领导者的完整性 财产保证领导者拥有所有已提交的条目,但是在任期开始时,它可能不知道哪个 那些是。为了找出答案,它需要提交一个条目 它的期限。 Raft通过让每个领导者在其开始时在日志中提交一个空白的无操作条目来解决此问题 项
对于您的情况,在第7步之后,A
将创建一个NoOp
日志条目,它将成功复制它,将其提交,因此所有先前的条目都将被提交。