1、节点状态
需要引入3种节点状态:Follower(跟随者)、Candidate(候选者)、投票的触发点,Leader(主节点)。
2、进入投票状态的计时器
Follower、Candidate两个状态时,需要维护一个计时器,每次定时时间从150ms-300ms之间进行随机,即每个节点的每次的计时过期不一样,Follower状态时,计时器到点后,触发一轮投票。节点在收到投票请求、Leader的心跳请求并做出响应后需要重置定时器。
3、投票轮次Team
Candidate状态的节点,每发起一轮投票,Term加一;Term的存储。
4、投票机制
每一轮一个节点只能为一个节点投赞成票,例如节点A中维护的轮次为3,并且已经为节点B投了赞成票,如果收到其他节点,投票轮次为3,则会投反对票,如果收到轮次为4的节点,是由可以投赞成票的。
5、成为Leader的条件
必须得到集群中节点的大多数,即超过半数,例如如果集群中3个节点,则必须得到两票,如果其中一台服务器宕机,剩下的两个节点,还能进行选主码?答案是可以的,因为可以得到2票,超过初始集群中3的一半,所以通常集群中的机器尽量为奇数,因为4台的可用性与3台一样。