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

如何在Pgpool中自动将故障主节点恢复为备节点?

Pgpool双节点故障恢复后主节点自动转备的配置步骤

一、配置pgpool.conf核心参数

编辑pgpool.conf,根据实际环境调整以下关键参数:

  • 启用主从模式:
    master_slave_mode = on
    master_slave_sub_mode = stream
    
  • 配置恢复用户及脚本路径:
    recovery_user = 'recovery'  # 需提前在PostgreSQL中创建该用户
    recovery_password = 'recovery_pass'  # 推荐用.pgpass免密替代明文密码
    recovery_1st_stage_command = '/etc/pgpool/recovery_1st_stage'  # 自定义恢复脚本路径
    
  • 确保故障转移命令能记录当前主节点信息(方便恢复脚本读取):
    failover_command = '/etc/pgpool/failover_script %d %h %p %D %m %H %M %P'
    

二、编写第一阶段恢复脚本(recovery_1st_stage)

创建脚本文件/etc/pgpool/recovery_1st_stage,执行chmod +x /etc/pgpool/recovery_1st_stage赋予权限,脚本示例如下(需替换为你的环境路径、服务名等):

#!/bin/bash

# 停止恢复节点的PostgreSQL服务
systemctl stop postgresql-14

# 备份并清空旧数据目录
mv /var/lib/pgsql/14/data /var/lib/pgsql/14/data_backup_$(date +%Y%m%d%H%M)
mkdir -p /var/lib/pgsql/14/data

# 读取故障转移后记录的当前主节点地址(需在failover脚本中实现写入逻辑)
MASTER_HOST=$(cat /var/lib/pgpool/current_master)

# 从当前主节点拉取基础备份
pg_basebackup -h $MASTER_HOST -U recovery -p 5432 -D /var/lib/pgsql/14/data -Fp -Xs -P

# 配置备节点参数
cat >> /var/lib/pgsql/14/data/postgresql.conf << EOF
hot_standby = on
primary_conninfo = 'host=$MASTER_HOST port=5432 user=recovery password=recovery_pass'
EOF

# 创建standby标记文件
touch /var/lib/pgsql/14/data/standby.signal

# 修复数据目录权限
chown -R postgres:postgres /var/lib/pgsql/14/data

# 启动PostgreSQL服务
systemctl start postgresql-14

# 通知Pgpool节点已恢复
pcp_attach_node -h localhost -U pgpool -p 9898 -n 0  # 0为恢复节点的序号,按需修改

三、配置权限与免密登录

  1. 创建PostgreSQL恢复用户:
    在主节点执行SQL:
CREATE USER recovery WITH REPLICATION LOGIN PASSWORD 'recovery_pass';
  1. 配置pg_hba.conf:
    在主备节点的pg_hba.conf中添加连接规则:
host    replication     recovery     <pgpool_ip>/32      scram-sha-256
host    all             pgpool       <pgpool_ip>/32      scram-sha-256

重启PostgreSQL使配置生效。
3. 配置.pgpass免密:
在Pgpool运行用户(如pgpool)的家目录创建.pgpass文件:

*:5432:*:recovery:recovery_pass
*:9898:*:pgpool:pgpool_pass

设置权限:chmod 600 ~/.pgpass

四、测试验证

  1. 手动停止原主节点的PostgreSQL服务,查看Pgpool日志确认备节点成功升为主节点。
  2. 启动原主节点服务,验证恢复流程:
    • 执行psql -h <原主节点IP> -U postgres -c "SELECT pg_is_in_recovery();",返回true则说明已转为备节点。
    • 用pcp_node_info -h localhost -U pgpool -p 9898查看节点状态,确认原主节点状态为up且角色为standby。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:03:17