You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需重新同步,将PostgreSQL逻辑复制从库切换至新主库

PostgreSQL跨数据中心主备切换与全球从库同步问题

当前架构

一个PostgreSQL主库DB1,搭配全球分布式PostgreSQL从库,采用**Logical Replication(逻辑复制)**进行数据同步。主库为读写模式,从库为只读模式,主库通过虚拟化特性实现高可用,但当整个数据中心故障时会出现问题。

Data Center 1                     Global Slaves

+-----------+                    +-----------+
|  DB1      |                    |           |
| Master DB |--------------------| Slave 1   |
|           |-----\              |           |
+-----------+      \             +-----------+
                    \
                     \
                      \
                       \         +-----------+
                        \        |           |
                         --------| Slave 50  |
                                 |           |
                                 +-----------+

灾备切换计划

因此,我们计划在第二个数据中心新增一台PostgreSQL从库DB2,当数据中心1故障时,将DB2提升为新主库(读写模式),并将全球从库重新配置为同步至该新主库。

Data Center 1                     Global Slaves

+-----------+                    +-----------+
|    DB1    |                    |           |
| Master DB |            /-------| Slave 1   |
|  DOWN     |           /        |           |
+-----------+          /         +-----------+
      |               /
      |              /
      V             /
+-----------+      /             +-----------+
|    New    |-----/              |           |
| Master DB |--------------------| Slave 50  |
|    DB2    |                    |           |
+-----------+                    +-----------+

Data Center 2

核心疑问

  • 我理解无论在数据中心1和2之间采用流式复制还是逻辑复制,全球从库都需要从新主库重新同步,这个理解是否正确?如果不正确,如何实现无需重新同步所有全球从库的数据中心迁移?
  • 如果PostgreSQL原生无法实现,使用pgedge或pglogical这类插件是否可行?我考虑过使用Veeam Replication在数据中心间同步,但这可能会在迁移时导致更多数据丢失。
  • 当DB1和DB2间采用流式复制且DB2被提升为主库后,若在DB2上用pg_create_logical_replication_slot()创建新的复制槽,然后修改全球从库订阅连接字符串的host参数,从库能否在正确的位置继续同步?

个人初步分析结论

  1. 数据中心1和2间采用流式复制:复制槽不会同步至从库。从PG16开始可让全球从库订阅DB2,通过数据中心2中继复制可避免DC1故障问题,但DC2故障时会出现类似问题。将全球从库重新订阅至DB2会触发重新同步,若禁用初始同步则从库会失去同步。
  2. 数据中心1和2间采用逻辑复制:复制槽同样不会同步至从库,且DB2的LSN(日志序列号)和时间线完全不同,DB1的LSN无法与DB2的关联。

内容的提问来源于stack exchange,提问作者KlausD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 21:13:16