TIP
原文: 查看英文原文 English: View English version
SpiceDB 之间的数据迁移
本文档介绍如何在 SpiceDB 实例之间以最短停机时间迁移数据,例如迁移到 AuthZed Cloud。
重要说明
本指南仅涉及 SpiceDB 到 SpiceDB 的数据迁移。有关底层数据存储(Postgres、CockroachDB)的 Schema 迁移或 SpiceDB Schema 变更,请参阅相关文档章节。
WARNING
不推荐使用 pg_dump/pg_restore 等工具进行直接数据库级别的迁移,这可能会破坏 SpiceDB 的 MVCC。在不同数据存储类型之间迁移(例如从 Postgres 到 CockroachDB)时,必须使用 SpiceDB API(exportBulk/importBulk 或 zed backup)。
前提条件
- zed CLI 工具
迁移选项
选项 1:带写入停机的迁移
一种直接的方法,在备份和恢复期间会产生写入停机(但不是读取停机)。
步骤:
- 启动新的 SpiceDB 实例
- 停止向旧 SpiceDB 写入
- 对旧 SpiceDB 运行
zed backup create <filename> - 使用生成的备份文件对新 SpiceDB 运行
zed backup restore <filename> - 将读取切换到新 SpiceDB
- 开始向新 SpiceDB 写入
选项 2:近零写入停机的迁移
一种更复杂的方法,通过持续同步来最小化写入停机。
步骤:
- 启动新的 SpiceDB 实例
- 对旧 SpiceDB 运行
zed backup create <filename> - 对新 SpiceDB 运行
zed backup restore <filename> - 运行
zed backup parse-revision <filename>获取指向备份版本的 zed token - 使用你选择的 SpiceDB 客户端库,创建一个脚本持续调用 Watch API,将每个关系变更从旧 SpiceDB 写入新实例。在初始 API 调用中,将 zed token 作为
WatchRequest对象中的optional_start_cursor提供。运行直到准备好停止旧的写入。 - 停止向旧 SpiceDB 写入
- 等待脚本不再接收到变更(此处产生最短写入停机)
- 将读取和写入切换到新 SpiceDB