Skip to content
bitzorcas
中EN

Guide

备份、恢复与灾难演练

为数据库、对象存储、消息、Redis 密钥环和配置制定 RPO/RTO、恢复顺序与可验证演练。

Last updated

备份成功不等于系统可恢复。BitzOrcas 的业务事实、对象、消息进度、Data Protection 密钥环和配置彼此有关,恢复方案必须把它们放在同一时间线中验证。

关键路径图

下图展示了系统高可用容灾与灾难恢复(DR)架构:包含主从数据库实时复制、异地冷备、故障自动切换与 RPO/RTO 保障机制。

宣布事故

阻断不安全写入

恢复数据与密钥

验证不变量

带监控恢复服务

先定义目标

  • RPO:故障后最多允许丢失多少数据;
  • RTO:从宣布灾难到恢复核心服务允许多久;
  • 恢复范围:单租户、单库、区域级还是供应商级故障;
  • 一致性点:数据库、对象和消息怎样回到可解释的共同时间点。

不同数据可以有不同目标,但客户承诺必须以最慢、最难恢复的关键依赖为准。

需要保护的资产

资产最低要求
SQL Server/PostgreSQL全量 + 日志/增量备份,定期恢复到隔离环境
S3/MinIO版本、生命周期、跨区域或离线副本;记录对象与数据库引用关系
Redis区分可丢缓存与不可丢 Data Protection 密钥环、幂等状态
RabbitMQ/CAP持久化、死信和积压监控;恢复后允许重投并依赖幂等
配置与 Secret版本化配置、Secret 重新签发能力和访问审计
发布制品镜像、包、SBOM、provenance 和数据库迁移同版本保存

推荐恢复顺序

  1. 冻结写入并记录故障时间、最后可信提交和消息位置。
  2. 恢复网络、Secret、数据库和 Data Protection 密钥环。
  3. 恢复对象存储并执行引用完整性检查。
  4. 以受控消费速率恢复 Broker、CAP 和后台任务。
  5. 启动只读验证,检查租户隔离、认证、关键查询和工作流状态。
  6. 恢复写入并监控重复消息、缓存重建、计数漂移和通知积压。

数据库恢复早于对象或消息并不自动安全。删除、工作流完成和集成事件可能需要重放或补偿,必须预先写出判断规则。

演练验收

  • 使用生产同级加密备份,而不是开发快照;
  • 恢复到全新环境,避免依赖原机器残留;
  • 测量真实 RPO/RTO,并记录人工步骤;
  • 抽查多个租户、跨日期数据、文件下载、登录、审批和通知;
  • 演练后把发现转为自动化、监控或明确的风险接受。

升级和回滚细节见数据库迁移与生产安全清单。

SQL Server 备份与验证

源码提供 BitzOrcas.DatabaseMaintenance,支持 Full、Differential、Log、VERIFYONLY 和带确认的 Restore。备份目录必须同时被 SQL Server 进程与 CLI 看见;远程数据库不会自动把文件下载到运行 CLI 的机器。

Terminal window
# ① 生成全量备份;连接串来自受控运维身份。
dotnet run --project src/Tooling/BitzOrcas.DatabaseMaintenance -- \
--backup-database --backup-type Full \
--connection "$DB_MAINT_CONNECTION" --backup-dir "$BACKUP_DIR"
# ② VERIFYONLY 只证明备份集可读,不能代替真实恢复和应用 smoke。
dotnet run --project src/Tooling/BitzOrcas.DatabaseMaintenance -- \
--verify-backup --connection "$DB_MAINT_CONNECTION" \
--backup-dir "$BACKUP_DIR" --backup-file "$BACKUP_FILE"

SIMPLE recovery 下日志备份会以退出码 0 返回 Skipped=true。自动化必须监控 skipped 状态,否则会在没有日志链时误报备份健康。

隔离恢复演练

Terminal window
# 仅对隔离实例执行;Restore 使用 WITH REPLACE 且没有 dry-run。
dotnet run --project src/Tooling/BitzOrcas.DatabaseMaintenance -- \
--restore-database --connection "$ISOLATED_RESTORE_CONNECTION" \
--backup-dir "$BACKUP_DIR" --backup-file "$BACKUP_FILE" \
--database BitzOrcas_RestoreDrill --confirm RESTORE

Restore 前工具会创建 pre-restore full snapshot;若后续恢复失败,该 snapshot 会保留。操作者必须记录部分状态,并验证目标实例的外部连接、Broker、邮件、Webhook 全部不会指向生产。

恢复后的业务核对

范围核对
身份与租户多租户登录、权限、跨租户拒绝
文件数据库引用与对象版本一致,可下载
消息Outbox/Inbox 状态、积压、重复消费
工作流运行实例、待办、Timer、时间线
审计当前及跨时间桶记录完整
License/密钥DeploymentId、缓存、Data Protection 可用

演练报告

报告记录故障假设、备份链、Hash、SQL 版本、开始/结束、实测 RPO/RTO、人工步骤、失败点、数据抽样和 Owner。恢复成功但超过客户 RTO 仍是不通过。

完成清单

  • 备份、VERIFYONLY 与真实 Restore 是三份独立证据;
  • 数据库、对象、消息、密钥和配置的时间点可解释;
  • 隔离环境不会发送生产副作用;
  • 恢复后执行多租户、文件、工作流、审计和消息 smoke;
  • 演练发现进入自动化 backlog 并有完成日期。

下一次演练日期、Owner 和未关闭风险必须进入同一报告,避免一次成功被永久当作恢复能力。

100%

滚轮或按钮缩放 · 放大后拖动画面 · 双击切换 100% / 200%