无法在postgres复制中执行基本备份错误:pg_basebackup:无法连接到服务器

问题描述

我正在docker容器中运行postgresql 11.2。 在准备主实例和备用Postgresql实例以进行流复制时,我已在主服务器上启用了归档。之后,我需要在standBy服务器上运行pg_basebackup命令以从主服务器备份到standBy。 无论我做什么,都面临着相同的错误

pg_basebackup: Could not connect to server: FATAL:  no pg_hba.conf entry for replication connection from host "10.244.0.1",user "repluser",SSL off

我在运行StandBy服务器的docker容器中使用postgres用户运行的命令是:

pg_basebackup -h 10.0.0.1 -D /data/postgres -U repluser -v -P --wal-method=stream

OR

pg_basebackup -h 10.0.0.1 -U repluser -Ft -D /data/postgres

(请假定10.0.0.1是我的主服务器的IP,而10.0.0.2是我的备用服务器的IP。它们在同一子网中)

主服务器上的pg_hba.conf文件如下所示:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost,by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

host all all all md5

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    replication     repluser        10.0.0.2/32             trust

解决方法

Postgresql告诉您问题出在哪里。将“ 10.244.0.1”添加到pg_hba进行复制(除非您认为这是MITM攻击者的IP地址)。

也许您认为IP地址是10.0.0.2,但是PostgreSQL不是。如果主机正在为内部虚拟机对外部世界进行NAT,则连接看起来就像是来自主机的,这就是您需要使用的IP地址。但是,当然,这意味着在pg_hhba中实现的IP限制不会提供太多的安全性,因为所有连接似乎都来自同一位置,因此您必须在主机级别实施该限制,或者使用不同于仅用于身份验证的方法IP限制。您也许还可以更改VM的设置,使其具有网桥而不是NAT。