如果日志复制到多数,则在raft中,它被认为是在领导者中提交的。然后领导者将msg发送给关注者,告诉关注者一个条目成为提交。如果没有,关注者如何以及何时知道条目被提交???
另一个问题,如果在以下情况下过时可以赢得选举? 5节点集群,节点A是当前的领导者。
A: 0 1 2 3 4
B: 0 1 2 3 4
C: 0 1 2 3 4
D: 0 1 2 3
E: 0 1
当节点A(当前领导者)收到请求(条目4)时,记录它并将其复制到节点B和节点C.然后节点A在状态机中应用条目4并回复客户端(此时条目被认为是由节点B和节点C提交的吗?)。然后节点A和节点B崩溃,节点D开始新的选举投票并由节点E投票,然后赢得选举。这种情况会发生吗?
答案 0 :(得分:1)
领导者向关注者发送的AppendEntries RPC包括提交索引,关注者可以在从领导者那里收到这些日志条目时将这些日志条目应用到他们的状态机。 Follows只从领导者那里获得一个提交索引,它从不计算它本身。如果领导者失败,新领导者将计算相关的提交索引,并使用其AppendEntries RPC调用发送它。
对于选举问题,D不能赢得选举,需要3票才能获胜,而且它不会从C中获得投票。最终C将开始选举并赢得选举并继续领导者。
答案 1 :(得分:0)
关注者如何以及何时知道某个条目已被提交?
注意:领导者只能根据自己的条款提交索引(请参阅§5.4.2 提交以前条款中的条目 { {3}})。如果新当选的领导者想要知道什么是最新提交的索引,他需要在他当选后立即提交 no-op ( eration )条目。
过时的节点可以赢得选举吗?
否。要接收来自其他对等方的投票,节点需要具有至少为最新的日志 1 作为他试图接收投票的节点的日志。 (另一个节点也不应该在该特定术语中向其他人授予投票权)
1 包含后期的条目。或者,如果最新条目具有相同的术语编号,则它包含更多条目。