最近在用RAFT搭建一个分布式系统,实现一个简单的功能就是将日志条目复制到每台服务器,以保持数据的一致性,所以我的问题是在RAFT中所有节点都登录的时候如何安全的删除历史日志条目已提交。
问问题
213 次
1 回答
1
我不确定您的问题是否足够完整以给出完整的答案,但通常这个问题是根据持久状态机提出的。如果 Raft 仅用于线性化和复制客户端请求,并且一旦提交,条目将单独持久化(例如存储在数据库中),正确的方法是定期持久化lastApplied
每个节点的术语和索引,并删除所有条目观点。
但是,请注意,当节点重新启动时,仍然会有一些日志重放,这在技术上是不可避免的,因为应用条目和持久化lastApplied
索引不能原子地完成,因此仍然需要在持久状态机中考虑日志条目的重放。
另一个复杂因素是要赶上新节点或落后于lastApplied
索引的节点。在这种情况下,您必须将持久状态作为快照发送以赶上节点。
请参阅 Raft 论文中有关持久状态机的部分。
不管这是否正是您遇到的用例,为可以立即丢弃的条目保护系统安全的一般方法是相同的。
于 2018-12-17T09:11:04.947 回答