分布式一致性算法-raft

摘要

一种相对paxos更简单的算法;具体流程:raft会先选举出leader,leader完全负责replicated log的管
理。leader负责接受所有客户端更新请求,然后复制到follower节点,并在“安全”的时候执行这些
请求。如果leader故障,followes会重新选举出新的leader;

 

详情

知识点

1.节点的三个状态(同一时间只能由一个状态):

  • leader(领导)
  • fllower(跟随者)
  • condidate(领导候选人)

最大容错节点数量:(n-1)/2

领导竞选

系统一启动,所有节点都是follower状态;如果一段时间没有收到leader的心跳,发起选举;
1.增加节点本地的current term, 切换到candidate状态
2.投自己一票
3.并行给其他节点发送RequestVote RPCs
4.等待其他节点的回复:
    4_1.收到投票(含自己的一票)结果,赢得选举,成为leader
    4_2.被告知别人已当选,自行切换到follower
    4_3.一段时间内没有收到投票结果,保持candidate状态,重新发出选举

注意点:
1.每个节点只能投一票
2.选举人为奇数,防止票数相等
3.leader只能追加记录,无法覆盖删除记录

log replication

    leader将客户端请求(cmd)封装到一个个log entry,将这些log entries复制(replicate)到所有
follower节点,然后按相同顺序应用log entry中的command;

日职匹配(log matching)

    当follower与leader的日志不一样时:
        1.当follower的日志比leader多:
        2.当follower的日志比leader少:
        3.某些位置比leader多,某些位置比leader少:
    都以leader为准

领导权混乱(stale leader)

    当因为某一种原因导致一个群体分割为互相隔绝的2部分时,每个部分都会各自产生一个leader,
    当他们恢复通讯时,leader收到了来自更高的term id,leader自动转为follower;
 

 

 

 

你可能感兴趣的:(分布式)