PostgreSQL 1主2从集群中从库能否同时做流复制与逻辑复制?
从PostgreSQL流复制备库开启逻辑复制的可行性分析
这个方案是完全可行的,但依赖PostgreSQL版本和备库的正确配置,你之前旧版本测试失败的核心原因是版本限制,具体细节如下:
核心前提:版本要求
PostgreSQL 10及以上版本才支持从物理流复制备库作为逻辑复制的发布端,10以下版本仅允许主库创建逻辑复制发布,这应该是你之前测试失败的关键原因。如果当前集群版本是10+,可以继续推进。
备库需要调整的配置
要让流复制备库支持逻辑复制,需完成以下配置:
- 修改备库的
postgresql.conf,设置wal_level = logical,该参数需重启备库生效(主库的wal_level保持replica或更高即可,无需额外调整)。 - 确保备库已开启
hot_standby = on(流复制备库默认已配置,用于支持只读查询和复制操作)。 - 调整备库的
max_replication_slots参数,至少预留1个槽位给逻辑复制使用,可动态生效:ALTER SYSTEM SET max_replication_slots = 5; -- 根据实际需求调整数值 SELECT pg_reload_conf(); - 确保连接备库的用户拥有
REPLICATION权限,可通过以下命令授予:GRANT REPLICATION ON DATABASE your_db TO repl_user;
操作注意事项
- 备库作为逻辑发布端时,复制的起点是备库当前的WAL位置,无法获取备库未同步到的主库历史数据,因此订阅端需要初始数据同步的话,需先通过
pg_dump完成全量数据导出导入。 - 需监控备库的流复制延迟,若备库与主库延迟过大,逻辑复制的订阅端数据会相应滞后,影响业务一致性。
- 逻辑复制的订阅端可以是任何PostgreSQL实例(包括其他备库、独立实例等),不会对主库产生额外负载,达到你减轻主库压力的目的。
旧版本失败的原因补充
PostgreSQL 9.x及更早版本中,逻辑复制功能尚未完善,仅允许主库作为发布源,物理备库无法创建逻辑复制槽和发布,因此当时测试必然失败。升级到10+版本后,该限制被移除,方案即可正常运行。
内容的提问来源于stack exchange,提问作者Ankur
相关产品推荐
相关产品推荐

