跳到主要内容

备份与恢复

备份应覆盖结构化数据、对象存储和配置。三者要一起备份:文档、知识和 实体文件系统横跨 PostgreSQL、MinIO 以及 Redis 中保存的 JuiceFS 元数据,只有各部分来自同一时间点,恢复才是一致的。

需要备份什么

内容所在位置原因
PostgreSQLpg_data所有关系型数据:用户、工作区、任务、目标、运行记录、消息。
MinIOminio_data上传的文件、生成的产物,以及 JuiceFS 数据块。
Redis 数据库 /1redis_dataJuiceFS 元数据。没有它,MinIO 中的 JuiceFS 数据块将无法读取。
.env宿主机密钥、服务商凭据和部署配置。
OAuth 应用注册信息外部服务商重新连接集成所需的 client id/secret 和回调 URL。

内置导出 API

API 内置了用于逻辑备份的租户导出接口:

GET  /api/v1/backup/summary          # what an export would contain
GET /api/v1/backup/export # export the tenant's data
POST /api/v1/backup/export/download # download an export archive

这是数据级导出(适合迁移和异地副本),不能替代对整个部署的卷级备份。

PostgreSQL

导出:

docker compose exec postgres pg_dump -U manor manor > manor.sql

恢复到兼容的 PostgreSQL 版本:

cat manor.sql | docker compose exec -T postgres psql -U manor manor

对于大型数据库,优先使用自定义格式(pg_dump -Fc)配合 pg_restore,并按计划定期执行导出(单机部署用宿主机上的 cron 即可)。

MinIO 与 JuiceFS

使用 MinIO 客户端工具(mc mirror)或对 minio_data 做卷快照。 两条规则:

  • 对象备份要与数据库备份保持协同——文档记录存在但文件 blob 缺失 (或反过来)都意味着恢复是坏的。
  • JuiceFS 数据只有配合其元数据才可用。在对 minio_data 做快照的 同时对 redis_data(至少是 Redis 数据库 /1)做快照。只恢复 MinIO 而没有匹配的 Redis 元数据,即使数据块还在,实体文件系统也 会是空的。

如果需要严格一致的文件系统镜像,在做快照前先停止或静默 worker; FUSE 挂载在正常停止时会刷新其缓存。

恢复演练

不要等到事故发生才测试恢复。定期恢复到一个独立环境并确认:

  1. 登录正常,用户/工作区都在。
  2. 文档可以打开,知识搜索返回结果(检验 PostgreSQL、MinIO 以及 JuiceFS 元数据的对齐)。
  3. 一次 Agent 运行能够完成。
  4. 集成能重新连接(或干净地重新授权)。

每次升级前都保留至少一份紧邻升级的备份——参见 升级与发布