AWS停止托管Citus后将其数据迁移至RDS的可行方案咨询
AWS托管Citus迁移至RDS/Aurora可行方案对比
已提及方案的可行性验证
- Amazon DMS方案:可正常使用,仅需完成前置适配配置。Citus协调节点本身对外暴露标准PostgreSQL协议,将DMS源端指向协调节点而非底层数据节点即可完成适配:全量迁移阶段DMS可正常拉取所有分布式表的合并数据,CDC阶段仅需要提前在Citus集群调整参数
wal_level = logical、调高max_replication_slots阈值即可。目前已有多个生产案例验证该路径可行性,唯一需要注意的是Citus专属的分片规则、扩展函数不会被DMS自动同步,迁移后需要手动将原分布式表调整为普通PostgreSQL表结构即可。 - 自定义WAL同步方案:非特殊场景不推荐使用。Citus灾备S3桶存储的是各数据节点独立的WAL日志,并非全局逻辑解码后的日志,直接用WAL-G还原会得到多个独立的分片数据库,还需要额外开发分片数据合并逻辑,开发成本极高,仅适合需要迁移全量历史数据、可接受长时间停机的极端场景。
其他可行迁移方案
低停机时间方案:逻辑复制+增量同步
如果你的Citus版本≥11.0,可以直接在协调节点开启逻辑发布,在目标RDS/Aurora实例创建订阅即可完成低停机迁移:
- 协调节点执行创建发布命令:
CREATE PUBLICATION citus_migrate FOR TABLE 你需要迁移的OLTP表名列表; - 目标RDS实例执行创建订阅命令:
CREATE SUBSCRIPTION citus_sub CONNECTION 'host=协调节点地址 port=5432 dbname=数据库名 user=账号 password=密码' PUBLICATION citus_migrate; - 待订阅同步追上源端延迟后,暂停源端写操作,确认数据一致后切换流量到目标库即可,停机时间仅为切换流量的秒级窗口。
小数据量方案:pg_dump导出导入
如果需要迁移的OLTP数据量≤100G,可直接在协调节点用pg_dump导出指定表的结构和数据,再导入到目标RDS实例即可,操作最简单无额外成本,停机时间和数据量正相关,适合非核心业务、可接受数小时停机的场景。
最优路径优先级
- 小数据量、可接受短时间停机:优先选择
pg_dump导出导入方案,操作零风险、无额外成本 - 核心业务需要低停机迁移:优先尝试DMS方案,配置简单无需额外开发,AWS官方已完成对应适配支持
- 若DMS遇到兼容性问题:再选择逻辑发布订阅方案,兼容性更强,可自定义同步规则
- 仅当有全量历史数据迁移的特殊需求时,再考虑自定义WAL同步方案
内容的提问来源于stack exchange,提问作者Victor Cadena
相关产品推荐
相关产品推荐

