You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启动PGPOOL2报failed to create INET domain socket错误如何解决

PGPOOL2启动绑定套接字失败故障处理

故障现象

完成PGPOOL2所有配置后启动服务直接报错退出,前台执行pgpool -n获取的启动日志核心报错如下:

2022-06-20 18:48:40.344: main pid 33987: LOG:  Setting up socket for 0.0.0.0:9999
2022-006-20 18:48:40.344: main pid 33987: FATAL:  failed to create INET domain socket
2022-06-20 18:48:40.344: main pid 33987: DETAIL:  bind on socket failed with error "Address already in use"
2022-06-20 18:48:40.347: main pid 33987: LOG:  shutting down

报错指向服务绑定0.0.0.0:9999监听地址时触发FATAL错误,错误详情为地址已被占用,随后服务直接走关闭流程退出。
另外日志开头还有一行提示:reading status file: 1 th backend is set to down status,说明当前PGPOOL记录的1号后端数据库节点处于下线状态,后续服务恢复后需要额外检查该节点状态。

故障根因

PGPOOL2默认配置下会监听9999端口对外提供服务,当前服务器上已经有其他进程占用了9999端口,导致新启动的pgpool进程无法完成套接字绑定,启动失败。

排查操作

执行以下命令确认9999端口的占用进程:

# 两个命令二选一即可,优先使用ss
ss -tulpn | grep :9999
netstat -tulpn | grep :9999

命令返回结果会直接展示占用端口的进程ID、进程名称,常见的占用原因有两种:

  • 之前启动的pgpool进程异常退出,残留进程持续占用端口
  • 服务器上部署的其他业务服务/代理程序配置了9999作为监听端口

修复方案

根据端口占用的实际场景选择对应处理方式:

  1. 残留pgpool进程占用
    先执行以下命令清理所有残留pgpool进程:
    pkill pgpool
    
    清理完成后再次执行端口检查命令,如果没有返回9999端口的占用记录,说明端口已经释放,直接重新启动pgpool即可。如果pkill无法清理残留进程,拿到端口查询结果里的进程ID后,执行kill -9 进程ID强制终止即可。
  2. 其他业务服务占用9999端口
    两种方案二选一:
    • 停止占用9999端口的非必要业务,释放端口后重启pgpool
    • 修改PGPOOL配置文件pgpool.conf中的port配置项,将监听端口改为一个未被占用的端口(比如5432、9998等),保存配置后重新启动pgpool。

注意:端口问题解决、pgpool正常启动后,记得检查日志里提到的处于down状态的1号后端节点,确认节点网络、PostgreSQL服务正常后,可通过pcp_attach_node命令将节点重新加入集群。

内容的提问来源于stack exchange,提问作者Priyank Panchal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 12:15:28