2016-05-17 25 views
1

我正在从Raft paper从头学习木筏,我无法理解领导人选举过程。RAFT选举限制

筏使用更简单的方法它保证了从以前的所有方面承诺的条目是存在于每个:我在5.4.1,一个领导者需要在其日志在群集中的所有承诺条目读新领导 从其当选之日起,无需将这些 条目转移给领导。

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

但后来,据说候选保存所有提交的项目,如果它至少高达最新任何其他日志中的大多数。确定最新条目的机制是比较最后条目的索引和条款。最后一个条目的较高期限的日志将更新。

难道这不会导致领导者被选举而没有所有先前承诺的条目吗?例如:

enter image description here

在这种情况下,如果服务器4失败,服务器2有可能成为领导者,因为它具有比大多数更大的期限的条目。但是它的日志中没有第2项中的两个承诺条目。是吗?我误解了一些东西,但我可以得到它是什么...

回答

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,因为它没能基于一个事实,在其日志中的最后一项本来票已经不能为第三学期的领导者从术语1开始。如果另一台服务器是术语3的领导者,那么如果在服务器2的日志中有术语3的条目,则它必须在其日志中写入术语3的条目。但是如果在另一台服务器的日志中有第三项的另一项,那么第二项的服务器就不可能被选中,因为只有其中的两项。即使服务器3在其日志中有第2项的条目,也不能在该位置选出它,因为在日志中的较高索引处仍然会有三个其他服务器的条目2来自条目2。

因此,我认为您需要描述集群如何进入服务器2可能赢得选举的状态,该选举会将第3项的条目放入索引4的日志中。重要的是要注意选举协议不仅仅是关于术语,它也是关于索引。如果两台服务器的最后一项具有相同的术语,则具有较大最后一项索引的服务器被认为是更新的。

+0

我明白你说什么,但我的问题是不同的。例如,在你刚刚列出的例子中,我没有得到的是服务器2如何成为术语3的领导者(据推测),当术语2的两个第一项可能被提交时。 – vandermies

+0

服务器2不能成为术语3的领导者。在选举期间,服务器2的最后一个术语将是1.服务器2不能被选为术语3,因为大多数其他服务器 - 服务器1,4和5 - 具有条目从他们的日志中的术语2开始。这是我的观点。这个历史是不可能的。 – kuujo

+0

好的,只是为了确保我能得到它:限制条件是成为服务器的领导者必须拥有所有承诺的条目,然后通过在投票期间研究其他日志的条款和索引间接实施。不是由任何说明哪些条目已提交的变量?那是对的吗? – vandermies