MIT 6.824课程中Raft协议某日志场景的可行性疑问
为什么Raft中这个日志场景是可行的?
日志场景:
10 11 12 13 14 15 S1: 3 S2: 3 3 4 S3: 3 3 5场景步骤:
- 时间10:所有服务器处于任期3;
- 时间11:S1崩溃,S2和S3构成多数派,完成任期3日志的复制;
- 时间12:S3崩溃,S2成为任期4的领导者,写入日志但未完成复制就崩溃;
- 随后S3成为任期5的领导者并写入日志。
你的疑问核心是S3的任期从3直接到5的合理性,其实这个场景的关键是Raft的任期递增规则和投票交互的中间步骤,并非直接跳级:
S2的任期4会传递给其他节点
当S2成为任期4的领导者后,哪怕日志没完成复制,它大概率会向存活的S1发送心跳包(AppendEntries请求)。S1收到后,会将自身任期更新为4并转为follower,只是日志仍停留在任期3的状态。S3恢复后的任期更新
S3恢复时任期是3,发起选举时会向S1发送投票请求:
- S1的任期是4,会拒绝投票并告知S3当前更高的任期;
- S3随即更新自身任期到4,转为follower。
- 任期5的选举过程
接下来S1任期为4,超时后发起选举,将任期加1到5并向S3请求投票:
- S3的任期是4,先更新到5,但对比日志发现自己的日志(2条任期3条目)比S1的(1条任期3条目)更完整,会拒绝投票;
- S3超时后发起选举,将任期加1到5,向S1发送投票请求;
- S1对比日志后,认可S3的日志更完整,投出同意票,S3拿到多数票(2票),成功当选任期5的领导者,随后写入任期5的日志。
整个过程中S3的任期是从3→4→5逐步递增的,完全符合Raft的任期规则,不存在直接跳级的情况。
内容的提问来源于stack exchange,提问作者George Costanza
相关产品推荐
相关产品推荐

