Distributed system 当我采用筏式';s";从不通过计数副本提交以前条款中的日志条目”;在这种情况下,你能统治吗?
我目前正在自己实现Raft共识算法,我遇到了以下问题。 考虑有4个节点(A,B,C和D),因此日志条目可以提交超过2票。现在我们启动集群,并用Distributed system 当我采用筏式';s";从不通过计数副本提交以前条款中的日志条目”;在这种情况下,你能统治吗?,distributed-system,consensus,raft,Distributed System,Consensus,Raft,我目前正在自己实现Raft共识算法,我遇到了以下问题。 考虑有4个节点(A,B,C和D),因此日志条目可以提交超过2票。现在我们启动集群,并用term=0选出一位领导者。然后会发生以下情况: 从动件B/D断开 引线A创建LogEntryX 引线A尝试复制到所有节点,但最终失败,因为只有2个节点(A和C) 节点B重新连接并超时,它将使用新的term=1启动一个选择 节点A失去了领导地位,因为它收到了节点B的RequestVoteRPC 节点B无法赢得选举,因为它没有LogEntryX。因此集群中没
term=0
选出一位领导者。然后会发生以下情况:
LogEntry
Xterm=1
启动一个选择RequestVote
RPCLogEntry
X。因此集群中没有领导者LogEntry
X复制到BLogEntry
X,即(index=0,term=0)
。然而,根据Raft文件,领导者A不能提交X,尽管它是自己生成的,并且大多数人同意X
Raft从不通过计数提交以前术语中的日志条目
复制品。仅显示领导当前任期中的日志条目
通过计算副本来实施
LogEntry
s要复制,因此LogEntry
X保持未提交状态A
将创建一个NoOp
日志条目,它将成功地复制它,提交它,从而提交所有以前的条目
A
将创建一个NoOp
日志条目,它将成功地复制它,提交它,从而提交所有以前的条目