摘要
一种相对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;