我正在运行postgres(14)数据库,它安装在一个Ubuntu计算示例上,但我无法远程连接:
~$ psql -U postgres -h remote.server.address -p 5432 datadb
psql: error: connection to server at remote.server.address, port 5432
failed:
Connection timed out
Is the server running on that host and accepting TCP/IP connections?
我能够从示例中查询数据库,并且该服务在几天前还可以远程访问。检查示例上的postgres状态显示它处于活动状态:
$ sudo systemctl status 'postgresql*'
● postgresql@14-main.service - PostgreSQL Cluster 14-main
Loaded: loaded (/lib/systemd/system/postgresql@.service; enabled-runtime; vendor preset: enabled)
Active: active (running) since Wed 2023-06-07 07:11:15 UTC; 14s ago
Process: 3614 ExecStart=/usr/bin/pg_ctlcluster --skip-systemctl-redirect 14-main start (code=exited, status=0/SUCCESS)
Main PID: 3619 (postgres)
Tasks: 7 (limit: 4694)
Memory: 18.1M
CPU: 164ms
监听端口5432:
$ sudo lsof -i -n -P | grep -E 'postgres.*LISTEN.*' | less
postgres 2775 postgres 5u IPv4 30639 0t0 TCP *:5432 (LISTEN)
postgres 2775 postgres 6u IPv6 30640 0t0 TCP *:5432 (LISTEN)
设置postgresql.conf是:
listen_addresses = '*' # what IP address(es) to listen on;
port = 5432 # (change requires restart)
max_connections = 100 # (change requires restart)
在pg_hba.conf上:
# IPv4 remote connections for the tutorial:
host all all 0.0.0.0/0 md5
我读到elsewhere的一个建议说,“如果你看到所有的配置都是正确的,它就在那里运行。”问题肯定出在别处。可能是错误的连接字符串或网关沿着拒绝连接。
如何进一步调试此问题以查看阻止我连接到数据库的因素?
更新:在回答下面检查防火墙规则的建议时,我这样做了:
$ sudo ufw allow 5432/tcp
Skipping adding existing rule
Skipping adding existing rule (v6)
但问题依然存在
2条答案
按热度按时间p5fdfcr11#
如果您正在使用IAP隧道,请检查是否正确配置了防火墙规则。
1.检查允许的5432端口连接&防火墙规则设置允许访问端口22。
1.检查守护程序服务是否正在运行。
1.检查Sshd服务是否正在运行,端口是否打开。
1.不仅端口22,JDBC连接和传入流量也可能被阻塞。
1.检查内核错误或OOM(内存不足),这可能导致操作系统没有资源来处理连接请求。
1.检查操作系统防火墙规则,因为使用Ubuntu,使用sudoer权限运行命令(
sudo ufw status
),并检查UFW状态的输出和活动规则列表。1.根据您的操作系统内置防火墙和版本检查守护程序服务的状态并运行connectivity test,很简单,通过点击"
Compute engine
"->"VM instances
"->"postgresql
",通过选项卡"Details
"找到"Network interfaces
",然后点击"Network details
"下的"View details
".找到“Network analysis
”,点击“Enable Network Management API
”。此示例将有一个连接窗口,可以检查哪个部分阻止了请求。1.即使您的VM示例正在侦听所有端口,如果示例的防火墙上有任何防火墙规则,连接也会被拒绝。登录到serial console并检查命令(
ip addr show
&ip route show table all
)的输出,以了解当前的路由设置及其工作方式,以便正确指定所有路由决策。1.要么是路由器配置错误,要么是ISP本身阻止了连接,而不管路由器尝试做什么。* * 检查postgres配置文件中必须使用的ip地址是否是您的ROUTER的ip地址**。
1.请参阅Helena Alexander的Devart博客How to Configure PostgreSQL for Remote Connections和Michael Okoh的LogRocket博客Setting up a remote Postgres database server on Ubuntu 18.04了解更多信息。
blpfk2vs2#
在示例的防火墙规则详细信息中将源IPv4范围更新为我的笔记本电脑的公共IP后,连接恢复。我通过转到VPC网络,然后单击侧菜单中的防火墙来完成此操作。在主窗格中,标题为VPC防火墙规则,我滚动到要查找的示例列表,然后单击<instance_name>-postgres,然后转到防火墙规则详细信息窗格,在那里单击编辑,将那里写入的IP(我不知道如何或为什么)替换为笔记本电脑的公网IP(curl https://ipinfo.io/ip)和BOOM!连接已恢复!非常感谢你的建议。