图解Raft之日志复制

栏目: 后端 · 发布时间: 6年前

内容简介:日志复制可以说是Raft集群的核心之一,保证了Raft数据的一致性,下面通过几张图片介绍Raft集群中日志复制的逻辑与流程;在一个Raft集群中只有Leader节点能够接受客户端的请求,由Leader向其他Follower转发所有请求日志,并且有那么两条规则:Leader不删除任何日志、Follower只接收Leader所发送的日志信息;

日志复制可以说是Raft集群的核心之一,保证了Raft数据的一致性,下面通过几张图片介绍Raft集群中日志复制的逻辑与流程;

图解Raft之日志复制

在一个Raft集群中只有Leader节点能够接受客户端的请求,由Leader向其他Follower转发所有请求日志,并且有那么两条规则:Leader不删除任何日志、Follower只接收Leader所发送的日志信息;

图解Raft之日志复制

此图介绍了Raft集群中日志的组成结构,日志由序号与条目组成,每个条目又由任期与指令组成,committed范围内为已提交的日志是指过半节点已经接收并存储的日志;

图解Raft之日志复制

上图从整个上介绍了Raft集群的日志复制流程,Leader接收到指令后写入到本地日志,在随后的心跳中(AppendEntries)往其他追随者发送该条目,等待收到过半追随者响应后将该条目标志位已提交状态,并发往状态机执行,完成后返回结果给客户端;在后续心跳包(AppendEntries)中通知所有追随者哪些条目为已提交状态,以便追随者更新在自己状态机中执行该指令; 只有Leader能够接受客户端的指令,追随者只能够接收领导者的AppendEntries请求;

图解Raft之日志复制

在Raft集群中可通过条目索引号、任期号唯一确定一个条目,该条目前序所有条目也是一致的,如上图中索引号为5的条目为已提交状态的条目,则从索引号1到5的所有条目均为已提交的状态;

图解Raft之日志复制

上图中Leader发送AppendEntries请求时带有其前序索引位置4、前序任期号2,发往Follower1、Follower2;

Follower1由于前序索引与前序任期能匹配本地条目所以将会接受该请求;

Follower2由于前序索引与前序任期未能够匹配所以拒绝该请求;

图解Raft之日志复制

Raft处理日志不一致的情况是通过强制追随者复制领导者日志来调整日志一致性的,所以当追随者与领导者出现日志不一致时,追随者日志将会被领导者日志覆盖;

要使领导者与追随者保持一致性的状态,需要两者找到一致性的位置,删除追随者该位置之后所有日志条目,发送领导者日志给追随者;

领导者通过在每一个追随者维护了一个 nextIndex,表示下一个需要发送给跟随者的日志条目索引地址,领导者刚获得选举时,初始化所有 nextIndex 值为自己的最后一条日志的index加1;当追随者的日志和领导者不一致,那在下一次的AppendEntries时的一致性检查会失败,被追随者拒绝后,领导者就会减小 nextIndex 值进行重试,nextIndex 会在某位置使领导者和追随者日志达成一致。

当日志达成一致时,追随者会接受该AppendEntries请求,这时追随者冲突的日志条目将全部被领导者的日志所覆盖。一旦AppendEntries成功,那么跟随者的日志就会和领导人保持一致,并且在接下来的任期里一直继续保持。

参考资料:

http://ramcloud.stanford.edu/raft.pdf


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

史蒂夫·乔布斯传

史蒂夫·乔布斯传

[美] 沃尔特·艾萨克森 / 管延圻、魏群、余倩、赵萌萌、汤崧 / 中信出版社 / 2011-10-24 / 68.00元

这本乔布斯唯一授权的官方传记,在2011年上半年由美国出版商西蒙舒斯特对外发布出版消息以来,备受全球媒体和业界瞩目,这本书的全球出版日期最终确定为2011年11月21日,简体中文版也将同步上市。 两年多的时间,与乔布斯40多次的面对面倾谈,以及与乔布斯一百多个家庭成员、 朋友、竞争对手、同事的不受限的采访,造就了这本独家传记。 尽管乔布斯给予本书的采访和创作全面的配合,但他对内容从不干......一起来看看 《史蒂夫·乔布斯传》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

SHA 加密
SHA 加密

SHA 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具