gpt4 book ai didi

raft:提交的条目可能会丢失?

转载 作者:行者123 更新时间:2023-12-03 22:22:25 30 4
gpt4 key购买 nike

当领导者在所有追随者更新提交索引之前崩溃时会发生什么?

例如,节点 A、B、C 形成集群:

  • 只有 A 和 B 活着,A 是领导者
  • A 将一个条目(假设它是 entry1)复制到 B 并从 B
  • 获得成功的结果
  • A 提交 entry1,并在它向 B 发送心跳消息之前崩溃(这将导致 B 更新其提交索引)
  • C在线现在

  • 我的问题是:
  • C会被选为新领导人吗?如果是这样,那么entry1 会丢失吗?而且,如果A稍后重新加入,它的数据会与其他人不一致吗?

  • 我知道筏规范说:

    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.



    但是这里的 entry1 可能不被视为已提交的条目?因为 B 还没有得到老领导的确认(领导的心跳)。那么 C 有机会成为新的领导者吗?
  • 如果B成为新的leader,那么它应该如何处理entry1?
  • 最佳答案

    重要的是要注意,一旦条目存储在集群中的大多数服务器上(技术上有一些警告,但对于本次对话,我们应该假设是这种情况),而不是在节点收到提交消息时,就认为它已提交,这一点很重要从领导。如果需要提交消息来考虑已提交的条目,那么每次提交将需要两次往返——一次用于复制,一次用于提交——并且提交索引必须被持久化。

    相反,在您的场景中,当 A崩溃和 C恢复 Raft 选举算法将确保 C cannot be elected leader and so C无法删除已提交的条目。只有 B can be elected leader since it has the most up-to-date log.如 C tries to get elected leader, it will receive only a rejected vote from BB的日志比 C 更新's(它有提交的条目)。因此,您将在实践中看到的是 B最终将被选举,并将从其前一期提交所有条目,此时仍将征收进入的时间。即使 B然后崩溃和A被恢复,A仍然会有比 C 更新的日志and so it would again be elected leader.

    当(不是如果)B成为领导者,它将首先确保上一任期的条目存储在大多数服务器上,然后再提交当前任期的任何条目。通常这是通过在新领导人任期开始时提交一个无操作条目来完成的。本质上,新领导者提交一个无操作条目,一旦该条目存储在大多数服务器上,它就会增加其提交索引并将新提交索引发送给所有跟随者。因此,该条目不会丢失。新领导人将确保其 promise 。

    Raft 论文和论文中都描述了考虑存储在大多数集群上的条目要提交的注意事项。

    关于raft:提交的条目可能会丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37108309/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com