如何零停机将Google Cloud SQL(Postgres 9.6)跨Google项目迁移
跨项目零停机迁移PostgreSQL 9.6 Cloud SQL实例方案
- 核心结论:你关注的DMS迁移任务原生支持跨GCP项目的Cloud SQL PostgreSQL迁移,是你当前场景下操作成本最低、能实现零停机的最优选择,20GB规模的实例全量同步耗时通常不超过15分钟,增量同步延迟稳定在百毫秒级,完全满足双实例并行、数据实时同步的要求,不需要采用自建逻辑复制、第三方工具这类更重的方案。
前置配置要求
- 源实例(旧项目PostgreSQL 9.6 Cloud SQL)调整:
- 修改实例参数,将
wal_level设为logical,开启logical replication开关,调整max_replication_slots、max_wal_senders参数预留至少2个空闲配额,参数修改后重启实例生效 - IAM权限层面,给目标项目的DMS服务账号授予旧项目的
Cloud SQL Client角色,同时将DMS服务的出口IP段加入源实例的授权访问列表 - 迁移前不要在源实例执行大的DDL操作,避免逻辑复制中断
- 修改实例参数,将
- 目标实例(新项目Cloud SQL)提前创建:
- 选择和源实例完全一致的PostgreSQL 9.6版本,计算、存储规格不低于源实例,优先选择和源实例相同的区域部署,降低同步网络延迟
- 不要提前在目标实例创建任何业务库表、权限,全量同步阶段DMS会自动完成结构、数据、索引、账号的全量迁移,手动提前创建反而会导致任务报错
迁移执行步骤
- 进入目标项目的DMS控制台创建迁移任务,源数据库类型选择Cloud SQL for PostgreSQL,选择源实例时直接在项目选择器切换到旧项目,就能看到你有权限访问的源实例,不需要手动配置公网/专线连接
- 迁移模式选择持续增量同步,不要选一次性全量迁移,跑通连接测试后启动任务
- 任务会自动跑两个阶段:第一阶段全量拷贝存量20GB数据,第二阶段自动追平全量同步期间产生的增量写入,等控制台显示同步延迟稳定在1s以内时,就可以准备切流
零停机切流(复用现有pgbouncer环境)
你已经部署了pgbouncer,切流操作非常简单,不需要逐个业务修改配置:
- 切流前先把pgbouncer的连接池模式调整为
transaction模式,清退残留的长连接 - 短暂暂停业务侧写请求(通常10-30秒足够),观察DMS同步延迟降到0、源实例无新增写入后,修改pgbouncer配置里的后端数据库地址为目标实例的连接地址
- 执行
pgbouncer -R重载配置,恢复业务写入,整个切流过程业务侧感知的停机时间在秒级,完全满足低停机要求
后续收尾
- 切流后持续观察24小时目标实例的性能指标,抽样校验核心表的行数、关键业务字段一致性,确认业务运行正常
- 确认无回滚需求后,停止DMS迁移任务,源实例建议保留7-14天再做删除,避免突发问题需要回滚
提醒:PostgreSQL 9.6已经结束社区生命周期,迁移稳定后建议尽快规划升级到12+的长期支持版本,规避安全风险和兼容性问题
内容的提问来源于stack exchange,提问作者Alexey Gorbel
相关产品推荐
相关产品推荐

