跳转到内容

故障模式运行手册:多 AZ 与 Aeron 边界场景

凌晨三点出故障时,你需要的是一张表,而不是一套理论。本运行手册涵盖最常触发 on-call 告警的两类故障:基础设施级故障(AZ 丢失、跨 AZ 延迟、区域级事件)和 Aeron 特有的边界场景(media driver 崩溃、archive I/O 错误、组件失同步、mark 文件损坏、日志缓冲区溢出)。针对每一类,你都能拿到数据丢失风险、可用性影响、恢复复杂度以及修复方案。

基础设施故障归根结底都是法定人数(quorum)的问题。丢掉少数节点不影响运行;丢掉多数节点就会宕机。下表是快速查询表。

场景数据丢失风险可用性影响恢复复杂度修复方案
AZ 故障(少数节点)无(法定人数仍满足)低——AZ 恢复后自动追赶等待 AZ 恢复;节点自动重新加入并追赶。确保节点分散在各 AZ(3 节点集群每个 AZ 放 1 个)
AZ 故障(多数节点)未提交的消息完全不可用高——需人工介入在各 AZ 之间重新平衡节点分布;恢复故障节点或在健康 AZ 中新建节点
跨 AZ 延迟突增降级(提交变慢、误触发选举)低——调整超时参数为跨 AZ 部署调大选举/心跳超时;使用 placement group 以最小化延迟
区域级故障可能发生完全不可用极高——跨区域恢复启用 DR 区域的备用集群;从跨区域复制的备份(快照 + 日志)中恢复

节点分布是基础设施侧影响最大的单个杠杆。它是一个延迟与韧性之间的权衡,你必须有意识地做出选择。

  • 任意单个 AZ 故障 → 法定人数仍满足(2/3)。
  • 权衡:每次提交都要承担跨 AZ 延迟(leader 必须复制到至少一个其他 AZ)。

3 节点集群分布在 2 个 AZ(延迟优化)

Section titled “3 节点集群分布在 2 个 AZ(延迟优化)”
  • AZ-b 故障 → 法定人数仍满足(AZ-a 中有 2/3)。
  • AZ-a 故障 → 法定人数丢失(AZ-b 中只有 1/3)。
  • 权衡:延迟更低(leader + 一个 follower 同处一个 AZ),但故障容忍能力不对称。

这些故障不会出现在通用的分布式系统手册里。它们源自 Aeron 的组件模型:Media Driver、Consensus Module 和 Service Container 是相互独立的部件,可以各自独立地发生故障。

场景数据丢失风险可用性影响恢复复杂度修复方案
Media Driver 崩溃单节点宕机低——重启节点重启整个节点(Media Driver + Consensus Module + Service Container);排查根因(driver bug、资源问题)
Archive 录制失败(I/O 错误)降级至完全不可用(如果发生在 leader 上)中——将节点下线将节点下线;修复 I/O 问题(更换磁盘、修正权限);清空并重启以从其他节点重建
Consensus Module 与 Service Container 失同步无(但状态陈旧)降级(不再处理消息)中——需要健康监控为所有组件实现存活检查;若 service container 宕机则重启整个节点
Mark 文件损坏单节点无法启动低——清理 mark 文件从 clusterDir 和 aeronDir 删除陈旧的 mark 文件;重启节点。确保没有重复进程在运行
日志缓冲区溢出(termLength 过小)降级(反压)低——增大 termLength在 MediaDriver 和 ConsensusModule 配置中增大 termLength;通过协调的滚动重启来重启集群

Mark 文件是 Aeron 用来检测同一目录下是否已有另一个实例在运行的哨兵文件。损坏通常发生在以下情况:

  • 进程未经清理就被杀掉(kill -9)。
  • 两个进程意外共用了同一个 aeron 目录。
  • 文件系统损坏。

修复方法很简单:删除 mark 文件并重启。但务必先确认没有其他进程正在使用同一目录。

当消息比预期更大、或突发速率超过 term buffer 容量时,反压会层层传导,最终演变成可用性问题:

修复办法是增大 termLength,但要记住 term buffer 容量规划中的 L3 缓存约束:term buffer 应小于 L3 缓存大小的 1/3