Raft 中一个 Term(任期)是什么意思?
在raft算法中,任期为上次一选举到下一次选举期间,如果cluster不发生故障,leader一直在任,那么这个leader的任期会无限长;如果follower收不到leader的心跳信号,就会变成candidate(候选人)发起选举;如果出现多个候选人均分选票竞选失败,该任期没有leader;候选人得票多的当选leader接任.
Raft 状态机是怎样切换的?
raft算法状态机有三种状态:follower, leader, candidate; 所有node启动默认为follower, 等待leader发来心跳; 如果follower到time_out都还没收到leader心跳就会切换成candidate发起选举,此时term+1;如果该候选人收到了大部分选票就会切换成leader上任, 定时给follower发送心跳; 如果candidate(候选人)在选举期间收到已经选举成功的leader的心跳,将会切换成follower.
如何保证最短时间内竞选出 Leader,防止竞选冲突?
每个node都会有一个包含随机因子的time_out, follower如果在time_out时长内没有收到leader的心跳,就会切换成candidate; 因此每个node切换成候选人的时机是不一样的;并且规定,如果Candidate1收到其他term比他大的选举信息(且包含了它本身所有提交数据),那么该Candidate1就会投票给这个Candidate2.
如何防止别的 Candidate 在遗漏部分数据的情况下发起投票成为 Leader?
Candidate发起选举(拉票)的同时会携带自己上一个term已提交的数据,其他node会对比这个数据是否比自己新或是一样,如果是才会投票给这个candi