栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

100.分布式一致性算法Raft算法详解

100.分布式一致性算法Raft算法详解

分布式一致性算法Raft算法详解

Raft算法动态演示: http://thesecretlivesofdata.com/raft/

Leader 选举过程 一个节点有3中状态

三种状态:Follower(从节点)、Candidate(竞选状态)、Leader(主节点)

所有节点启动时都是Follower状态

如果一个Follower节点未检测到Leader,则会变为一个竞选者

竞选者会向其他节点发起投票,其他节点将回复票据

如果竞选者获取到的票据过半,则竞选者将成为一个Leader

分布式一致性同步过程(日志同步过程)

所有的数据变更操作(写操作),将由主节点完成

客户端发起写请求,请求先到达主节点

任何数据的变更,将写入节点的日志中

当前的日志是未提交状态,所以不会修改节点的值

Leader节点向所有Follower节点同步日志

主节点等待过半节点写入日志时,主节点提交,节点数据变更。并给客户端响应成功

然后Leader节点通知Follower节点进行数据提交。此时,集群中的节点数据是一致的

Leader选举过程详解 Raft算法有两个超时时间的设置,来控制选举

election timeout (选举超时时间): The election timeout is the amount of time a follower waits until becoming a candidate, The election timeout is randomized to be between 150ms and 300ms
选举超时时间是follower在成为 candidate 之前等待的时间,选举超时时间是150ms到300ms之间的一个随机值

节点在经过选举超时时间后,将变为candidate,并将Term + 1 (Term类似任期)

因为选举超时时间 是150 ~ 300 的随机值,所以总有一个follower节点先走完,变成一个candidate节点

candidate 节点先投自己一票

然后发送投票请求给其他节点

如果接收节点还没有投票,则将票据投给 candidate,并重置节点的 election timeout,开始重新计时。

当一个candidate收到过半的票据,他将成为Leader

主节点开始发送Append Entries的消息给从节点

Append Entries 消息按照心跳超时指定的时间间隔发送

从节点响应 Append Entries, 并重置 election timeout

Leader下线后,触发Leader的重新选择 NodeA的时间轮election timeout先到,A先变成了一个candidate,然后想B和C发起投票。A总是先投自己一票,并将自己的Term+1

A收不到B的票据,收到C的票据,加上C本身的票据,A有两票,所以A成为了Leader

分裂投票

当两个节点同时变为 candedate 时,会出现分裂投票

A和D的选举超时时间同时到达,同时变为candidate状态。A和D的Term+1,各自投自己一票。

B投给A,C投给D,则A和D各的2票,票据未过半,所以将开始新一轮的投票。

B和C收到投票后,将重置时间轮。
D的时间轮先到,则D将首先发起新一轮的投票,D的Term+1变为5,D将成为Leader。

结语

结合动画Raft演示: http://thesecretlivesofdata.com/raft/ ,可了解得更清楚。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/730546.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号