RAFT选举限制

时间:2016-05-17 11:48:28

标签: replication distributed voting-system consensus raft

我用Raft paper从头开始学习筏子,我无法理解领导者的选举过程。我在5.4.1中读到领导者需要在其日志中拥有集群中所有已提交的条目:

  

Raft使用一种更简单的方法,它保证每个新领导者都能使用之前条款中的所有已提交条目   从选举的那一刻起,无需转移那些   领导者的条目。

     

Raft使用投票过程来阻止候选人赢得选举,除非其日志包含所有已提交的条目。

但是后来,据说候选人持有所有已提交的条目,如果它至少与大多数其他日志一样是最新的。确定此最新信息的机制是比较最后条目的索引和术语。在最后一个条目中具有较高期限的日志将是更新的。

无法导致领导者在没有所有先前提交的条目的情况下当选的情况?例如:

enter image description here

在这种情况下,如果服务器4出现故障,服务器2可能成为领导者,因为它的条目大于大多数。但它在日志中不会有来自第2项的两个承诺条目。是吗?我误解了一些东西,但我能得到它的东西......

1 个答案:

答案 0 :(得分:2)

问题是,日志是如何首先进入该状态的?这是不可能的。

所以看起来像:

* Server 2 is leader for term 1
* Server 1 is leader for term 2
* Server 2 (perhaps) is leader for term 3
* Server 4 is leader for term 4

但服务器2不可能成为第3学期的领导者,因为根据其日志中的最后一个条目来自第1学期的事实,它无法获得投票。如果另一个服务器是第3学期的领导者,那么如果在服务器2的日志中有第3项的条目,则必须在其日志中写入第3项的条目。但是如果在另一个服务器的日志中有第3个条目的另一个条目,则无法选择具有第2个条目的服务器,因为只有其中两个条目。即使服务器3在其日志中具有来自术语2的条目,也不能在该位置选出,因为在日志中较高的索引处仍然存在其他三个具有来自术语2的条目的服务器。

所以,我认为你需要描述集群如何进入一个状态,在这个状态中,服务器2可以赢得一次选举,将第3项的条目放在其索引4的日志中。重要的是要注意选举协议不只是关于条款,它也与指数有关。如果两个服务器的最后一个条目具有相同的术语,则具有较大最后一个索引的服务器将被视为更新。