如何处理木筏承诺后的救援失败

问题描述 投票:0回答:1

在使用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个回答
1
投票

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

C不会有数据“abc”

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

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

© www.soinside.com 2019 - 2024. All rights reserved.