1

说,我在 raft 中有 3 个节点。由于网络故障,节点 3 与其他 2 个节点分离。然后节点 3 总是成为候选人,向其他人发送 requestVote args 并发现它无法获得足够的选票。然后节点 3 增加其任期并再次尝试请求投票。所以节点 3 的任期明显大于提交日志的其他节点102, 103, 104, 105

一段时间后,网络恢复,节点 3 再次加入群组并成为追随者。但是,由于它的期限很大,它总是拒绝来自领导者(节点 1)的 AppendEntries。node 3如何将日志从102恢复到105?

Node 1(leader):
* logs [101, 102, 103, 104, 105]
* term [1,   2,   2,   2,   2  ...]
Node 2 (follower)
* logs [101, 102, 103, 104, 105]
* term [1,   2,   2,   2,   2  ...]
Node 3 
* logs [101]
* term [1,   2,   3,   4,   5  ...]
4

1 回答 1

4

您必须查看领导者在重新加入集群后将如何处理来自该追随者的响应。当领导者收到一个AppendEntries响应表明另一个节点有更高的任期时,领导者将更新自己的任期并下台以强制进行新的选举。在选举协议期间,所有候选人还将发现更高的任期并更新自己的任期。然后,将选出一些仍然拥有所有已提交条目的领导者,并且具有 >= 分区的跟随者的任期,并将委员会条目复制到它。

于 2016-10-07T18:47:51.560 回答