问题描述
我正在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。