我正在docker容器中运行postgresql11.2。在为流式复制准备master和standBy PostgreSQL实例时,我已经在master服务器上启用了存档。在这之后,我需要在standBy服务器上运行pg_basebackup
命令,以便从master备份到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
我使用postgres
用户运行的命令,在运行standBy服务器的docker容器内,是:
pg_basebackup -h 10.0.0.1 -D /data/postgres -U repluser -v -P --wal-method=stream
或
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。