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

使用pcp_recovery_node配置PostgreSQL 14备节点时数据丢失且命令挂起

问题排查与解决建议

核心问题定位方向

  1. PCP命令认证与通信阻塞
    • pcp_recovery_node挂起大概率是节点间PCP通信出现认证阻塞,主节点持续打印“Password:.”说明其在反复发起认证请求,但备节点或VIP路由的认证流程异常。
    • 检查pgpool.conf中pcp_socket_dir的权限,确保postgres用户可读写;同时确认pcp.conf内的密码哈希正确(需用pg_md5生成,格式为username:md5hash),且所有节点的pcp.conf内容一致。
  2. 备节点$PGDATA丢失根源
    • pcp_recovery_node会触发备节点的基础备份恢复流程,若备份拉取过程中断,可能导致原有$PGDATA被清理后新数据未写入,最终全部丢失。
    • 检查备节点pg_hba.conf,确认主节点到备节点的复制连接(replication用户)是否允许正确认证;查看备节点postgresql日志(pg_log目录),恢复过程的报错会被记录在此。
  3. VIP路由异常
    • 执行PCP命令时指定了VIP(-h vip-p),若VIP的ARP缓存异常,可能导致PCP请求路由错误,引发通信阻塞。尝试直接用备节点真实IP执行pcp_recovery_node,观察是否仍挂起。

分步排查操作

  • 检查PCP配置正确性
    在所有节点执行:
    cat /etc/pgpool-II/pcp.conf | grep postgres
    
    确保密码哈希是pg_md5 'yourpassword'生成的正确值,且各节点配置一致。
  • 查看备节点恢复日志
    进入备节点$PGDATA/pg_log目录,查看最新日志文件,搜索recovery、backup关键词,定位是否有备份拉取失败、权限不足等报错。
  • 验证节点间复制连接
    在主节点执行:
    psql -h <备节点真实IP> -U <复制用户> -d postgres -c "select 1"
    
    若需输入密码或连接失败,说明pg_hba.conf或复制用户配置存在问题,调整后再测试。
  • 绕过VIP执行PCP命令
    直接指定备节点真实IP执行:
    pcp_recovery_node -h <备节点真实IP> -p 9898 -U postgres -n 2
    
    若命令正常执行,说明VIP网络路由存在问题,需检查集群VIP绑定脚本或网络配置。

临时恢复备节点方法

若备节点$PGDATA已丢失,可手动触发基础备份恢复:

  1. 在备节点创建空的$PGDATA目录并设置权限:
    mkdir -p /var/lib/postgresql/14/main
    chown -R postgres:postgres /var/lib/postgresql/14/main
    
  2. 切换至postgres用户,拉取主节点基础备份:
    su - postgres
    pg_basebackup -h <主节点IP> -U <复制用户> -D /var/lib/postgresql/14/main -P -X stream
    
  3. 配置备节点参数:
    echo "primary_conninfo = 'host=<主节点IP> port=5432 user=<复制用户> password=<密码>'" >> /var/lib/postgresql/14/main/postgresql.conf
    echo "standby_mode = 'on'" >> /var/lib/postgresql/14/main/postgresql.conf
    
  4. 启动备节点:
    pg_ctl start -D /var/lib/postgresql/14/main
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 09:07:17