RAFT选举限制

问题描述 投票:1回答:1

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

Raft使用一种更简单的方法,它保证从选举之时起,每个新领导者都会出现之前条款中的所有已提交条目,而无需将这些条目转移给领导者。

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

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

难道这不会导致一个领导人在没有所有先前承诺的条目的情况下当选的情况吗?例如:

enter image description here

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

replication distributed voting-system consensus raft
1个回答
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的日志中。重要的是要注意选举协议不仅仅是关于条款,它也是关于指数。如果两个服务器的最后一个条目具有相同的术语,则具有较大最后一个索引的服务器将被视为更新。

© www.soinside.com 2019 - 2024. All rights reserved.