1:领导者
2:候选者
3:跟随者
在服务初始化时,所有节点为跟随者,在没有领导者的情况时,每个跟随者都有权发起候选投票,投票半数赞成后成为领导者
选举的详细过程
服务初始化启动选举过程:
1:所有节点为跟随者...,任期号为0
2:跟随者尝试获取领导者信息,选举信息
3:获取不到领导者信息,根据自身的超时时间,超出后开始投票选举,任期号为1
4:其他跟随者接收到选举信息,发起投票
5:如果超出半数,直接成为领导者...,通知所有候选者以及跟随者,其他候选者成为跟随者,同步任期号为1
多个候选者情况
节点ABCDE,在选举过程中,有可能A,B同时成为选举者发起投票,恰好E节点断开,此时C支持A,D支持E,发生了选票相同...,发送给领导者
5:领导者发送确认提交数据
如果领导者无法接收到半数以上的跟随者确认数据时,将判断这条数据插入失败
日志
在raft算法中,所有的数据同步,都由日志来实现的,日志有以下特点:
1:日志不会被删除...,领导者将负责与跟随者同步日志(以领导者数据为准)
当领导者宕机后,跟随者将选出存储日志最新的领导者,并且以其通信同步日志
旧领导者恢复后,成为跟随者,同步新领导者的日志
日志压缩
由于日志不会被删除