Raft是用来管理复制日志的共识算法。它通过复制状态机来保持整个集群的一致性。
raft-overviewleader选举
raft-leader- 一开始大家都是candidate
- candidate发送RPC到其他节点,向自己投票
- 如果candidate获得半数以上的票数,则成为leader
- 否则看是否有其他的candidate成为了leader
- 如果没有则在一定随机时间后再次发起投票
日志复制
raft-log- leader收到客户端请求变更
- leader会把变更追加到log中,并编号
- leader不断向follower同步变更
- 当leader同步变更给大部分的follower成功后,就会返回客户端,告知变更成功
- 否则leader会不断重发变更给follower。
安全性
- 如果leader下线,只有最大offset的follower可以成为新leader
日志压缩
log会越来越长,可以通过快照的方式,把log压缩,并只保留最近的log
raft-snap
网友评论