分布式共识算法-raft
大纲:
- 共识算法简介
- 结点状态与竞选leader
- 如何保证数据一致
一、共识算法简介
个人理解:在一个分布式系统中,共识算法保证的时CP而不是AP,一致的数据才能称为共识。
假设一个分布式存储系统由多个结点组成,基于raft的分布式系统需要奇数个节点(保证竞选投票与分区时一个分区中结点过半)
二、结点的状态与竞选leader
每个节点有三种状态:follower,candidate,leader,状态之间是互相转换的
leader-主节点,主节点负责与客户端通讯;给follower发心跳;同步日志与提交命令给follower
follower-从节点,每一个follower有一个倒计时器,时间随机,倒计时结束后自动转换成candidate,结点的初始状态都是follower
candidate-向其他结点发送投票请求,收到半数以上票时,candidate成为leader,并向其他follower发送心跳。如果再给其他follower发心跳同时收到了其他candidate的心跳说明同时当选leader,则本轮竞选无效。再通过重置倒计时器重新竞选。
倒计时器-当受到candidate投票请求,与leader心跳,倒计时器重新刷新倒计时
三、如何保证数据一致
客户端向服务端发送存储数据的请求,
- leader记日志,把消息分发follower记日志
- leader提交响应客户端提交成功
- 然后通知follower提交
发生网络分区时,
两个分区分别选举leader,出现脑裂,那么超过半数结点的分区的leader可以继续对外服务,另一个分区leader无法提交。恢复网络正常后,小于半数结点的分区leader重新变成follower,同时该分区的结点通过主节点日志追加丢失的数据