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

PostgreSQL 16.3 Docker Swarm主从集群pg_basebackup连接报错求助

解决PostgreSQL主从复制pg_hba.conf认证失败问题

1. 确认pg_hba.conf复制规则格式正确性

确保pg_hba.conf中包含格式正确的复制条目,注意replication是固定的专用数据库名,不是业务库名:

# 允许Swarm子网内的无密码复制连接(仅测试场景)
host    replication     replicator      10.0.1.0/24               trust
# 生产环境推荐的密码认证格式
host    replication     replicator      10.0.1.0/24               scram-sha-256

子网段需覆盖备机容器的实际IP(即报错中的10.0.1.109所属网段),若要允许所有IP可写0.0.0.0/0,但需确认无语法错误。

2. 强制重载PostgreSQL配置

进入主机PostgreSQL容器,先验证配置文件路径是否与你修改的一致:

SHOW hba_file;

确认后执行重载命令,避免需重启容器才生效:

SELECT pg_reload_conf();

3. 匹配Docker Swarm网络子网

报错中的10.0.1.109是容器在Swarm overlay网络内的IP,而非VPS的公网/内网IP。先查看Swarm网络的子网信息:

docker network inspect <你的Swarm overlay网络名称>

找到Subnet字段(比如10.0.1.0/24),确保pg_hba规则中的网段完全覆盖该范围。

4. 解决加密要求冲突

报错包含no encryption,若主机postgresql.conf中设置了ssl = on,而备机pg_basebackup未指定SSL参数,会触发认证失败。两种解决方式:

  • 临时允许无加密复制(不推荐生产):在pg_hba中改用hostnossl条目
    hostnossl    replication     replicator      10.0.1.0/24               scram-sha-256
    
  • 备机执行pg_basebackup时添加SSL参数:
    pg_basebackup -h <主机容器名或Swarm VIP> -U replicator -D /var/lib/postgresql/data -P -X stream --ssl-mode=require
    

5. 验证复制用户权限

确认复制用户拥有REPLICATION权限:

SELECT rolname, rolreplication FROM pg_roles WHERE rolname='replicator';

若rolreplication为false,执行授权命令:

ALTER USER replicator REPLICATION;

6. 检查容器配置文件挂载有效性

Docker Swarm部署时,若使用volume挂载pg_hba.conf和postgresql.conf,需进入主机容器查看文件内容,确认与本地修改的配置一致。若不一致,排查挂载路径错误或Swarm volume同步问题。

7. 测试基础连接可用性

在备机容器中先用psql测试复制连接:

psql -h <主机容器名> -U replicator -d replication

先解决基础连接问题,再执行pg_basebackup操作。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 04:40:55