AWS Enterprise Disaster Recovery Runbook

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。
本文缩写(英文全称与中文含义)
缩写 英文全称/名称 中文含义
ACM AWS Certificate Manager AWS 证书管理服务
ALB Application Load Balancer 应用负载均衡器
API Application Programming Interface 应用程序编程接口
ARC Amazon Application Recovery Controller AWS 应用恢复控制服务
ARN Amazon Resource Name AWS 资源名称,用于唯一标识资源
AWS Amazon Web Services 亚马逊云服务
AZ Availability Zone 可用区
CPU Central Processing Unit 中央处理器
CRD Custom Resource Definition Kubernetes 自定义资源定义
CRR Cross-Region Replication 跨区域复制
CSI Container Storage Interface 容器存储接口
DB Database 数据库
DLQ Dead-Letter Queue 死信队列
DNS Domain Name System 域名系统
EBS Elastic Block Store AWS 块存储服务
ECR Elastic Container Registry AWS 容器镜像仓库
ECS Elastic Container Service AWS 容器编排服务
EKS Elastic Kubernetes Service AWS 托管 Kubernetes 服务
ENI Elastic Network Interface AWS 弹性网络接口
FIFO First In, First Out 先进先出
GitOps GitOps 以 Git 保存期望状态、由自动化持续协调实际状态的运维方式
GSI Global Secondary Index DynamoDB 全局二级索引
HPA Horizontal Pod Autoscaler Pod 水平自动扩缩容器
IAM Identity and Access Management 身份与访问管理
ID Identifier 标识符
IP Internet Protocol 网际协议;IP 地址是网络寻址标识
IRSA IAM Roles for Service Accounts 通过 Kubernetes 服务账号关联 AWS IAM 角色
JWKS JSON Web Key Set JSON Web 密钥集,常用于验证令牌签名
KMS Key Management Service 密钥管理服务
MFA Multi-Factor Authentication 多因素认证
MREC Multi-Region Eventual Consistency DynamoDB 多区域最终一致性
MRSC Multi-Region Strong Consistency DynamoDB 多区域强一致性
NAT Network Address Translation 网络地址转换
OIDC OpenID Connect 基于 OAuth 2.0 的身份认证协议
PITR Point-In-Time Recovery 时间点恢复
PV Persistent Volume 持久卷
PVC Persistent Volume Claim 持久卷申领
RPO Recovery Point Objective 恢复点目标,可接受的数据丢失时间范围
RTC Replication Time Control S3 复制时间控制
RTO Recovery Time Objective 恢复时间目标,可接受的恢复耗时
S3 Simple Storage Service AWS 对象存储服务
SCP Service Control Policy AWS Organizations 服务控制策略
SDK Software Development Kit 软件开发工具包
SLA Service Level Agreement 服务等级协议
SMS Short Message Service 短信服务
SQS Simple Queue Service AWS 消息队列服务
SSM AWS Systems Manager AWS 系统管理服务;SSM 是沿用的简称
URL Uniform Resource Locator 统一资源定位符,通常指访问地址
UUID Universally Unique Identifier 通用唯一标识符
VPC Virtual Private Cloud 虚拟私有云网络
WAF Web Application Firewall Web 应用防火墙
YAML YAML Ain’t Markup Language 常用于配置文件的数据序列化语言

1. 场景与边界#

以企业订单与履约平台为例:客户登录、浏览商品、上传附件、下单付款,后台完成库存分配、发货、通知和报表。采用 双 Region Warm Standby、业务单写、跨账号隔离备份。

本文是参考架构和操作手册。Region、规模、时间预算是设计假设;部署前需要绑定实际资源清单、完成脚本实现和演练,不能把本文当作已验证的生产恢复能力。

项目 约定
A:主 Region ap-southeast-1,新加坡
B:灾备 Region ap-northeast-1,东京
工作负载账号 A/B 在同一生产账号,便于使用原生全局数据库和复制能力
安全与备份账号 日志归档、隔离备份、恢复权限与生产运维分离
恢复管理账号 保存 runbook、审计记录、执行恢复编排;不依赖 A 的流水线
正常状态 A 承担业务写入;B 完整部署、小规模运行,生产消费者和定时任务关闭
故障范围 A 区域中断、局部网络隔离、错误发布、数据污染、账号凭证失陷
恢复模式 区域故障提升 B;数据污染或账号失陷走隔离恢复,不直接提升已污染副本

服务、引擎版本、实例类型及备份复制能力必须在 A/B 实测。跨 Region 运行副本仍在生产账号,不能替代跨账号防破坏备份。

2. 业务目标与恢复口径#

业务能力 RTO 设计目标 RPO 设计目标 恢复完成条件
登录、浏览、下单 30 分钟 订单事实 ≤ 1 分钟 生产路径可完成订单事务,达到约定吞吐和错误率
付款与退款 30 分钟;对账异常时保持暂停 账务不接受静默丢失 支付平台流水与订单可核对;未知交易先查询再处理
商品、订单查询视图 30 分钟 复制目标 ≤ 1 分钟,可从交易事实重建 查询版本不倒退,不把缺失投影当作订单不存在
用户附件 30 分钟 目标 ≤ 15 分钟,逐对象确认 已验证的对象可下载;缺失对象有明确状态与补传流程
异步履约、通知 60 分钟 已恢复交易对应的任务可重放 无永久漏单,无重复付款/发货,积压持续下降
报表 24 小时 24 小时 从事实数据重新生成,无需阻塞交易恢复

这些数值是本方案的目标,不是 AWS SLA。附件和交易不能共享一个含糊的“RPO 1 分钟”。法规要求绝对不丢失的交易,需要另行设计并验证同步持久化及业务确认协议;异步 Aurora 跨 Region 复制不能承诺区域故障下零丢失。

记录四个时间:T0 首次业务中断、Tdeclare 宣布灾备、Tdata 数据可用、Tservice 用户旅程恢复。实际 RTO 为 Tservice - T0,不从宣布灾备后重新计时。

3. 应用架构#

客户与合作方

Route 53 与 ARC 流量控制

区域 ALB

区域 API Gateway

ECS 订单与账户服务

EKS 库存与履约 API

Lambda 回调接收

Aurora PostgreSQL 交易与 Outbox

DynamoDB 商品与订单视图

Valkey 缓存

S3 附件

Outbox Relay

EventBridge 业务事件

SQS 任务与 DLQ

ECS EKS Lambda 消费者

A/B 各有一套区域应用栈。图中展示单区业务路径,跨区数据路径如下:

A Aurora writer        -> B Aurora Global Database secondary
A DynamoDB replica     <-> B Global Tables replica(应用只允许活动区写)
A Valkey primary       -> B Global Datastore secondary
A S3 object versions   -> B S3 CRR destination
A EventBridge bus      -> B bus(global endpoint event replication)
A ECR / secrets        -> B 本地镜像与密钥副本
生产备份                -> 独立备份账号及目标 Region

A SQS backlog          -X-> B SQS(本方案不依赖队列透明复制)
Aurora outbox / ledger -> B 重建需要执行的任务

ECS 承载订单、账户和常规 worker;EKS 承载已有 Kubernetes 平台的库存与履约服务;Lambda 处理轻量回调、对象事件和通知。它们承担不同职责,不让同一笔业务同时走三套消费者。

4. 服务恢复矩阵#

服务 B 常态准备 故障时动作 关键限制
Route 53 / ARC 预建 A/B 记录、routing controls、健康检查与安全规则 数据与应用就绪后切换控制状态 DNS 切换不能撤销缓存、长连接或旧后台任务
ALB / WAF / ACM 本地 ALB、规则、WAF 和证书已部署 检查目标健康并开放入口 ALB 不跨 Region;证书和访问规则需逐区准备
API Gateway 相同 Regional API、自定义域、映射、授权器 指向 B 的区域域名 API 配置与 Lambda 集成不自动跨区复制
ECS task definition、容量策略、服务与镜像齐备 扩容 API,分批启用 worker 配额充足不代表故障时一定有算力
EKS 独立集群、节点、add-ons、CRD、GitOps 已运行 扩容并部署固定版本,恢复必要 PV etcd 状态、PV 和云资源依赖不是一份 YAML 就能恢复
Aurora PostgreSQL Global Database secondary,兼容版本与参数 非计划 failover;有序切换用 switchover 异步复制可能丢失最后事务
DynamoDB MREC Global Tables、本地索引和容量验证 应用改用 B endpoint,启动投影校验 不需要“提升主库”;跨区不是同一事务边界
Valkey 基于节点的 Global Datastore secondary 提升 B 或从空缓存重建 跨 Region 提升需要编排;缓存不保存唯一业务事实
S3 CRR、Versioning、KMS 和历史对象回填 应用使用 B bucket,核对对象版本 对象复制不代表 bucket 配置、通知规则同步
SQS / DLQ B 队列、策略、告警、消费者配置已建 从事实与 Outbox 补发任务 旧队列消息、在途状态与 receipt handle 不迁移
Lambda 版本、alias、Layer、并发、VPC 与本地触发器齐备 检查配置后启用触发器 事件源状态需要单独控制
EventBridge 两区 bus、rules、targets、DLQ、archive 已建 切生产入口,按恢复水位重放 global endpoint 不复制整套规则或 Scheduler 配置
ECR / Secrets / KMS 镜像 digest、区域密钥与配置可用 校验后供应用加载 复制成功不代表本地区域权限正确
CloudWatch / CloudTrail B 与独立监控位置有告警和审计 观测恢复旅程并记录决策 A 的监控消失不能被解释为健康

Global Tables 使用 MREC,并通过应用保持单写。MRSC 有区域集合和部署条件限制,不应直接套用到任意两个 Region。DynamoDB 设计说明

5. 灾前建设#

5.1 网络、账号与访问#

  • A/B 各建 VPC,应用跨可用的多个 AZ;数据库、缓存和容器位于私有子网。
  • 准备 NAT 或 VPC endpoints、DNS、网络策略、回调入口和合作方 IP 白名单;避免 B 出网依赖 A。
  • 预建恢复角色和 break-glass 访问,演练从独立运维终端取得凭证。SCP 不得阻止已批准的 B 区恢复操作。
  • 生产账号不能删除备份账号的恢复点;备份 KMS 权限与密钥保留时间覆盖备份保留期。
  • Terraform state、锁、Git、制品和恢复文档有独立可用路径;事故时先冻结常规 apply,避免自动化把切换结果改回去。

恢复清单至少记录:账号 ID、Region、集群 ARN、数据库全局标识、bucket、queue URL、EventBridge endpoint ID、Lambda mapping UUID、域名、ACM ARN、KMS ARN、恢复角色、负责人和最近一次验证时间。

5.2 数据与备份#

数据 常态保护 独立恢复路径
Aurora 跨区复制、自动备份、恢复水位监控 合规的跨账号/跨区恢复点,隔离恢复到新集群
DynamoDB Global Tables、各副本 PITR 策略验证 恢复为新表,重建配置和业务引用
S3 CRR、Versioning、必要时 RTC 隔离副本或备份、Object Lock、恢复历史版本
Valkey 跨区复制;如需持久缓存则留快照 清空重建,或先恢复快照再接受缓存未命中
EKS PV 支持的卷备份和跨区副本 在隔离集群恢复并校验应用一致性

每次发布都在 B 验证 schema、镜像和配置兼容性。ECR 复制规则启用前的既有镜像需单独补齐;恢复指定 digest,避免依赖可变的 latest。ECR 复制

Secrets Manager 复制凭据,但区域数据库地址等配置应独立管理,避免 B 副本仍连接 A。验证 B 的 KMS 解密与应用角色授权,不把私钥或数据库密码写进运行记录。Secrets 跨区复制

AWS Backup 对不同服务、Region 的复制、PITR 和恢复测试支持不同;不能默认一种备份计划覆盖全部服务。连续备份复制后可能成为快照恢复点,不能假定仍有相同 PITR 能力。功能矩阵

5.3 容量与版本#

示例负载基线:正常 500 请求/秒,关键交易峰值 1,500 请求/秒。B 常态保留经测试可服务小流量的实例,目标在切流前承载关键峰值;暂停报表和批处理,为交易预留容量。

项目 必须验证
ECS / EKS CPU、内存、节点启动耗时、ENI、子网 IP、镜像拉取、HPA / capacity provider
Aurora B 实例规格、连接上限、数据库连接池、参数组、扩展、迁移版本
DynamoDB on-demand 或预置容量、热点分区、GSI、本地限流
Lambda / API Gateway 区域并发、关键函数保留并发、节流和 timeout
ALB / 网络 目标注册、健康检查、证书、出网、下游白名单

容量预留是否适用于所选计算方式需单独核对;提升配额不能代替真实的满载演练。若 30 分钟内扩容达不到关键吞吐,就增加 B 常驻容量或调整 RTO。

5.4 身份和外部依赖#

本文假设企业已有多区域可用的 OIDC 身份平台。B 预置 issuer、audience、回调 URL、JWKS 获取路径与密钥缓存,验证新登录、刷新 token 和注销。

若实际使用 Cognito,必须单独设计用户池、密码、MFA、会话和故障期登录策略;本方案不假定区域用户池透明跨区恢复。

支付平台、仓储系统、邮件/SMS、第三方风控都要认可 B 的出口和 webhook 地址。A 区域已签发的预签名 S3 URL 可能失效,B 应重新签发本地 bucket URL。

6. 一致性与消息恢复设计#

6.1 明确数据权威来源#

  • Aurora 的订单、库存预留、付款状态、Outbox 和消费者处理账本是交易事实。
  • DynamoDB 是商品及订单查询投影;跨区出现比 Aurora 更新的投影时,不能据此执行付款或发货。
  • Valkey 仅保存可丢弃缓存;不保存唯一库存、长期会话、支付幂等记录或跨区锁。
  • S3 保存附件内容;数据库记录对象 key、version ID、内容摘要和复制确认状态。
  • 支付平台的真实交易流水用于核对外部扣款事实,不能因本地记录缺失就再次扣款。

6.2 Transactional Outbox#

订单和 Outbox 在同一个 Aurora 事务内提交:

BEGIN
  写订单 / 更新业务版本
  写 outbox(event_id, aggregate_id, aggregate_version, event_type, payload)
COMMIT

relay -> EventBridge -> SQS -> consumer
consumer -> 业务更新 + processed_events 唯一键(同一数据库事务)

Relay 遇到 PutEvents 部分失败需逐条重试;“成功发送”不等于业务执行完成。切换后从恢复检查点前的重叠窗口重新发布,覆盖已经发送但未完成消费的事件,而不是只查 published = false。

示例保留 Outbox 14 天、处理账本 30 天;保留窗口必须大于最大故障时间、队列保留时间和人工补偿周期。不能提前清理仍未确认的业务事件。

消费者以稳定 event_id 去重,以聚合版本控制乱序;更新事实与记录完成状态在同一事务内。外部付款/退款/发货使用下游幂等键和查询接口,解决“下游成功、本地未提交”的不确定结果。

支付 webhook 只有在事件及其稳定幂等键写入权威存储后才确认接收;故障期依赖合作方重试和主动流水查询。只将回调放入 A 的队列就返回成功,会留下本方案无法从 B 重建的缺口。

6.3 SQS、Lambda 与 EventBridge#

本方案的 B 队列是独立队列,恢复时从已恢复的 Outbox 和业务账本重建任务,不对旧队列进行破坏性读取搬运。SQS 消费需容忍重复交付,不能依靠短期 FIFO 去重窗口获得跨区恰好一次处理。SQS 故障恢复

Lambda 的 SQS event source mapping 使用同 Region 队列;B 的映射单独部署并保持 disabled,直到单写权和数据就绪。Lambda SQS 配置

启用 EventBridge global endpoint 的事件复制,并确保生产者实际使用该 endpoint ID。双区规则可把事件写入各自队列,但 B 消费者保持关闭;禁止备用规则直接触发支付等副作用。复制副本、客户端重试和重放都必须沿用同一业务 event_id。

EventBridge 的区域切换时间不等于订单平台 RTO;事件复制也不保证本例 1 分钟交易 RPO,所以恢复权威仍是数据库中的 Outbox。global endpoint 的 SDK、健康检查和复制配置要按官方要求验证。Global endpoints

两区分别建立 archive。Archive replay 只能回到原接收事件的 bus,不应计划从故障区不可访问的 archive 直接恢复到 B;恢复优先使用 B 已有事件和 Outbox。归档与重放

B 队列可能包含已复制到 EventBridge、但对应 Aurora 事务尚未复制到 B 的事件。消费者必须先核对订单事实与版本;缺少事实的事件进入隔离待对账,不能仅凭消息内容执行扣款或发货。

EventBridge Scheduler、EKS CronJob、ECS scheduled task 和数据库定时作业均需列入生产者清单。B 配置预建但默认关闭,切换后对遗漏时间段补跑,使用稳定任务 ID 去重。

6.4 跨数据源恢复水位#

定义应用检查点 checkpoint_id,记录 Aurora 已提交业务序号、DynamoDB 投影版本、关键 S3 对象复制状态、Outbox 范围和消费者完成位置。跨服务没有统一事务快照,检查点由应用验证生成,不能仅比较 wall clock。

恢复时选择可验证的共同业务边界;边界后的订单、投影和对象进入对账或隔离列表。对有序业务按聚合序号补齐,不能把日志中最大的时间戳视为所有业务都已恢复。

S3 RTC 的 15 分钟承诺针对规定比例的新对象,不代表每个对象绝不会超时;历史对象需要另外回填。关键附件若必须与订单一起恢复,应在确认 B 对象可读且摘要匹配后再把业务状态标记为“跨区保护完成”。S3 复制

7. 防止双写:切流前置条件#

DNS、ARC、停止容器都不能单独证明旧区域已停止写入。 A 可能仍可被旧 DNS 缓存访问,后台 worker 也可能继续运行。

本方案要求实现独立的写入权控制:恢复管理面维护 active_region、单调递增的 epoch 和短期租约。权威状态使用强一致存储和条件更新;不能使用最终一致的 Global Tables 各副本独立抢锁。

可采用独立管理账号、第三 Region 的单区 DynamoDB 表作为租约权威,由受控服务串行签发租约。该方案引入明确的可用性取舍:权威服务不可用时,租约到期后业务停止写入,不能两区各自续租。若采用多区域仲裁系统,需要另行验证其一致性和区域支持。

必须实现并验证:

  1. 所有入口、worker、定时任务和人工写入工具都受控;绕过网关的 DB 账号不能留下长期写权限。
  2. 请求携带 epoch;数据库写入适配层和副作用执行层校验租约,过期拒绝操作。单次启动时检查配置不够。
  3. 为事务和外部调用规定最大执行时间,控制时钟偏差;切换要等待旧租约以及旧操作的最大剩余时间结束。
  4. 支付等外部系统未必识别 epoch,必须另外依赖全局稳定幂等键和流水查询。
  5. 隔离 A 可达路径时,同时停止生产者、消费者和调度器;网络或权限收紧作为附加保护。

无法证明写入隔离时,保持 B 只读或暂停交易。 业务风险批准不能把尚未实现的防双写能力变成安全保证。上述租约不是 AWS 自动附带的特性,应作为应用工程交付和演练的必要验收项。

8. 事故指挥与切换门禁#

角色 职责
Incident Commander 宣布事故、选择恢复路径、批准开写与切流
数据负责人 恢复水位、提升数据库、处理丢失范围与对账
平台负责人 网络、ECS/EKS、Lambda、容量、流量控制
应用负责人 单写隔离、幂等、业务验收、消息补偿
安全负责人 判断数据污染/凭证失陷,批准隔离恢复访问
记录与沟通负责人 时间线、客户影响、状态通知、审计证据

建议触发条件:外部业务探针连续失败超过约定窗口,同时存在独立网络或服务信号;预计原地恢复将超过剩余 RTO 预算。一次 ALB 5xx 或单个 AZ 故障不直接触发跨区提升。

Gate 通过条件 未通过时
G0:确认故障类型 区域故障且 B 数据可信 数据污染转隔离恢复
G1:旧主隔离 旧写入权失效,旧操作已排空或被可靠阻止 B 不开写
G2:数据就绪 B 主库、恢复水位、缓存策略、对象状态已确认 保持维护或只读,记录数据缺口
G3:应用就绪 容量、身份、支付依赖与内部旅程通过 不切公众流量
G4:切流完成 外部探针成功,用户路径与消息积压正常 按恢复状态决策,不自动反向切流

复制指标过期或源区不可达时,只能报告“当前可验证的恢复边界与未知区间”,不能依据最后一个低延迟采样宣称 RPO 已达标。

9. A 故障后的完整执行过程#

阶段一:发现与冻结(目标 T+0~5 分钟)#

  1. 从独立探针确认登录、查询和下单是否故障,记录 T0;排查单 AZ、发布错误、第三方支付故障。
  2. 指定 Incident Commander,创建事件记录,冻结部署、schema migration、Terraform apply 和数据清理任务。
  3. 保存 A/B 最近的复制水位、错误率、队列积压和发布版本。不要记录明文密钥。
  4. 确认 B 无数据污染;若是误删、攻击或错误数据扩散,跳转到第 12 节。

阶段二:隔离与恢复授权(目标 T+5~10 分钟)#

  1. 宣布启用灾备;进入维护/只读模式,保留客户端稳定的幂等请求 ID。
  2. 停止给 A 签发写租约,等待租约与在途操作的安全窗口结束。A 可访问时停 worker、调度器、Lambda 映射和 Relay。
  3. 记录 G1 证据,再将新 epoch 的活动区设为 B;B 的生产写入开关此时仍关闭。
  4. 数据负责人提交预期缺失窗口;超出既定目标时记录业务决策与补偿路径,不能隐去 RPO 超标。

阶段三:恢复数据与容量(目标 T+10~20 分钟)#

以下工作可并行准备,但必须在数据角色确认后才启动有副作用的业务。

顺序 操作 验收证据
1 对 Aurora Global Database 执行托管非计划 failover 到 B B 为 writer,本地连接事务可提交,恢复水位记录完整
2 应用数据库连接切至 B,重建连接池,校验 secret、schema、扩展 请求未跨区连回 A,数据库迁移版本与应用兼容
3 DynamoDB SDK 使用 B,本地容量与索引检查 关键 item 和聚合版本正确;异常投影进入重建
4 提升 Valkey B 或切换到空的本地缓存 不依赖旧锁;限流预热不会压垮 Aurora
5 使用 B S3,检查关键对象版本/摘要 缺失附件进入 pending,不伪造文件已恢复
6 扩容 ECS/EKS,检查镜像、节点、网络和依赖 关键峰值容量达标,API target healthy

Aurora 计划 switchover 和故障 failover 不能混用;后者可能丢失未复制事务。托管切换的引擎版本兼容性应在灾前验证。rds.global_db_rpo 可用于受支持 Aurora PostgreSQL 的 RPO 控制,但可能阻塞主库提交,需提前压测配置。Aurora 切换与 RPO

Valkey Global Datastore 的跨区提升需显式操作,应用重新加载目标 endpoint;不要误认为区域内 Multi-AZ 自动 failover 会自动完成跨区切换。Global Datastore

阶段四:内部业务验证(目标 T+20~25 分钟)#

  1. 使用 B 专用验证域名,从真实 ingress 访问 ALB 和 API Gateway;只给测试租户写入权限。
  2. 完成登录、创建测试订单、库存预留、上传/下载附件、查询投影和退款模拟。支付测试使用沙箱或经过批准的可撤销测试交易。
  3. 检查 Aurora 的事实与 DynamoDB 投影,确认缓存未命中可回源。
  4. 启用小批量 B 消费者,限制并发,回放检查点前的重叠窗口。先核对订单,再处理有外部副作用的付款/履约任务。
  5. 验证同一事件重复投递、乱序事件、失败重试和 DLQ 路径;确认重复请求不重复扣款或发货。
  6. 验证 G2/G3,通过后开放 B 的正式写入开关。

阶段五:公众切流(目标 T+25~30 分钟)#

  1. 通过预建 ARC routing controls 切换 A/B 状态;使用预配置的数据面端点和安全规则,避免事故时临时创建恢复控制资源。
  2. app.example.com 切至 B ALB;api.example.com 切至 B Regional API Gateway 自定义域。分别验证两条入口,不能只测首页。
  3. API Gateway 的 stage、authorizer、usage plan、WAF、区域证书与 Lambda alias 必须提前一致。Route 53 不会代替这些配置的部署。
  4. 观察 DNS 缓存与长连接,应用引导重连;旧 A 请求保持拒绝写入,不依赖 DNS 收敛作为隔离证据。
  5. 若实际部署只有 failover 路由,本次直接切换活动目标;若需要百分比灰度,应预建并演练 weighted 路由,不能事故时临时混改路由模型。
  6. 从多个网络位置持续验证业务旅程和容量,记录 Tservice。剩余报表积压不影响已约定的核心 RTO,但要独立记录恢复时间。

ARC 控制路由,不负责数据库写入权;Route 53 健康状态异常时也不应被当作 fail-closed 的写入保护。ARC routing control

双区域 Regional API 的域名与切换方式参考 API Gateway 多 Region failover。

阶段六:稳定运行与补偿(T+30 分钟以后)#

  • 逐步提高 worker 并发,观察最老任务年龄、DLQ、数据库连接和下游节流,避免恢复流量再次压垮系统。
  • 从 Outbox / 业务账本识别缺失任务,重放时保留原 event_id;不得为了消除告警直接清空 DLQ。
  • 对账支付成功但订单缺失、订单存在但附件缺失、库存预留无后续状态等异常。
  • 客户报告已成功但 B 无记录的请求,使用请求 ID、外部流水和审计证据恢复,不能凭日志批量伪造已提交交易。
  • A 恢复可达后先保留只读证据,检查是否存在 B 未收到的尾部数据,再决定补偿;禁止直接把旧库接回生产写入。
  • 确认 B 作为新主已有备份、监控和再次故障时的恢复路径,再宣布事故进入稳定阶段。

10. EKS 与状态型组件恢复#

本例尽量把交易状态放在托管数据服务中。EKS 的 Deployment、Service、Ingress、CRD、配置和策略由 GitOps 恢复;集群身份、IAM、Pod Identity / IRSA、CSI、Load Balancer Controller、DNS 和网络策略必须适配 B。

存在 PV 时,为每个 workload 记录备份一致性方式、PVC / PV 映射、StorageClass、AZ 和 KMS。EBS 卷不能原样跨 Region 挂载,应从可用的目标区恢复点创建卷;在隔离命名空间验证后再接入生产。

AWS Backup 支持 EKS 集群状态与持久卷的组合恢复点,但复制与恢复能力需按资源类型和 Region 核对。不要把“备份成功”当作应用事务一致性验证。EKS 备份、EKS 恢复

B 温备集群已经运行时,不盲目用整集群恢复覆盖现有环境;优先恢复缺失对象或在新集群验证,再通过预先验证的迁移步骤接入。恢复工具若会重建 ALB、IAM 或 DNS,必须审查变更边界。

11. 切换失败时怎么处理#

当前状态 处理方式
B 尚未成为数据主,尚无业务写入 暂停切换;确认 A 可信且重新取得独占写入权后才恢复 A
B 已提升为数据库主,但尚无业务写入 保持单一权威,按数据库支持流程决定继续或计划切回,不只改 DNS
B 已接受生产写入 B 是新的事实来源;修复 B 或按正式回切流程同步数据
B 应用异常、数据正常 回退到 B 已验证的旧应用版本,数据库 schema 必须兼容
B 数据不可信 暂停写入,进入隔离恢复,重新选择可信恢复点

禁止在健康检查反复变化时让数据库、生产者和公众 DNS 来回自动切换。应用版本回滚、流量回切和数据回切是三个不同操作。

12. 数据污染或账号失陷:隔离恢复路径#

在线复制可能已经复制误删或恶意修改。此时以最近可信恢复点为基础恢复到新资源,RTO/RPO 单独计算,不能承诺沿用 30 分钟区域切换目标。

  1. 安全负责人确认隔离范围,停止受污染生产者和凭据,保存 CloudTrail、审计日志和恢复点证据。
  2. 从独立备份账号选择污染发生前的可信恢复点,验证其 KMS 可用;在干净恢复账号/VPC 建立受控环境。
  3. 按服务能力分别恢复 Aurora 新集群、DynamoDB 新表、S3 历史对象与必要 PV。不要覆盖原证据资源。
  4. 使用同一业务检查点做跨数据源对账;若时间点不同,先恢复事实,再重建投影和缓存。
  5. 重建镜像与部署定义的可信版本,轮换密钥、凭据、签名材料,验证 IAM 和供应链没有残留入口。
  6. 按第 9 节的内部旅程和单写门禁切流;清理污染数据前获得证据保留确认。

备份保留策略可采用日备份 35 天、月备份 12 个月作为讨论起点,最终按数据分类和合规要求确定。Vault Lock compliance 模式冷静期结束后的不可变约束需在启用前审查,不能把它当作随时可撤销的开关。Vault Lock

13. B 回切 A 的完整流程#

回切是一次计划变更,不因 A 恢复健康就自动执行。

  1. 确认条件:A 根因已修复,B 稳定运行;双方容量、版本、配置、权限和外部依赖复验通过。
  2. 恢复反向保护:按 Aurora 当前拓扑重新加入或重建 A 为 B 的副本;不能假定旧 A 已自动具备最新数据。Valkey 同样检查真实主从关系。
  3. 处理双向数据:DynamoDB 等待副本收敛并对账;S3 在 B 开始生产写入前就应具备或补建 B→A 复制,使用独立前缀/规则和副本策略验证,补齐故障期对象。
  4. 重建消息路径:检查 A 的规则、队列、DLQ 与 archive;旧积压按业务账本去重,不能无条件重新放开旧消费者。
  5. 建立回切检查点:暂停新写入、Relay、消费者和调度,等待在途事务和外部操作结束;记录最后业务序号和对象集合。
  6. 同步确认:确认 A 已覆盖检查点,核对订单、库存、付款和对象;源数据仍落后则延后回切。
  7. 计划提升:Aurora 执行支持的 managed switchover;缓存按计划切换或重建,更新区域配置与连接池。
  8. 交接写入权:结束 B 租约及旧操作,生成新 epoch 授予 A;内部旅程通过后开放 A 写入,再切公众入口。
  9. 恢复异步任务:从检查点重叠重放,逐步恢复 worker 与定时任务;确认只有 A 执行生产副作用。
  10. 重新建立温备:B 降为灾备但不立即销毁。验证 A→B 数据保护、备份和告警后再缩容。

B 已产生新写入后,直接把 DNS 指回旧 A 会造成数据丢失或分叉。回切失败时同样依据“当前哪个区域已接受新写入”决定恢复方向。

14. 演练与验收#

演练节奏#

频率建议 演练内容
每次发布 B 镜像、schema、配置、身份与小流量业务旅程
每月 隔离环境恢复备份、随机对象摘要校验、消息重放与幂等验证
每季度 区域切换和回切、容量扩展、网络分区与租约失效
重大架构变化后 全流程演练;重新测量 RTO/RPO

故障注入覆盖:A 入口不可达但 worker 仍运行、跨区复制延迟、B 容量不足、KMS 拒绝、Secret 仍指向 A、支付成功后消费者崩溃、S3 附件未复制、DynamoDB 投影领先于恢复订单、旧 DNS 长连接持续访问、身份提供方故障。

实施记录使用 变更执行边界;计划切换的具体命令与分阶段中止方式见 Aurora 切换实操。无计划故障继续遵循本篇单写门禁,不因源区失联而绕过。

必须保存的验收证据#

指标 验证方法
实际 RTO 外部探针失败起点至关键旅程、吞吐、错误率达到约定标准
实际 RPO 故障前确认成功的业务请求清单与恢复后的事实逐条比对;列明无法确认部分
单写 A 旧 epoch 的写请求、消费者与定时任务被拒绝
幂等 同一付款/发货事件重复和乱序投递后,外部副作用仍只有一次
数据一致性 订单、库存、支付、投影、附件版本与摘要核对
异步恢复 最老消息年龄下降,DLQ 可解释,所有应执行任务可追踪
回切 A 获得 B 故障期新增数据,旧 B 写入权失效
可再次恢复 当前主区的复制、备份与恢复角色重新有效

每次演练报告包含:版本/拓扑、场景、负责人、完整时间线、门禁证据、丢失数据明细、人工步骤、失败项、整改责任人与期限。未通过的问题必须进入发布和灾备准入条件。

15. 恢复编排与日常维护#

用 Step Functions 或 SSM Automation 承载可重入步骤,执行环境放在不依赖 A 的恢复管理面。每一步记录执行 ID、目标 ARN、前置状态、结果与重试策略;不可逆步骤如提升数据库、开放写入和切流需要事故角色确认。

Detect -> Classify -> Freeze -> Fence A -> Approve recovery boundary
       -> Promote data + Scale B -> Validate internally
       -> Enable B writes -> Route traffic -> Reconcile -> Reprotect

编排必须支持从已完成步骤继续,重试前先查询真实状态。A 控制面不可用时不要无限等待停机 API 成功,应依赖已验证的租约隔离;如果没有这种隔离能力,则停在 G1。

日常监控至少包括:Aurora 恢复水位、DynamoDB 复制延迟、S3 未复制对象、ECR 发布 digest、备份复制失败、B 登录和下单探针、队列最老消息、DLQ、消费者进度、租约续期失败、KMS/Secrets 拒绝和 B 的容量余量。

成本按双区常驻数据库/缓存、EKS 集群与节点、容器容量、跨区传输、对象副本、备份保留、ARC、日志和演练计算。本方案通过缩减备用计算和暂停非关键业务控制成本,不通过取消恢复验证降低成本。

可执行配套#

Aurora Global 计划切换实操 提供角色隔离、状态比较交换、实际对账查询和切换脚本;前置拓扑与不支持的故障场景均明确列出。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭