作者: Unmesh Joshi
译者: java达人
预写日志中的索引,显示最近一次成功的复制。
问题
服务器崩溃并重新启动后,可使用“Write-Ahead Log”模式恢复状态。但是,如果服务器发生故障,Write-Ahead Log不足以提供可用性。如果单个服务器发生故障,则客户端将无法运行,直到服务器重新启动。为了获得更多可用的系统,我们可以在多个服务器上复制日志。使用领导者和追随者模式,领导者会将其所有日志条目复制到追随者法定数。现在,如果领导者失败,则可以选举新的领导者,并且客户可以像以前一样继续使用集群。但是仍然有几处可能出问题:
? leader在将其日志发送给任何追随者之前可能会失败。? 领导者可能会在向一些追随者发送日志条目时失败,无法将其发送给大多数的追随者。
在这些错误场景中,一些追随者可能在其日志中丢失条目,而一些追随者可能拥有比其他追随者更多的条目。因此,对于每个follower来说,了解日志的哪一部分对客户端是安全可用的就变得很重要了。
解决方案
high-water mark是日志文件的一个索引,它记录已知已成功复制到追随者Quorum的最后一个日志条目。在复制过程中,领导者还会将high-water mark传递给追随者。集群中的所有服务器应该只向请求低于high-water mark更新的客户端传输数据。
这是操作顺序:
Figure 1: High-Water Mark
对于每个日志条目,leader将其附加到其本地预写日志中,然后将其发送给所有追随者。
leader (class ReplicationModule...)
private Long appendAndReplicate(byte[] data) { Long lastLogEntryIndex = appendToLocalLog(data); logger.info("Replicating log entries from index " + lastLogEntryIndex); replicateOnFollowers(lastLogEntryIndex); return lastLogEntryIndex; }
private void replicateOnFollowers(Long entryAtIndex) { for (final FollowerHandler follower : followers) { replicateOn(follower, entryAtIndex); //send replication requests to followers } }
追随者处理复制请求并将日志条目附加到它们的本地日志中。在成功附加日志条目之后,它们将拥有的最新日志条目索引响应到leader。该响应还包括服务器的当前Generation Clock。
follower (class ReplicationModule...)
private ReplicationResponse handleReplicationRequest(ReplicationRequest replicationRequest) { List
Leader在收到响应时跟踪在每个服务器上复制的日志索引。
class ReplicationModule…
recordReplicationConfirmedFor(response.getServerId(), response.getReplicatedLogIndex()); long logIndexAtQuorum = computeHighwaterMark(logIndexesAtAllServers(), config.numberOfServers()); if (logIndexAtQuorum > replicationState.getHighWaterMark()) { var previousHighWaterMark = replicationState.getHighWaterMark(); applyLogAt(previousHighWaterMark, logIndexAtQuorum); replicationState.setHighWaterMark(logIndexAtQuorum); }
通过查看所有追随者的日志索引和领导者本身的日志,并获取大多数服务器上可用的索引,可以计算出High-Water Mark。
class ReplicationModule…
Long computeHighwaterMark(List
领导者将high-water mark作为常规心跳的一部分或作为单独的请求向追随者传播。追随者随后相应地设定了他们的high-water mark。
-
服务器
+关注
关注
13文章
10092浏览量
90854 -
分布式系统
+关注
关注
0文章
150浏览量
19817 -
Mark
+关注
关注
0文章
21浏览量
8730
发布评论请先 登录
如何解决分布式光伏计量难题?
分布式智能展厅控制系统:打造AI互动展示新模式!
【节能学院】Acrel-1000DP分布式光伏监控系统在奉贤平高食品 4.4MW 分布式光伏中应用
Ceph分布式存储系统解析
双电机分布式驱动汽车高速稳定性机电耦合控制
多通道电源管理芯片在分布式能源系统中的优化策略
安科瑞Acrel-1000DP分布式光伏监控系统在嘉兴亨泰分布式光伏项目中的应用
分布式光伏发运维系统实际应用案例分享
浅谈分布式光伏系统在工业企业的设计及应用
安科瑞能量管理系统在江西某啤酒厂分布式光伏发电项目中的应用

分布式系统模式—High-Water Mark
评论