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

PgBouncer跨主机连接报错:Peer认证失败问题求助

问题排查与解决

你遇到的跨主机连接失败,核心原因是PgBouncer与PostgreSQL之间的连接触发了Peer认证,但未通过。本地连接正常是因为此时PgBouncer连接PostgreSQL的方式/用户刚好符合现有规则,而远程连接时不满足。

具体原因分析

  • 本地连接时,PgBouncer通过Unix socket连接PostgreSQL,匹配你配置的local all all trust规则,直接信任通过。
  • 远程客户端连接时,PgBouncer连接PostgreSQL的请求大概率匹配了pg_hba.conf中优先级更高的peer认证规则(比如默认的local all all peer),而PgBouncer运行的操作系统用户与数据库用户someuser不一致,导致Peer认证失败。

解决步骤

1. 调整pg_hba.conf规则顺序

确保local all all trust规则放在所有local类型规则的最前面,让PostgreSQL优先采用信任认证:

# 把这条规则放在pg_hba.conf的最顶部
local all all trust

# 其他原有规则放在后面,比如:
# local   all             postgres                                peer
# local   all             all                                     peer
# host    all             all             127.0.0.1/32            scram-sha-256

2. 强制PgBouncer使用Unix socket连接PostgreSQL

修改pgbouncer.ini的databases段,明确指定Unix socket目录,确保连接走local规则:

[databases]
someuser = dbname=someuser host=/var/run/postgresql auth_user=someuser

(/var/run/postgresql是你的unix_socket_dir,和pgbouncer.ini中配置一致)

3. 重新加载配置

  • 重新加载PostgreSQL配置:
    pg_ctl reload -D /path/to/postgresql/data
    
    或用系统服务命令:
    systemctl reload postgresql
    
  • 重启PgBouncer生效:
    pgbouncer -d /path/to/pgbouncer.ini
    
    或:
    systemctl restart pgbouncer
    

4. 验证连接

从远程主机测试连接:

psql -h <pgbouncer_host> -p 6432 -U someuser someuser

如果成功连接,说明问题解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:36:17