2

在 raft 中,如果日志复制到多数,则认为它已在领导者中提交。然后leader发送msg给follower,告诉follower一个entry变为commit。如果没有,follower如何以及何时知道一个entry变为commit?

Another question,if an out of date can win an election in the following case? 5个节点集群,节点A是当前leader。

答: 0 1 2 3 4

乙: 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 与否?)。Then node A and node B crash, node D start new election vote itself and get vote by node E, then win the election . 这种情况会发生吗?

4

2 回答 2

2

领导者发送给追随者的 AppendEntries RPC 包括提交索引,当追随者从领导者那里收到这些日志条目时,他们可以将这些日志条目应用到他们的状态机。Follows 只会从领导者那里得到一个提交索引,它自己从不计算它。如果领导者失败,新领导者将计算相关的提交索引并将其与 AppendEntries RPC 调用一起发送。

For the election question, D can't win the election, it needs 3 votes to win, and it'll not get a vote from C. Eventually C will start an election and win it and continue as leader.

于 2018-04-26T15:45:51.430 回答
0

追随者如何以及何时知道条目已提交???

  • 他要么收到来自当前领导者的心跳消息,其中包含最新的提交索引。
  • 或者,如果领导者在通知其他人新索引之前失败了,将选出一个新的领导者,最终将提交当前任期的新条目,从而隐式声明先前的索引(来自上一个任期)已提交。

注意:领导者只能提交他自己任期内的索引(请参阅第 5.4.2 节 中的(1)中的先前任期内的提交条目)。If a new elected leader wants to know what is the latest committed index, he needs to commit a no-op ( eration ) entry right after his election.

An out-of-date node can win an election?

不可以。要从另一个对等点接收投票,节点需要有一个至少为1的日志作为他试图从中接收投票的节点的日志。(在该给定期限内,另一个节点也不应该已经向其他人授予投票权)

1包含来自较晚学期的条目。或者,如果最新条目具有相同的术语编号,则它包含更多条目。

于 2018-04-27T17:22:13.743 回答