什么是Raft?
raft是工程上使用较为广泛的强一致性、去中心化、高可用的分布式协议。大家应该都听过大名鼎鼎的Paxos,因为其理解的难度,raft算法的发明者转而研究出了raft算法。Raft增强了可理解性,在性能、可靠性、可用性方面是不输于Paxos的。
raft是一种leader-based的共识算法(consensus algorithm),在部分节点故障、网络延时、网络分割的情况下,多个节点对某个事情达成一致。在分布式系统中,共识算法更多用于提高系统的容错性。
Raft节点
raft协议中,一个节点任一时刻处于以下三个状态之一:leader、follower、candidate
所有节点启动时都是follower状态,在一段时间内如果没有收到来自leader的心跳,follower状态的节点会切换到candidate,发起选举。如果选举成功,则切换到leader状态,如果发现其他节点选举成功,则主动切换到follower。leader会不停的给follower发心跳消息,表明自己的存活状态。如果leader出现故障,一段时间后没有收到leader心跳的follower会转换成candidate,重新选出leader。
选举过程
term:可以理解为任期,leader的履职期。充当了逻辑时钟的作用,接收到leader的心跳,可以根据当前节点的term判断是否是最新的leader。
如果follower在election timeout内没有收到来自leader的心跳ÿ