首页 文章

RAFT选举限制

提问于
浏览
1

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

Raft使用更简单的方法,它保证从选举之时起,每个新领导者都会出现之前条款中的所有已提交条目,而无需将这些条目转移给领导者 . Raft使用投票过程来阻止候选人赢得选举,除非其日志包含所有已提交的条目 .

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

难道这不会导致一个领导人当选而没有所有先前提交的条目吗?例如:

enter image description here

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

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

相关问题