【问题标题】:How is this configuration in Raft algorithm correctRaft算法中的这种配置如何正确
【发布时间】:2022-01-20 13:35:52
【问题描述】:

那么假设raft算法中3台服务器的日志配置如下:

S1 -> 3

S2 -> 3 3 4

S3 -> 3 3 5

如果假设 S3 是第 3 学期的领导者,则可能会出现这种配置,该条目已与每个副本一起提交,然后在具有相同领导者 S3 的另一个客户端操作中,它只能复制 S2 及其自身中的条目,然后它崩溃了。之后,S2从自身和S1中夺取选举。它获取一个条目并将其输入到日志中,然后崩溃。 S3 再次回来,然后从 S1 和它自己那里获得投票并成为领导者,在第 5 期进入另一个日志,然后崩溃。

现在我们遇到了第 4 和第 5 学期的条目肯定没有提交的情况。假设 S2 再次成为领导者(从自己和 S1 获得投票),它将尝试更正追随者中的日志,并最终覆盖并附加到两个追随者以获得:

S1 -> 3 3 4

S2 -> 3 3 4

S3 -> 3 3 4

在我的推理中,删除第 5 学期的日志是公平的,因为领导者可能没有向客户端响应完成消息,因为第 5 学期的条目复制没有在大多数服务器上完成。但是对于第 4 学期的条目来说,相同的论点是否有效,如果是,为什么它会在任何地方复制。客户端也不会在第 4 项中获得条目的完成响应,因此客户端会认为状态机不会运行此操作,但通过上述逻辑它会运行。

有人愿意解释一下吗?

【问题讨论】:

  • 您也可以尝试在 cs.stackexchange.com 上提出这个问题

标签: distributed-computing distributed consensus raft


【解决方案1】:

"After that S2 wins the election with votes from itself and S1. It gets an entry and enters it to the log"

当一个节点成为领导者时,保证它拥有最新的日志;并且日志中既有提议的也有提交的条目。 在新的领导者处理请求之前,它会向每个追随者发送一条空消息;该消息带有日志信息,如果某些追随者落后,领导者可能会得出结论。对于落后的人,领导者将运送所有丢失的条目。

此时领导者和多数人拥有相同的日志,领导者可以继续提交未提交的条目;然后接受新的请求。

查看原论文:https://raft.github.io/raft.pdf page 4 - AppendEntries RPC: Receiver implementation。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 2020-05-11
    • 2017-01-20
    • 2021-07-01
    • 1970-01-01
    • 2013-06-23
    相关资源
    最近更新 更多