我正在使用流复制和专用复制槽在单个服务器中复制多个 PostgreSQL 集群。
我们还想监控一些参数,例如每个主节点上的复制槽的状态,因此,我们希望能够使用复制用户连接主节点来查询槽状态,因此无需设置任何具有权限的用户访问任何数据库。
我在许多服务器上成功实现了它。例如:
joanmi@standby:~$ PGPASSWORD=supersecret psql -h serverA.example.com -U replication -c "select slot_name, active from pg_replication_slots" postgres
slot_name | active
-----------------+--------
pasifae_replica | t
(1 fila)
但是针对另一台服务器的完全相同的语句会引发一条错误消息,声称不允许访问。具体来说,文件中没有任何行pg_hba.conf
允许replication
我们备用服务器的用户连接postgres
数据库。
joanmi@standby:~$ PGPASSWORD=supersecret psql -h serverB.example.com -U replication -c "select slot_name, active from pg_replic
ation_slots" postgres
psql: FATAL: no hay una línea en pg_hba.conf para «172.30.100.190», usuario «replication», base de datos «postgres», SSL activo
FATAL: no hay una línea en pg_hba.conf para «172.30.100.190», usuario «replication», base de datos «postgres», SSL inactivo
事实上,这是真的。但是在两个主服务器中,它只在其中一个服务器中失败。
我检查了 pg_hba.conf 和下面是replication
两个用户的(唯一)行:
服务器 A:
host replication replication 172.30.100.190/32 md5
服务器 B:
host replication replication 172.30.100.0/24 md5
...两者都是 Postgresql 9.4。具体来说:
服务器 A:9.4.6
服务器 B:9.4.3