raft

etcd和consoul的核心算法
Raft是一种实现分布式共识的协议。

 

Raft提供了一种在计算系统集群中分布状态机的通用方法,确保集群中的每个节点都统一 一系列相同的状态转换
他有许多开源参考实现,具有GO,C++,Java和Scala中的完整规范实现
一个raft集群包含若干个服务器节点,通常是5个,这允许整个系统容忍2个节点的失效,每个节点处于以下三种状态之一
    follower(跟随者):    所有节点都已follower的状态开始。如果没收到leader消息则会变成candidate状态
    candidate(候选人):会向其他节点拉选票,如果得到大部分的票则成为leader,这个过程就叫做leader选举
    leader(领导者): 所有对系统的修改都会先经过leader

 

Raft一致性算法
Raft通过选出一个leader来简化日志副本的管理,例如,日志项只允许从leader滚向follower

基于leader的方法,Raft算法可以分解成三个子问题
    1、leader election(领导选举):原来的leader挂掉后,必须选出一个新的leader
    2、Log replication(日志复制): leader 从客户端接收日志,并复制到整个集群中
    3、Safety(安全性): 如果有人以的server将日志项放回到状态机了,那么其他的server只会回放相同的日志项

 动画:   http://thesecretlivesofdata.com/raft

1、简单版的领导者选举和日支复制的过程
2、详细版的领导者选举和日志复制的过程
3、如果遇到网络分区(脑裂),raft算法是如何恢复网络一致的
Leader election(领导选举)

 

1、raft使用一种心跳机制来触发领导人选举
2、当服务器程序启动时,节点都是follower身份
3、如果一个跟随者在一段时间里没有接收到任何消息,也就是选举超时,然后他就会认为系统中没有可用的领导者,然后开始选举 以选出新的领导者
4、要开始一次选举过程,follower会给当前当前term +1,并将其转换成candidate (选举状态),然后它会并行的向集群中的其他服务器节点发送请求投票的RPCs来给自己投票
5、候选人的状态维持知道发生以下一个条件发生的时候

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2020-02-26 21:46  慕沁  阅读(299)  评论(0)    收藏  举报