备份与恢复

sections.operations

备份与恢复

每夜执行的保留期清理任务、`scripts/backup/` 下的备份脚本,以及针对 Mongo、Postgres 和 MinIO 的完整恢复流程。

备份与恢复

Skrum 是一体化的 AI 项目控制平台——团队聊天、任务与冲刺、原生视频会议、以及入站代码活动,全部集中在一个工作空间中,每一项 AI 操作都会等待人工确认后才会执行。

备份由运营方负责。Skrum 提供脚本和保留期任务;你需要提供计划、异地目标、监控和恢复演练。

恢复目标与计划

  • **建议频率:**每晚一个完整备份集,并每季度进行一次恢复演练。若不能接受一天的数据损失,应每六小时或更频繁地执行。
  • **RPO:**不超过两个成功备份集之间的间隔加上中断任务的持续时间。只有每次任务都被监控且成功时,每夜备份才可实现 24 小时目标。
  • **RTO:**使用接近生产规模的数据进行计时恢复。四小时可作为初始运营目标,但实测结果才是依据。
  • **保留:**初始策略可保留 7 个每日、4 个每周和 12 个每月完整集,并至少保存一份在应用主机和主对象存储之外。

对漏跑、非零退出或缺少 MANIFEST.txt 发出告警。在新备份及其校验文件完整之前,不要删除最后一个已知可用集。

创建备份

./scripts/backup/backup-all.sh

脚本仅在进程中缺少变量时,从仓库根目录 .env 读取备份相关值。显式变量(包括空值)优先;文件不会通过 sourceeval 执行,任何密钥都不会输出。

必须提供 MONGODB_URIDATABASE_URLS3_ENDPOINTS3_ACCESS_KEYS3_SECRET_KEYS3_BUCKETBACKUP_TARGET=local 写入 BACKUP_DIRBACKUP_TARGET=s3 上传到 BACKUP_S3_PREFIX。Mongo、Postgres 与对象存储按顺序采集;如需安静且一致的恢复点,请暂时停止入站写入和 worker。

保留期清理

每天运行的 retention-sweep BullMQ 任务,会在删除之前,将符合清理条件的消息、任务评论和工作图谱事件无损归档到冷存储的 archive/{accountId}/{kind}/{sha256}.ndjson.gz 路径下。各档位的保留天数遵循 historyDays(30 / 90 / 365 / 无限)。无限档位不会执行任何清理操作。

恢复预期

恢复具有破坏性:Mongo 使用 --drop,Postgres 使用 --clean --if-exists,对象镜像会删除多余对象。请安排维护窗口、停止 API/worker 写入并确认目标。

./scripts/backup/restore-all.sh <BACKUP_SET_DIR_OR_S3_URI>

命令会在修改数据前验证完整清单和所有归档哈希,然后恢复 Mongo、Postgres 和 MinIO。重新开放写入前:

  1. 启动 API 与 worker,并等待所有健康检查通过。
  2. 验证登录、工作空间/项目/任务/消息读取以及一个已知文件的下载。
  3. 检查队列深度、迁移状态和近期审计事件。
  4. 记录开始/结束时间、恢复集和冒烟测试结果,用于更新实测 RTO。

常见问题

  • 托管版呢? 在托管版方案中,备份由我们负责。
  • 可以自行调整保留期窗口吗? 可以——每个账户的 retention_policies 只能向下收紧。
  • 应用保留策略能替代灾难恢复备份吗? 不能,完整备份集的生命周期是独立的运营策略。

另请参阅: Skrum 文档