Raft 会在选举后立即发送带有日志的 AppendEntries 吗? 我有一个关于 Raft 中日志复制的详细行为的问题

问题描述

我有一个关于 Raft 中日志复制的详细行为的问题。

图。 2 篇扩展的 Raft 论文说:

  • nextIndex 被初始化为 leader last log + 1 选举后
  • 如果关注者的最后一个日志索引 >= nextIndex:发送 AppendEntries RPC,日志条目从 nextIndex 开始。

因此,据我了解,可能会发生以下情况。

  • S1(leader,任期:10)从客户端收到命令 X。
  • S2(Follower,任期:10)开始选举并成为leader
  • ...
  • S1 (leader,Term:13) elected as leader (reinitialized nextIndex to leader last log + 1)
  • 然后,在收到来自客户端的下一个命令之前,S1 不会将包含命令 X 的日志的 Append Entries RPC 发送给关注者。

但是,图 8 的 (d) 看起来在 S5 被选中后立即发送带有“3”的 Append Entries RPC。 Fig.8

谁能告诉我为什么会这样?还是我弄错了?

解决方法

在选举之后,Leader 直接向追随者发送心跳,以将自己确立为新的 Leader。如果没有客户端请求,Leader 不会发送任何条目,但它仍会随心跳发送其 prevLogIndexprevLogTerm。如果与追随者不匹配,则追随者的 nextIndex 会递减。我认为下一个 Heartbeat 然后包含丢失的条目,当 prevLogIndexprevLogTerm 最终与关注者匹配时,丢失的条目可以应用于关注者。有些事情也依赖于实现。