现在市面上的很多分布式系统所用的分布式一致性算法基本上都是采用的Raft算法,比如Redis集群、Redis哨兵系统、Consul集群等。还有其他分布式一致性算法,比如Paxos、ZAB(zookeeper atomic Broadcast)等。
首先,什么是分布式一致性?是指在分布式系统中,各个节点的状态如何达到一致的问题。如果数据只存储一份,那么天然是一致的,因为一份数据永远只有一个状态。为了解决单点的性能瓶颈和故障不能转移等问题,引入的集群的架构,同时也带来了一致性的问题,即多个节点在某些时刻的状态不一致的问题。再往下就要提到CAP理论和BASE理论,就不展开了。
由于Paxos比较难以理解,所以出现了Raft。下面我们主要介绍Raft。
一言一概之,Raft是通过选举出一个领袖,负责将变更同步给其他跟随者,从而达到一致的系统。
Raft系统,含有多个节点,每个节点有三种状态:
跟随者状态(Follower state):完全被动,不主动发送请求。
候选人状态(Candidate state):成为领袖之前的状态。
领袖状态(Leader state):管理所有客户端请求,并同步给跟随者。
下文,我将领袖节点也称为主节点,跟随节点称为子节点。
一、领袖选举(leader election)
开始的时候所有节点都是跟随者,因为这时还没选出领袖。
在Raft中,有两个超时时间设置来控制选举,其中一个是选举超时(election timeout),是指