← 返回题目列表

共识算法中 Follower 落后应该如何监控?

中等 第 25 / 26 题 更新于 2026/09/30
Follower LagRaft可观测性日志复制
学习 AI 实战项目

简化版

Follower 落后不能只看日志索引差,还要看时间差、字节差、状态机应用差和是否需要快照。 核心指标包括 Leader commitIndex、各 Follower matchIndex/appliedIndex、最近成功复制时间、复制吞吐、拒绝与重试、快照安装状态。 告警要结合写入速率和角色:差 1000 条在低流量时严重,在每秒 10 万条时可能只是 10 ms。

详细版

复制落后可定义为 commitIndex 减 matchIndex,应用落后为 commitIndex 减 appliedIndex。 前者说明日志尚未追到,后者说明日志已收到但状态机执行慢。 若日志条目大小差异大,还要统计 backlog bytes 与预计追平时间。

监控按节点、故障域和多数派健康聚合,避免每个日志 index 形成高基数时序。 持续落后节点会延长故障恢复、阻碍日志压缩,并在成为 Leader 时影响可用性。 处置前先区分网络、磁盘、CPU、状态机慢、快照传输和限速,而不是立即重启。

完整版教学

一、“落后”至少有两层

Follower 的日志可能尚未接收,也可能日志已接收却尚未应用。 只看最后日志 index 会把两种问题混在一起。

matchIndex 看复制进度,appliedIndex 看业务状态机进度;二者都要与 Leader 的提交边界比较。

二、核心指标定义

replication_lag_entries = leader_commit_index - follower_match_index
apply_lag_entries       = leader_commit_index - follower_applied_index
catch_up_eta            = backlog_bytes / effective_replication_bytes_per_sec

还要记录 last_ack_age、AppendEntries 延迟、失败率、冲突回退次数和当前 term。 索引不是时间,最好为已提交位置附加观测时间以估算秒级滞后。

三、为什么条数不足够

1000 条每条 100 B 只有约 100 KB,1000 条每条 1 MB 则近 1 GB。 相同 index gap 的网络与磁盘代价完全不同。

维度能发现的问题
entries gap逻辑进度
bytes backlog传输与磁盘工作量
seconds behind业务新鲜度
apply gap状态机瓶颈
snapshot status日志已压缩后的恢复路径

四、落后的常见原因

网络丢包和带宽不足会降低 AppendEntries 吞吐。 磁盘 fsync 慢导致持久化响应变慢。 Follower CPU/GC 暂停会同时影响复制与应用。 状态机涉及慢磁盘或大命令时 appliedIndex 单独落后。 Leader 对追赶流量限速过低,或快照与正常复制争用资源,也会延长恢复。

五、告警应使用持续时间和 SLO

瞬时 spike 不必告警,持续 5 分钟无法缩小的 backlog 更值得关注。 例如要求“任一故障后 10 分钟内副本追平,正常时 99% Follower 落后少于 2 秒”。 还要单独告警 quorum 风险:5 节点中两个严重落后,再坏一个节点就可能失去多数派。 Learner 落后的严重度可低于 voter,但会影响扩容完成时间。

六、快照边界

若 Follower 所需日志已被 Leader 压缩,只增加复制重试没有意义。 系统应切换为安装快照,监控 snapshot size、进度、耗时、失败和 lastIncludedIndex。 安装期间剩余日志仍增长,需要评估快照完成后的 tail catch-up。 频繁重复安装快照通常说明传输不稳、快照过大或压缩保留窗口过短。

七、定位和处置

先比较同故障域其他节点,判断节点问题还是网络/Leader 问题。 再看复制吞吐与写入吞吐:追赶速度必须长期大于新日志产生速度。 状态机慢则优化 apply,磁盘慢则检查 fsync、IO 饱和与队列。 不要盲目重启落后 Follower;重启可能丢失内存进度并再次触发大快照。

八、常见误区与追问

  • 误区:日志 index 差就是延迟秒数。 需要结合写入速率和提交时间。
  • 误区:lastLogIndex 追平就能服务最新读。 appliedIndex 可能仍落后。
  • 误区:Follower 落后不影响写。 voter 响应慢会降低可用冗余,特定 quorum 下也会影响提交。
  • 误区:落后就重启最有效。 可能触发更重的快照恢复。
  • 追问:如何估算追平时间? backlog bytes 除以扣除新写后的净追赶吞吐。
  • 追问:何时用快照? 需要的日志已被压缩,或逐条追赶成本明显更高时。
  • 追问:最关键的告警是什么? 持续不收敛、apply 卡住和多数派冗余下降。

九、加强记忆

  1. 区分复制落后与应用落后。
  2. 同时看条数、字节、秒数和快照进度。
  3. 告警结合写入速率、持续时间和 quorum 风险。
  4. 追赶净吞吐必须高于新日志增长。
  5. 按网络、磁盘、CPU、状态机和快照逐层定位,避免盲目重启。