RAFT 选举限制

RAFT election restrictions

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

Raft uses a simpler approach where it guarantees that all the committed entries from previous terms are present on each new leader from the moment of its election, without the need to transfer those entries to the leader.

Raft uses the voting process to prevent a candidate from winning an election unless its log contains all committed entries.

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

这不会导致在没有所有先前已提交条目的情况下选举领导者的情况吗?例如:

在这种情况下,如果服务器 4 出现故障,服务器 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 不可能是任期 3 的领导者,因为它无法根据其日志中的最后一个条目来自任期 1 的事实获得投票。如果另一个服务器是任期 3 的领导者,如果服务器 2 的日志中有第 3 项的条目,则它必须在其日志中写入第 3 项的条目。但是,如果在另一台服务器的日志中有第 3 项的另一个条目,则无法选择具有第 2 项条目的服务器,因为只有其中两个。即使服务器 3 在其日志中有来自任期 2 的条目,它也不能在那个位置被选出,因为在日志中的更高索引处仍然会有其他三台服务器有来自任期 2 的条目。

So, I think you need to describe how the cluster got in a state in which server 2 could have won an election that would put an entry from term 3 in its log at index 4. It's important to note that the选举协议不仅与条款有关,还与指数有关。如果两个服务器的最后一个条目具有相同的任期,则具有更大最后索引的服务器被认为是最新的。