算法【Raft 投票】
一、简介
Raft算法属于典型的多数派选主算法,谁获得的票数最多,谁就可以成为主节点。
二、说明
Raft算法选主中集群各个节点的角色有3种:
Leader:主节点,同一时刻只有一个Leader节点,负责整个集群的节点间的协调和管理。
Candidate: 候选节点,只有角色为候选者的节点才可以被选为新的Leader,每个节点 都有可以成为候选者。
Follower:Leader的跟随者,这个角色的时候不可以发起选主。
三、选举流程
- 初始化时,各个节点均为Follower状态;
- 开始选主时,所有节点的Follower状态转为Candidate状态,并向其他节点发送选主请求;
- 其他节点根据收到的选主请求的先后顺序,进行回复是否同意其成为主节点;每个节点只能投一张票;
- 发起选主的节点如果得到一半以上的投票,则会成为主节点,状态变为Leader,其他几点则会由Candidate转为Follower状态,此时Leader和Follower将保持心跳检测;
- 如果Leader节点的任期到了,Leader则会降为Follower,进行新一轮选主。
四、触发条件
1、Leader出现故障;
2、Leader任期满了(节点有一定的任期时间)
五、优缺点
【优点】:选举速度快、算法复杂度低、易于实现的优点
【缺点】:1、集群中各个节点均需要相互通信,且需要半数以上的节点同意才能成为主,因此通信量比较大。
2、Raft的稳定性要比Bully算法好,是因为它在新节点加入或者故障节点恢复的时候,并不一定像Bully那样可能频繁切主,除非投票数过半才会真的切主。