码迷,mamicode.com
首页 > 编程语言 > 详细

分布式Raft算法

时间:2018-08-10 17:03:59      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:简介   end   beat   sensu   src   oss   timeout   .com   超过一半   

参考文章:
《In Search of an Understandable Consensus Algorithm》
https://raft.github.io/
http://thesecretlivesofdata.com/raft/
这里有一个非常适合理解raft协议的小动画

1.1.1 简介
概念:
raft是一种用于管理log 复制的一致性协议,它和paxos有同样功能,但是比它简单容易理解。
功能:
leader 选举、日志复制及安全问题。并且提供了强一致性。

1.1.2 原理
这里以3个节点为例
每个节点都有三种状态:leader、candidate、follower
每个组有三种行为:leader election、log replication、safety。
1) leader election
当启动三个节点时,都处在candidate状态(raft有时间机制,然后发送vote信息给其他节点),当超过一半时会变成candidate,其他两个节点的状态会变为follower。
所有客户端数据的交换都跟leader进行。
2) log replication
log replication保证了数据在组中的一致性。log entry是这个的核心。
下图是过程
技术分享图片

技术分享图片

技术分享图片

在第三步的时候,raft协议会使用append entries message心跳检测,如果followers的log追加的key值的follower的数量过半,那么就会进行第四步即leader的log commit
技术分享图片

在raft协议中,这里有两个超时时间设置(它控制这选举)
election timeout:它是follower变成candicate时间。一般设置为150ms到300ms
如果选举超时,那么follower变成candicate同时新的一轮选举。首先candicate A会给自己投一票同时会向其他节点发送选我的信息,如果节点还未投票,那它会选A,同时这个节点会重置election timeout。一旦A得到的票数过一半以上,那就成为了leader,同时leader开始向followers发送Append Entries messages的操作,这个发送的时间间隔在heartbeat timeout之内。
followers然后会响应Append Entries message。选举会继续指导一个followers停止收到heartbeats并变为candidate。

注意:如果在log replication这一过程中,发生了网络分区或者网络通信故障,使得Leader不能访问大多数Follwers了,那么Leader只能正常更新它能访问的那些Follower服务器,而大多数的服务器Follower因为没有了Leader,他们重新选举一个候选者作为Leader,然后这个Leader作为代表于外界打交道,如果外界要求其添加新的日志,这个新的Leader就按上述步骤通知大多数Followers,如果这时网络故障修复了,那么原先的Leader就变成Follower,在失联阶段这个老Leader的任何更新都不能算commit,都回滚,接受新的Leader的新的更新。

分布式Raft算法

标签:简介   end   beat   sensu   src   oss   timeout   .com   超过一半   

原文地址:http://blog.51cto.com/laodou/2157322

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!