首页 文章

在Raft什么时候跟随者知道一个条目被提交?一个过时的节点可以赢得选举吗?

提问于
浏览
1

在木筏中,如果日志复制到多数,则认为它是在领导者中承诺的 . 然后领导者将msg发送给关注者告诉关注者一个条目变成了提交 . 如果没有, how and when follower know an entry become committed???

另一个问题,如果过时可以在下列情况下赢得选举? 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并回复客户端( In this point entry is considered committed by node B and node C or not ? ) . 然后节点A和节点B崩溃, node D start new election vote itself and get vote by node E, then win the election . 这种情况会发生吗?

2 回答

  • 0

    领导者向追随者发送的AppendEntries RPC包括提交索引,追随者可以在从领导者那里收到这些日志条目时将这些日志条目应用到他们的状态机 . Follows只从领导者那里获得一个提交索引,它从不计算它本身 . 如果领导者失败,新领导者将计算相关的提交索引并使用其AppendEntries RPC调用发送它 .

    对于选举问题,D不能赢得选举,需要3票才能获胜,而且不会从C投票 . 最终C将开始选举并赢得选举并继续作为领导者 .

  • 1

    关注者如何以及何时知道某个条目已被提交?

    • 他收到了当前领导者发送的最新提交索引的心跳消息 .

    • 或者,如果领导者在他可以告知其他人关于新索引之前失败,将选出一名新领导人,最终将从当前任期提交新条目,从而隐含地声明之前的索引(从前一个术语)已经提交 .

    Note :领导者只能从他自己的术语中提交一个索引(参见 §5.4.2 提交(1)中之前术语的条目) . 如果新当选的领导人想要知道最新提交的指数是什么,他需要在他当选后立即提交无操作(eration)条目 .

    一个过时的节点可以赢得选举吗?

    No. 要接收来自另一个对等方的投票,节点需要具有至少为最新1的日志作为他尝试接收投票的节点的日志 . (另一个节点也不应该在该特定术语中向其他人授予投票权)

    1包含后期的条目 . 或者,如果最新条目具有相同的术语编号,则它包含更多条目 .

相关问题