看了一些raft的文章,这篇讲的感觉比较清楚,首先推荐去看这篇:一文搞懂raft算法,这个动画演示可以帮助你理解raft:raft演示
raft协议讲的就是一个分布式的系统如何处理达成一致的:
- 选举出一个leader,系统数据以leader为准。
- leader提交数据时分为两阶段提交,一阶段预提交成功后(超过半数节点预提交成功,没成功的会一直发送同步请求),将major日志提交,之后返回客户端写成功,之后进行follower的二阶段更新。
- leader转换成follower的条件是收到来自更高term的消息,这种情况一般出现在网络分割的情况,被隔离的网络自己重新选举了新的leader,在恢复后就会重新进行选举。
如何选举:
每个raft节点有三种状态,leader,follower,candidate,最开始没有leader的时候,每个都是follower,进行一次投票后变为candidate,等待下一轮投票(如果本轮没有选出leader),每轮投票称为一轮term。
一个完整的提交流程: - leader append log entry
- leader issue AppendEntries RPC in parallel
- leader wait for majority response
- leader apply entry to state machine
- leader reply to client
- leader notify follower apply log
网友评论