PostgreSQL持续出现‘could not connect to server: Connection refused’问题求助
问题成因分析与修复方案
从你提供的PostgreSQL日志里,能找到几个关键异常点,是导致间歇性连接拒绝的核心原因:
IP地址绑定异常
日志中反复出现:LOG: could not bind IPv4 address "10.1.4.26": Cannot assign requested address WARNING: could not create listen socket for "10.1.4.26" LOG: listening on IPv4 address "10.1.4.26", port 5432这说明服务器的
10.1.4.26IP地址存在间歇性不可用的情况,可能是网卡波动、DHCP导致IP变更、其他进程抢占该IP,使得PostgreSQL偶尔无法绑定此地址,进而对外拒绝连接。逻辑复制启动器异常退出
LOG: worker process: logical replication launcher (PID 13195) exited with exit code 1逻辑复制启动进程异常退出,可能引发PostgreSQL内部资源紊乱,甚至触发服务重启或连接中断。
存在管理员级别的连接终止命令
FATAL: terminating connection due to administrator command有外部操作(可能是自动脚本、监控工具或误操作)触发了PostgreSQL的连接终止命令,导致服务间歇性中断。
诊断步骤
监控IP地址稳定性
- 持续执行
ping 10.1.4.26,观察是否有丢包或间歇性不通的情况; - 执行
ip addr查看该IP是否会周期性消失/重现,同时查看系统日志(/var/log/syslog或/var/log/messages)中关于网卡、IP配置的变更记录。
- 持续执行
排查逻辑复制状态
- 连接PostgreSQL后执行:
检查复制槽是否正常、主从同步状态是否稳定;SELECT * FROM pg_replication_slots; SELECT * FROM pg_stat_replication; - 查看
pg_wal目录下的WAL日志是否堆积,若堆积过多会导致复制进程异常。
- 连接PostgreSQL后执行:
检查自动操作脚本
- 查看当前用户的定时任务:
crontab -l; - 查看PostgreSQL的systemd服务配置:
systemctl cat postgresql,确认是否有自动重启、健康检查等可能触发服务中断的配置; - 排查服务器上的监控工具、运维脚本,是否存在自动终止PostgreSQL进程的逻辑。
- 查看当前用户的定时任务:
监控资源与连接数
- 执行
SELECT * FROM pg_stat_activity;查看当前连接数,对比postgresql.conf中的max_connections参数,确认是否达到连接上限; - 用
top、iostat监控服务器的CPU、内存、磁盘IO,排查是否存在资源耗尽导致服务无法响应的情况。
- 执行
修复建议
调整监听地址配置
编辑postgresql.conf,修改listen_addresses参数:- 如果
10.1.4.26不是必须对外提供服务的IP,改为仅监听本地:listen_addresses = 'localhost'; - 如果需要保留该IP,将服务器网卡配置为静态IP,避免DHCP自动变更地址;同时确保没有其他进程占用5432端口(用
ss -tulpn | grep 5432检查)。
- 如果
修复逻辑复制问题
- 如果复制槽异常,执行
SELECT pg_drop_replication_slot('slot_name');删除异常槽,重新创建; - 调整
postgresql.conf中的复制相关参数:增大max_wal_senders、max_replication_slots,确保复制进程有足够资源; - 检查主从节点的网络连通性,避免复制过程中出现网络中断。
- 如果复制槽异常,执行
移除异常自动操作
禁用触发PostgreSQL终止命令的定时任务或脚本;调整监控工具的健康检查逻辑,避免误判服务状态而触发重启。优化连接管理
- 如果是连接数达到上限,适当增大
max_connections(注意:该参数会消耗内存,需根据服务器内存调整); - 部署连接池工具(如pgBouncer),减少PostgreSQL的连接压力,避免因连接耗尽导致拒绝连接。
- 如果是连接数达到上限,适当增大
内容的提问来源于stack exchange,提问作者shehinn p
相关产品推荐
相关产品推荐

