name: 灾难恢复规划 description: 通过RTO/RPO规划、数据库备份、Kubernetes灾难恢复、跨区域复制和混沌工程测试,设计和实施灾难恢复策略。在实施备份系统、配置时间点恢复、设置多区域故障转移或验证灾难恢复程序时使用。
灾难恢复
目的
提供全面的灾难恢复策略指导,实施备份系统,并验证数据库、Kubernetes集群和云基础设施的恢复程序。使团队能够定义RTO/RPO目标、选择合适的备份工具、配置自动故障转移,并通过混沌工程测试灾难恢复能力。
何时使用此技能
在以下情况调用此技能:
- 定义恢复时间目标(RTO)和恢复点目标(RPO)
- 实施具有时间点恢复(PITR)的数据库备份
- 设置Kubernetes集群备份和恢复工作流
- 配置跨区域复制以实现高可用性
- 通过混沌实验测试灾难恢复程序
- 满足合规要求(GDPR、SOC 2、HIPAA)
- 自动化备份监控和警报
- 设计多云灾难恢复架构
核心概念
RTO和RPO基础
恢复时间目标(RTO): 灾难发生后,业务影响变得不可接受之前可接受的最大停机时间。
恢复点目标(RPO): 以时间衡量的可接受最大数据丢失。定义恢复必须达到的时间点。
关键性层级:
- 层级0(关键任务): RTO < 1小时,RPO < 5分钟
- 层级1(生产): RTO 1-4小时,RPO 15-60分钟
- 层级2(重要): RTO 4-24小时,RPO 1-6小时
- 层级3(标准): RTO > 24小时,RPO > 6小时
3-2-1备份规则
在2种不同介质类型上维护3份数据副本,其中1份副本异地。
示例实施:
- 主要:生产数据库
- 次要:本地备份存储
- 第三份:云备份(S3/GCS/Azure)
备份类型
全备份: 所有数据的完整副本。创建最慢,恢复最快。
增量备份: 仅上次备份后的更改。创建最快,恢复需要全备份和所有增量备份。
差异备份: 上次全备份后的更改。在存储和恢复速度之间平衡。
持续备份: 通过WAL/binlog归档的实时或近实时备份。RPO最低。
快速决策框架
步骤1:将RTO/RPO映射到策略
RTO < 1小时,RPO < 5分钟
→ 主动-主动复制,持续归档,自动故障转移
→ 工具:Aurora Global DB,GCS多区域,pgBackRest PITR
→ 成本:最高
RTO 1-4小时,RPO 15-60分钟
→ 热备用,增量备份,自动故障转移
→ 工具:pgBackRest,WAL-G,RDS多可用区
→ 成本:高
RTO 4-24小时,RPO 1-6小时
→ 每日全备份+增量备份,跨区域备份
→ 工具:pgBackRest,Velero,Restic
→ 成本:中等
RTO > 24小时,RPO > 6小时
→ 每周全备份+每日增量备份,单区域
→ 工具:pg_dump,mysqldump,S3版本控制
→ 成本:低
步骤2:按用例选择备份工具
| 用例 | 主要工具 | 替代工具 | 关键特性 |
|---|---|---|---|
| PostgreSQL生产 | pgBackRest | WAL-G | PITR,压缩,多仓库 |
| MySQL生产 | Percona XtraBackup | WAL-G | 热备份,增量 |
| MongoDB | Atlas备份 | mongodump | 持续备份,PITR |
| Kubernetes集群 | Velero | ArgoCD + Git | PV快照,调度 |
| 文件/对象备份 | Restic | Duplicity | 加密,去重 |
| 跨区域复制 | Aurora Global DB | RDS只读副本 | 支持主动-主动 |
数据库备份模式
PostgreSQL使用pgBackRest
用例: 生产PostgreSQL,RPO < 5分钟
快速开始: 参见examples/postgresql/pgbackrest-config/
配置持续WAL归档,将全/差异/增量备份到S3/GCS/Azure。安排每周全备份,每日差异备份。启用PITR使用pgbackrest --stanza=main --delta restore。
详细指南: references/database-backups.md#postgresql
MySQL使用Percona XtraBackup
用例: MySQL生产需要热备份
快速开始: 参见examples/mysql/xtrabackup/
执行全备份(xtrabackup --backup --parallel=4)和增量备份,带有二进制日志归档用于PITR。恢复需要解压、准备、应用增量和复制回步骤。
详细指南: references/database-backups.md#mysql
MongoDB备份
快速开始: 使用mongodump --gzip --numParallelCollections=4进行逻辑备份,或使用MongoDB Atlas进行具有PITR的持续备份。
详细指南: references/database-backups.md#mongodb
Kubernetes灾难恢复
Velero用于集群备份
快速开始: velero install --provider aws --bucket my-backups
配置计划备份(每日全备份,每小时生产命名空间)带有PV快照。恢复使用velero restore create --from-backup <name>。支持选择性恢复(命名空间映射,存储类重映射)。
示例: examples/kubernetes/velero/
详细指南: references/kubernetes-dr.md
etcd备份
快速开始: ETCDCTL_API=3 etcdctl snapshot save /backups/etcd/snapshot.db
创建定期etcd快照用于控制平面恢复。恢复需要重新创建集群并加载快照数据。
示例: examples/kubernetes/etcd/
云特定灾难恢复模式
AWS
关键服务:
- RDS:自动备份(30天保留),PITR,多可用区
- Aurora Global DB:跨区域主动-被动,自动故障转移
- S3 CRR:跨区域复制,15分钟SLA(复制时间控制)
示例: examples/cloud/aws/
详细指南: references/cloud-dr-patterns.md#aws
GCP
关键服务:
- Cloud SQL:PITR带有7天事务日志,30天保留
- GCS多区域:自动跨100+英里分离复制
- 区域高可用性:区域内同步复制
详细指南: references/cloud-dr-patterns.md#gcp
Azure
关键服务:
- Azure备份:虚拟机备份,灵活保留(每日/每周/每月/每年)
- Azure站点恢复:跨区域虚拟机复制,4小时应用一致快照
- 地理冗余存储:自动复制到次要区域
详细指南: references/cloud-dr-patterns.md#azure
跨区域复制模式
| 模式 | RTO | RPO | 成本 | 用例 |
|---|---|---|---|---|
| 主动-主动 | < 1分钟 | < 1分钟 | 高 | 两个区域都服务流量 |
| 主动-被动 | 15-60分钟 | 5-15分钟 | 中等 | 备用用于故障转移 |
| 试点灯 | 10-30分钟 | 5-15分钟 | 低 | 最小次要基础设施 |
| 热备用 | 5-15分钟 | 5-15分钟 | 中高 | 缩放的次要 |
实施示例:
- PostgreSQL流复制(主动-被动)
- Aurora全局数据库(主动-主动)
- ASG扩展自动化(试点灯)
详细指南: references/cross-region-replication.md
测试灾难恢复
混沌工程
目的: 通过控制故障注入验证灾难恢复程序。
测试场景:
- 数据库故障转移(停止主库,测量提升时间)
- 区域故障(阻止网络,触发DNS故障转移)
- Kubernetes恢复(删除命名空间,从Velero恢复)
工具: Chaos Mesh,Gremlin,Litmus,Toxiproxy
示例: examples/chaos/db-failover-test.sh,examples/chaos/region-failure-test.sh
详细指南: references/chaos-engineering.md
自动化灾难恢复演练
每月运行测试:
./scripts/dr-drill.sh --environment staging --test-type full
./scripts/test-restore.sh --backup latest --target staging-db
合规和保留
| 法规 | 保留 | 要求 |
|---|---|---|
| GDPR | 1-7年 | 欧盟数据驻留,擦除权 |
| SOC 2 | 1年以上 | 安全删除,访问控制 |
| HIPAA | 6年 | 加密,PHI保护 |
| PCI DSS | 3个月-1年 | 安全删除,季度审查 |
使用S3/GCS生命周期策略实施: 30天→标准-IA,90天→Glacier,365天→深度归档
不可变备份: 使用S3对象锁或Azure不可变Blob存储进行勒索软件防护。
详细指南: references/compliance-retention.md
监控和警报
关键指标: 备份成功率、持续时间、上次备份时间、RPO违规、存储利用率
Prometheus警报: VeleroBackupFailed,VeleroBackupTooOld,BackupSizeTrend
验证脚本:
./scripts/validate-backup.sh --backup latest --verify-integrity
./scripts/check-retention.sh --report-violations
./scripts/generate-dr-report.sh --format pdf
自动化和运行手册
自动化备份计划: Cron用于pgBackRest(每周全备份,每日差异备份),Velero计划(K8s)
灾难恢复运行手册步骤: 检测故障 → 验证次要 → 提升 → 更新DNS → 通知 → 文档化
详细指南: references/runbook-automation.md
与其他技能集成
相关技能
前提技能:
基础设施即代码:提供备份基础设施,灾难恢复区域Kubernetes操作:用于Velero的K8s集群设置秘密管理:备份加密密钥、凭证
并行技能:
数据库-PostgreSQL:PostgreSQL配置和操作数据库-MySQL:MySQL配置和操作可观测性:备份监控、警报安全加固:安全备份存储、访问控制
消费者技能:
事件管理:在事件期间调用灾难恢复程序合规框架:满足法规要求
技能链示例
基础设施即代码 → 秘密管理 → 灾难恢复 → 可观测性
↓ ↓ ↓ ↓
创建S3桶 存储加密密钥在Vault 配置备份 监控作业
提供数据库 管理凭证 设置复制 警报失败
设置VPC 管理凭证 测试灾难恢复演练 跟踪指标
最佳实践
做
✓ 定期测试恢复(关键系统每月) ✓ 自动化备份监控和警报 ✓ 加密备份在静止和传输中 ✓ 实施3-2-1备份规则 ✓ 定义和测量RTO/RPO ✓ 运行混沌实验验证灾难恢复 ✓ 文档化恢复程序 ✓ 在不同区域存储备份 ✓ 使用不可变备份进行勒索软件防护 ✓ 在CI/CD中自动化灾难恢复测试
不做
✗ 假设备份有效而不测试 ✗ 将所有备份存储在单个区域 ✗ 跳过保留策略定义 ✗ 忘记加密敏感数据 ✗ 仅依赖云提供商备份 ✗ 忽略备份监控 ✗ 仅在高负载下从主数据库进行备份 ✗ 存储加密密钥与备份一起
参考文档
- RTO/RPO规划:
references/rto-rpo-planning.md - 数据库备份:
references/database-backups.md - Kubernetes灾难恢复:
references/kubernetes-dr.md - 云灾难恢复模式:
references/cloud-dr-patterns.md - 跨区域复制:
references/cross-region-replication.md - 混沌工程:
references/chaos-engineering.md - 合规要求:
references/compliance-retention.md - 运行手册自动化:
references/runbook-automation.md
示例
- 运行手册:
examples/runbooks/database-failover.md,examples/runbooks/region-failover.md - PostgreSQL:
examples/postgresql/pgbackrest-config/,examples/postgresql/walg-config/ - MySQL:
examples/mysql/xtrabackup/,examples/mysql/walg/ - Kubernetes:
examples/kubernetes/velero/,examples/kubernetes/etcd/ - 云:
examples/cloud/aws/,examples/cloud/gcp/,examples/cloud/azure/ - 混沌:
examples/chaos/db-failover-test.sh,examples/chaos/region-failure-test.sh
脚本
scripts/validate-backup.sh:验证备份完整性scripts/test-restore.sh:自动化恢复测试scripts/dr-drill.sh:运行全灾难恢复演练scripts/check-retention.sh:验证保留策略scripts/generate-dr-report.sh:合规报告生成