高水位标记
预写日志中显示最后一次成功复制的索引。
也称为:提交索引
问题
使用 预写日志 模式可以在服务器崩溃并重启后恢复状态。但是,预写日志不足以在服务器故障的情况下提供可用性。如果单个服务器发生故障,则客户端将无法正常工作,直到服务器重启。为了获得更可用的系统,我们可以在多个服务器上复制日志。使用 领导者和跟随者,领导者将其所有日志条目复制到 多数仲裁 的跟随者。现在,如果领导者发生故障,可以选择新的领导者,并且客户端可以像以前一样继续与集群一起工作。但是,仍然有一些事情可能出错
- 领导者可能在将日志条目发送到任何跟随者之前发生故障。
- 领导者可能在将日志条目发送到一些跟随者之后发生故障,但在将其发送到大多数跟随者之前发生故障。
在这些错误情况下,一些跟随者可能在其日志中缺少条目,而一些跟随者可能拥有比其他跟随者更多的条目。因此,每个跟随者都需要知道日志的哪一部分可以安全地提供给客户端。
解决方案
高水位标记是日志文件中的一个索引,它记录已知已成功复制到 多数仲裁 的跟随者的最后一个日志条目。领导者还在其复制过程中将其高水位标记传递给其跟随者。集群中的所有服务器都应该只向客户端传输反映高水位标记以下更新的数据。
有关更多详细信息,请访问 oreilly.com 上的在线电子书 第 10 章
此模式是 分布式系统模式 的一部分
2023 年 11 月 23 日