Centos7下Pgpool-II连接主从复制PostgreSQL失败求助
嘿,我来帮你捋捋这个问题!你遇到的情况确实挺闹心的——明明PostgreSQL主从实例正常,Pgpool也启动了,却连不上还提示PostgreSQL未运行,咱们一步步排查:
1. 先确认PostgreSQL实例本身没问题
先绕开Pgpool,直接连接两个PostgreSQL实例,确保它们都能正常响应:
# 连接主库(替换成你的主库端口、用户名和数据库) psql -h localhost -p 5432 -U your_user -d your_db # 连接从库(替换成你的从库端口) psql -h localhost -p 5433 -U your_user -d your_db
如果这两步都能顺利连上,那PostgreSQL本身是正常的,问题肯定出在Pgpool的配置或者连接逻辑上。
2. 检查Pgpool-II核心配置(pgpool.conf)
重点核对这几个关键配置项:
- 后端数据库地址和端口:找到
backend_hostname0/backend_port0(主库)、backend_hostname1/backend_port1(从库),确保端口号和你实际的PostgreSQL端口完全一致,别打错数字。 - 监听地址:确认
listen_addresses包含你用来连接的IP(比如localhost或者0.0.0.0),不然Pgpool会拒绝外部/本地连接请求。 - HBA认证开关:如果
enable_pool_hba设为on,要检查pool_hba.conf里的规则,确保允许你的用户从当前地址连接Pgpool。
3. 扒一扒Pgpool的日志细节
日志是排查问题的黄金线索!去Pgpool的日志目录(默认在/var/log/pgpool/或者/var/lib/pgpool/)看详细日志,里面会明确告诉你是连不上后端库、认证失败还是其他问题。
可以用这条命令实时追踪日志:
tail -f /var/log/pgpool/pgpool.log
比如如果日志里出现could not connect to server: Connection refused,那就是Pgpool连不上对应的PostgreSQL实例,得检查防火墙、端口是否开放,或者PostgreSQL的listen_addresses是否允许Pgpool访问。
4. 确认连接Pgpool的方式正确
别犯低级错误!你连接的应该是Pgpool的端口(默认是9999),而不是PostgreSQL的端口:
# 正确的Pgpool连接命令(替换成你的用户名和数据库) psql -h localhost -p 9999 -U your_user -d your_db
要是不小心直接连到PostgreSQL的端口,那如果那个实例真的没运行才会提示错误,但你说实例是好的,所以先确认连接端口是不是Pgpool的。
5. 检查Pgpool后端节点的状态
用Pgpool自带的命令查看后端数据库的状态:
pgpool -f /etc/pgpool-II/pgpool.conf status
如果输出里显示某个后端节点是down状态,那说明Pgpool没成功连上对应的PostgreSQL实例,得回头检查网络、端口或者PostgreSQL的认证配置(比如pg_hba.conf是否允许Pgpool所在的用户/IP连接)。
要是排查完这些还是解决不了,可以把Pgpool日志里的错误片段贴出来,咱们再精准定位!
内容的提问来源于stack exchange,提问作者Gurmokh

