我在不同位置托管了两台服务器,使用 Postgresql。
我想要通过服务器 2(Ubuntu 16)上的 postgresql FDW 访问服务器 1(CentOS 7)上的 Postgresql 数据。
问题是 :
psql: could not connect to server: Connection refused Is the server running on host "xxx.xxx.xxx.xxx" and accepting TCP/IP connections on port 5432?
我使用 编辑了 postgresql.conf 文件,listenaddresses='*'
并使用 编辑了 pghba.conf 文件host all all 0.0.0.0/0 md5
仍然不起作用,所以我认为这可能是由 iptables 引起的。我添加了以下规则:
iptables -A INPUT -p tcp -m tcp --dport 5432 -j ACCEPT iptables -A OUTPUT -p tcp -m tcp --dport 5432 -j ACCEPT
还是不行。需要建议。
感谢您 !
(对不起我的英语不好)
答案1
从网络角度看,服务器 2 为客户端,服务器 1 为服务器。客户端的操作系统报告连接被拒绝当尝试连接到 xxx.xxx.xxx.xxx:5432 时。
一般来说,这个错误不是由防火墙引起的,因为防火墙往往会丢弃数据包,从而产生连接超时。
这也不是由于基于 postgres 主机的身份验证失败,因为它们产生了完全不同且具体的错误消息。
以下是一些可能的理由:
PostgreSQL 确实没有在服务器 1 上监听端口 5432。这可以通过以
netstat -tlnp | grep 5432
root 身份运行来确认。请注意,配置参数是listen_addresses
,而不是listenaddresses
。此外,在进行此更改后,需要重新启动 postgres。您可以查看 postgres 服务器日志以确认它是否正常工作或检查它不起作用的原因。网络配置使得无法通过地址从服务器 2 访问服务器 1。
xxx.xxx.xxx.xxx
数据包被路由到其他地方,即网络接口上的 5432 TCP 端口未绑定到服务。例如,如果服务器 1 是虚拟化的,则预计无法通过其主机的地址直接访问它。