* 在Raft中,任何时候一个服务器可以扮演下面角色之一:
- Leader: 处理所有客户端交互,日志复制等,一般一次只有一个Leader.
- Follower: 类似选民,完全被动
- Candidate候选人: 类似Proposer律师,可以被选为一个新的领导人。
Raft阶段分为两个,首先是选举过程,然后在选举出来的领导人带领进行正常操作,比如日志复制等。
- 任何一个服务器都可以成为一个候选者Candidate,它向其他服务器Follower发出要求选举自己的请求:
- 其他服务器同意了,发出OK。
注意如果在这个过程中,有一个Follower当机,没有收到请求选举的要求,因此候选者可以自己选自己,只要达到N/2 1 的大多数票,候选人还是可以成为Leader的。
- 这样这个候选者就成为了Leader领导人,它可以向选民也就是Follower们发出指令,比如进行日志复制。
- 以后通过心跳进行日志复制的通知
- 如果一旦这个Leader当机崩溃了,那么Follower中有一个成为候选者,发出邀票选举。
- Follower同意后,其成为Leader,继续承担日志复制等指导工作: