我在让 postgres 接受来自其他服务器的连接时遇到了问题。这是我的设置:
- APP06(10.55.129.31):运行 Postgres 的服务器
- APP05(10.55.129.30):服务器尝试连接 Postgres
这是我的/var/lib/pgsql/data/pg_hba.conf
文件app06:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 10.55.129.30/32 trust
host all all 10.55.129.31/32 trust
host all all 0.0.0.0/0 trust
# IPv6 local connections:
host all all ::1/128 trust
这并非我想要的(我想使用 LDAP),但至少应该可以工作。我想将 10.55.129.30 连接到 10.44.129.31。第一host
行应该就是我所需要的。第三host
行应该允许从任何地方进行连接。
现在,我们启动 Postgresapp06
$ /etc/init.d/postgres start
$ /etc/init.d/postgres status
pg_ctl: server is running (PID: 30091)
/usr/bin/postgres "-D" "/var/lib/pgsql/data"
看起来不错...
我们来看看Netstat:
$ netstat -nlp | grep 5432
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 30091/postmaster
unix 2 [ ACC ] STREAM LISTENING 16490154 30091/postmaster /tmp/.s.PGSQL.5432
好的...我想...由于我不是真正的系统管理员,我无法确切地说出这是什么意思,但看起来 PID 30091(进程 postmaster)打开了端口 5432。
让我们看看是否有任何东西在监听端口 5432
$ telnet localhost 5432
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
好的,端口 5432 已开放并接受连接。
现在,我们将前往 APP05 并查看是否可以连接...
我已经尝试过psql
逃避app05没有成功。我可以和app06?
$ ping app06
PING app06 (10.55.129.31) 56(84) bytes of data.
64 bytes from app06 (10.55.129.31): icmp_seq=1 ttl=64 time=0.901 ms
64 bytes from app06 (10.55.129.31): icmp_seq=2 ttl=64 time=0.230 ms
--- app06 ping statistics ---
2 packets transmitted, 6 received, 0% packet loss, time 5001ms
好的,我可以从 app05 与 app06 通信。让我们看看我是否可以连接到 Postgres 的端口:
$ telnet app06 5432
Trying 10.55.129.31...
telnet: connect to address 10.55.129.31: Connection refused
telnet: Unable to connect to remote host: Connection refused
我无法连接到端口 5432
我运行/usr/sbin/lokkit
并验证了软件防火墙已被关闭。
我绝不是网络或系统管理员。我也不是 Postgres 管理员。我很可能错过了一些简单而愚蠢的事情,但我不知道是什么。
我非常确定这些机器上的端口 5432 在网络上是开放的。我尝试将 Postgres 端口切换到 8999,我确定它没有被阻止,但我遇到了同样的问题。
知道我做错了什么吗?
答案1
在文本编辑器中打开 postgresql.conf 并查找listen_addresses
关键字。将其设置为*
重新启动 pgsql。
答案2
仅供参考...一个极其愚蠢我却忘记删除前导“#当我去更改配置文件中的“listen_addresses”行时。(是的......因此,该行[仍然]是评论! 嗯嗯。)
答案3
答案很简单,你的 postgress 安装仅绑定到 127.0.0.1 接口
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 30091/postmaster
您需要重新配置它并将其绑定到您的网络接口/ IP 地址,然后您就可以访问
答案4
只是让遇到同样问题的人知道:
- 我确信 postgres 在本地运行得很好。
- 我可以在我本地访问和操作postgres。(192.168.10.14)
- 我确信所有配置项都是正确的(监听'*',并允许0.0.0.0/0访问)
- 我可以从另一台电脑 (192.168.10.20) 远程访问 postgres,但是无法连接 postgres。
telnet 192.168.10.14 5432 # -> OK
ping 192.168.10.14 # -> OK
psql -h 192.168.10.14 # -> failed. remote server closed ...
- 最后我得到了答案:我错误地设置了我的网络。网络掩码应该是
255.255.255.0
,但不是0.0.0.0
:
# correct mask:
255.255.255.0
# incorrect mask
0.0.0.0
- 所以我修正了我的网络的网络掩码,重新启动,一切顺利!