跳转到内容

备份与灾难恢复

灾难恢复是一个谱系,而非单一的方案。影响范围决定了应对手段:丢失一个 follower,集群会自动消化、毫不受影响;丢失全部节点,则需要从外部备份冷启动。本页将每种故障模式映射到对应的补救措施,再对比两种备份策略——OSS Cluster Backup 与 Premium Cluster Standby——以便你根据自己的 RTO 和 RPO 选择合适的方案。

关于 recording、snapshot 和 recording log 在底层的实际工作原理,请参阅 The Aeron Files。本页聚焦于运维恢复。

灾难恢复场景,按严重程度排序

Section titled “灾难恢复场景,按严重程度排序”

四种场景覆盖了现实中的故障空间,按严重程度排列:

场景严重程度
Follower 节点丢失低——集群继续运行,自动恢复
Leader 节点丢失中——短暂选举,自动恢复
最新快照丢失中——回退到更早的快照 + 更长的回放
全部节点丢失(仅数据库存活)严重——需要完整重建

根据严重程度匹配补救手段。越往下,你越需要依赖工具和外部备份,而不是 Aeron 的内建机制。

  1. Follower 丢失 → 重启该节点。它会通过 snapshot + log 回放自动从 leader 追平。
  2. Leader 丢失 → 自动选举产生新的 leader。旧 leader 以 follower 身份重启并追平。
  3. 快照丢失 → 使用 ClusterTool 检查 recording log,使损坏的快照失效,并回退到更早的快照,配合更长的 log 回放。
  4. 全部节点丢失 → 从外部备份冷启动(来自 Archive 或 Cluster Backup/Standby 的 snapshot + log recording)。

Cluster Backup (OSS) 对比 Cluster Standby (Premium)

Section titled “Cluster Backup (OSS) 对比 Cluster Standby (Premium)”

针对关键的「全部节点丢失」场景,你需要用外部备份来保护自己。有两个选择。最终的取舍可归结为一个词:热(warm)还是冷(cold)

特性Cluster Backup (OSS)Cluster Standby (Premium)
可用性开源(Apache 2.0)Premium(商业)
用途将 log 复制到远端位置以用于 DR用实时 standby 节点扩展部署
节点状态被动——不处理消息主动——实时处理每一条消息
恢复速度较慢——取决于快照新旧程度 + log 回放时长较快——近乎即时切换,无需回放
故障切换时的数据丢失较高——取决于最后一次备份同步点极小——仅丢失传输中的未提交消息
恢复机制通过 log 回放重建集群状态翻转一个标志,将 standby 切换为 active
带宽灵活性不可配置可配置——单节点或全节点路由
对 Leader 的背压若将远端节点加入集群,可能造成背压对 leader 无背压
使用场景在恢复时间可接受的前提下,防范整个 DC 丢失以最小停机和数据丢失实现快速故障切换

根据你的恢复目标和预算来选择:

需要快速故障切换(<60s)+ 最小数据丢失? → Cluster Standby (Premium)
需要基础 DR 且恢复时间可接受? → Cluster Backup (OSS)
预算受限但仍需要一定的 DR? → Cluster Backup (OSS)
跨区域运行且 RPO/RTO 要求严格? → Cluster Standby (Premium)

进一步深入,热与冷的区别体现在 license、复制、恢复和运维四个方面。ClusterStandby 随 premium jar 一同发布;ClusterBackup / ClusterBackupMediaDriver 则是 OSS。

Cluster Standby (Premium)ClusterBackup (OSS)
LicenseAeron Premium(商业)OSS(Apache 2.0)
APIClusterStandby(premium jar)ClusterBackup / ClusterBackupMediaDriver
Standby 类型——主动处理每一条消息——复制 recording,在恢复时回放
Cluster StandbyClusterBackup
复制 snapshot recording是(作为消息处理的一部分)是(自动)
复制 log recording是(作为消息处理的一部分)是(自动)
在 standby 上运行 ClusteredService——处理每一条消息——仅 archive 级别的复制
Standby 状态与主集群一致——近乎实时——状态仅在 archive 中,不在内存中
持续同步(实时 log tailing)是——保持在 BACKING_UP 状态
感知 Leader是——跟随 leader 变更是——查询集群共识

延迟的故事就在这里。Cluster Standby 的 RTO 近乎为零,因为状态已经在内存中——无需加载 snapshot,也无需回放 log。ClusterBackup 则要付出数分钟的代价,因为它必须复制数据并启动一个全新的集群。

Cluster StandbyClusterBackup
RTO近乎为零——「设置一个标志」即可激活数分钟——复制数据 + 启动集群
故障切换机制运维人员设置标志 → standby 变为 active复制 recording.log + archive → 启动新集群
状态重建已在内存中——无需回放集群加载 snapshot + 回放 log
数据丢失窗口仅传输中的未提交消息直到最后一次备份同步点
对 Leader 的背压极小
Cluster StandbyClusterBackup
是否需要自定义代码否(仅需配置)极少——ClusterBackupMediaDriver.launch()
Snapshot + log 回放不需要——状态已实时存活恢复时自动进行