筏提交后如何处理保存失败

时间:2019-03-01 05:34:01

标签: etcd 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"

1 个答案:

答案 0 :(得分:1)

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

  

C将没有数据“ abc”

这是不正确的。数据已保存在Raft日志中,只是在提交后尚未写入其他文件中。您在这里描述的是持久性状态机的行为,其中数据在提交到Raft日志中之后被保存在一些单独的存储区 中。但是请不要忘记在Raft日志中提交数据等同于持久保存数据。

持久状态机不仅具有基本的Raft协议要求,而且可以在raft dissertation中找到更多关于持久状态机的要求。通常,在持久状态机中,除了lastAppliedterm外,还需要持久保存votedFor索引。当条目被提交并应用于持久状态机(例如,写入每个节点上的数据文件)时,lastApplied索引将保持不变。在成功应用之前,不会从筏日志中删除条目。这样,即使无法将数据"abc"写入节点C上的文件,也不会丢失数据。