尝试使用三个节点Postgresql-9.4 High Availability (HA)
安装RHEL7
。在所有三个节点中,相应地安装postgresql
、更新postgresql.conf
和pg_hba.conf
文件。完成所有配置后,尝试在Master服务器中使用命令检查验证同步流复制
select * from pg_stat_replication;
它返回
postgres=# select * from pg_stat_replication;
pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | backend_xmin | state | sent_location | write_
location | flush_location | replay_location | sync_priority | sync_state
-----+----------+---------+------------------+-------------+-----------------+-------------+---------------+--------------+-------+---------------+-------
---------+----------------+-----------------+---------------+------------
(0 rows)
这表明,没有复制。当我查看 postgresql 日志文件时,我发现没有建立从备用节点到主节点的连接。所有三个节点中的日志文件如下所示:
节点0:
FATAL: no pg_hba.conf entry for replication connection from host "x.x.x.x (node1)", user "postgres", SSL off
FATAL: no pg_hba.conf entry for replication connection from host "x.x.x.x (node2)", user "postgres", SSL off
节点1和节点2:
FATAL: could not connect to the primary server:
FATAL: no pg_hba.conf entry for replication connection from host "x.x.x.x (node0)", user "postgres", SSL off
为了检查连接,我在所有三个节点中禁用了 iptables。能够从/到所有其他节点 ping 通,从从站到主站的 telnet 工作正常,从主站到从站的 telnet 不起作用。不确定为什么会发生(即使 iptables 服务已停止)。
答案1
在主节点(节点0):更新文件pg_hba.conf
,添加postgres
(用户)访问数据库。
在备用节点(节点 1 和节点 2)中:禁用iptables
或配置firewall
为接受与主节点之间的连接。
在 /etc/sysconfig/iptables 中,添加以下行并重新启动。
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5432(port) -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
这个解决方案解决了我的问题。