【问题标题】:how to handle the saving failure after raft committedraft提交后如何处理保存失败
【发布时间】:2019-07-23 02:59:13
【问题描述】:

在使用 raft 时,在提交日志条目后,我们应该将节点提出的数据写入我们的存储中。如果其中一个节点写入失败怎么办。假设磁盘坏了。故障节点是否应该自行终止?

the proces like the following.
1. node A propose with data "abc"
2. raft log committed
3. A write data "abc" to file ok.
   B write data "abc" to file ok.
   C write data "abc" failed.
what should we do now ? since C won't have data "abc"

【问题讨论】:

    标签: etcd raft


    【解决方案1】:

    不要忘记这些更改已经保存在 Raft 日志中。 Raft 甚至不保证一旦提交更改(例如将更改写入另一个文件)将在任何时间范围内发生。所以

    C 不会有数据“abc”

    这不准确。数据一直保存在 Raft 日志中,只是在提交后还没有写入其他文件。您在这里描述的是持久状态机的行为,其中数据在提交到 Raft 日志之后保存在某个单独的存储中。但不要忘记,在 Raft 日志中提交数据就等于将其持久化。

    持久状态机的要求不仅仅是基本的 Raft 协议,更多关于它们的信息可以在raft dissertation 中找到。通常,在持久状态机中,除了termvotedFor 之外,还需要持久化lastApplied 索引。随着条目被提交并应用于持久状态机(例如,写入每个节点上的数据文件),lastApplied 索引被持久化。在成功应用之前,不会从 Raft 日志中删除条目。这就是您如何确保您的数据"abc" 不会丢失,即使它无法写入节点C 上的文件。

    【讨论】:

      猜你喜欢
      • 2021-03-07
      • 1970-01-01
      • 1970-01-01
      • 2019-08-24
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      • 2016-10-01
      • 2011-09-22
      相关资源
      最近更新 更多