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

Pgpool2报错unable to read message kind的原因排查求助

Pgpool 报错:unable to read message kind 问题排查

问题背景

本地虚拟机环境下Pgpool配置正常,但在VPS架构(1主库、1从库、1Pgpool节点)中重复配置后出现报错:

child pid 5286: ERROR: unable to read message kind
child pid 5286: DETAIL: kind does not match between main(53) slot[1] (4e)

PostgreSQL流复制功能正常,Pgpool节点可通过psql直接访问两台后端库,但Pgpool无法正常提供服务。核心Pgpool配置如下:

backend_clustering_mode = 'streaming_replication'

# 后端节点配置
backend_hostname0 = '{my-ip-1}'
backend_port0 = 5432
backend_weight0 = 0
backend_flag0 = 'DISALLOW_TO_FAILOVER'

backend_hostname1 = '{my-ip-2}'
backend_port1 = 5432
backend_weight1 = 1
backend_flag1 = 'DISALLOW_TO_FAILOVER'

# 基础连接配置
listen_addresses = '*'
port = 9999

报错原因及解决方法

该错误是Pgpool解析后端PostgreSQL响应时,发现消息类型不匹配导致的,核心排查方向如下:

1. 后端节点角色标识错误

在流复制模式下,Pgpool需要明确区分主从节点,但当前配置中两个节点都设置了DISALLOW_TO_FAILOVER,未指定主库:

  • 将主库的backend_flag0改为ALWAYS_PRIMARY,确保Pgpool将写请求路由到主库
  • 主库的backend_weight0不应设为0(0会排除负载均衡,但主库需要处理写操作,建议设为1)
  • 从库可保留DISALLOW_TO_FAILOVER或使用默认的ALLOW_TO_FAILOVER

2. Pgpool与PostgreSQL版本不兼容

不同版本间的PostgreSQL协议存在差异,可能导致消息解析失败:

  • 确认Pgpool版本与后端PostgreSQL版本的兼容性(例如Pgpool 4.x对应PostgreSQL 11及以上版本)
  • 若版本不匹配,升级或降级Pgpool至兼容版本

3. 连接池缓存残留脏数据

旧的连接池缓存可能保留了错误会话状态:

  • 停止Pgpool服务:pgpool stop
  • 清理Pgpool运行时临时文件(默认路径为/var/run/pgpool/)
  • 重新启动Pgpool:pgpool start

4. 网络数据包被篡改或拦截

VPS环境中的防火墙、NAT或代理可能修改PostgreSQL协议包:

  • 检查Pgpool节点到两个后端节点的5432端口是否完全开放,无中间设备拦截
  • 使用tcpdump抓包验证Pgpool与后端之间的协议包完整性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:23:14