Pgpool-II PostgreSQL 代理教程

Pgpool-II 是一款功能强大的 PostgreSQL 中间件,提供连接池管理、读写分离、负载均衡、查询缓存和自动故障转移等功能。在搬瓦工 VPS 上部署 Pgpool-II 可以显著提升 PostgreSQL 数据库的连接效率和查询性能。本文将详细介绍 Pgpool-II 的安装配置和各项核心功能。

一、安装 Pgpool-II

# Ubuntu/Debian
apt update
apt install pgpool2 -y

# 安装管理工具
apt install postgresql-client -y

# 验证安装
pgpool --version

# 查看配置文件位置
dpkg -L pgpool2 | grep conf

二、连接池配置

连接池是 Pgpool-II 最基础也最常用的功能,它复用数据库连接以减少连接建立的开销。

# 编辑主配置文件
cp /etc/pgpool2/pgpool.conf /etc/pgpool2/pgpool.conf.bak

cat > /etc/pgpool2/pgpool.conf <<'EOF'
# 监听设置
listen_addresses = '*'
port = 9999
socket_dir = '/var/run/pgpool'

# 后端 PostgreSQL 服务器
backend_hostname0 = '127.0.0.1'
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = '/var/lib/postgresql/15/main'
backend_flag0 = 'ALLOW_TO_FAILOVER'

# 连接池参数
connection_cache = on
num_init_children = 32
max_pool = 4
child_life_time = 300
child_max_connections = 0
connection_life_time = 0
client_idle_limit = 0

# 认证
enable_pool_hba = on
pool_passwd = 'pool_passwd'

# 日志
log_destination = 'syslog'
log_connections = on
log_disconnections = on
log_hostname = on
log_statement = off
log_per_node_statement = off
EOF

三、认证配置

# 创建认证文件
cat > /etc/pgpool2/pool_hba.conf <<'EOF'
# TYPE  DATABASE  USER  ADDRESS      METHOD
local   all       all                md5
host    all       all   0.0.0.0/0    md5
host    all       all   ::0/0        md5
EOF

# 生成密码文件
pg_md5 --md5auth --username=postgres yourpassword
# 将输出写入 pool_passwd 文件

# 或使用 pg_md5 命令生成
pg_md5 -p -m -u postgres pool_passwd

四、读写分离与负载均衡

# 在 pgpool.conf 中添加读写分离配置
cat >> /etc/pgpool2/pgpool.conf <<'EOF'

# 负载均衡(读写分离)
load_balance_mode = on
master_slave_mode = on
master_slave_sub_mode = 'stream'

# 从节点(假设已配置 PostgreSQL 流复制)
backend_hostname1 = '127.0.0.1'
backend_port1 = 5433
backend_weight1 = 1
backend_data_directory1 = '/var/lib/postgresql/15/replica'
backend_flag1 = 'ALLOW_TO_FAILOVER'

# 负载均衡策略
# 权重比 1:1 表示读请求均匀分配
# 写请求只发送到主节点

# 强制发送到主节点的函数/查询
black_function_list = 'nextval,setval,currval'
EOF

五、查询缓存

# 启用内存查询缓存
cat >> /etc/pgpool2/pgpool.conf <<'EOF'

# 查询缓存
memory_cache_enabled = on
memqcache_method = 'shmem'
memqcache_memcached_host = ''
memqcache_memcached_port = 0
memqcache_total_size = 67108864
memqcache_max_num_cache = 1000000
memqcache_expire = 0
memqcache_auto_cache_invalidation = on
memqcache_maxcache = 409600

# 不缓存的表(经常更新的表)
# white_memqcache_table_list = ''
# black_memqcache_table_list = 'sessions,logs'
EOF

六、健康检查与故障转移

# 健康检查配置
cat >> /etc/pgpool2/pgpool.conf <<'EOF'

# 健康检查
health_check_period = 10
health_check_timeout = 20
health_check_user = 'postgres'
health_check_password = 'yourpassword'
health_check_database = 'postgres'
health_check_max_retries = 3
health_check_retry_delay = 1

# 故障转移
failover_command = '/etc/pgpool2/failover.sh %d %h %p %D %m %H %M %P %r %R'
failover_on_backend_error = on
EOF

# 创建故障转移脚本
cat > /etc/pgpool2/failover.sh <<'SCRIPT'
#!/bin/bash
FAILED_NODE_ID=$1
FAILED_HOST=$2
NEW_MASTER_ID=$5
NEW_MASTER_HOST=$6

echo "Node $FAILED_NODE_ID ($FAILED_HOST) failed."
echo "New master: Node $NEW_MASTER_ID ($NEW_MASTER_HOST)"

# 提升从节点为主节点
if [ "$FAILED_NODE_ID" = "0" ]; then
    ssh -T "$NEW_MASTER_HOST" "pg_ctl promote -D /var/lib/postgresql/15/replica"
fi
SCRIPT
chmod +x /etc/pgpool2/failover.sh

七、启动与管理

# 启动 Pgpool-II
systemctl start pgpool2
systemctl enable pgpool2

# 查看状态
systemctl status pgpool2

# 连接到 Pgpool-II
psql -h 127.0.0.1 -p 9999 -U postgres -d mydb

# 查看节点状态
psql -h 127.0.0.1 -p 9999 -U postgres -c "SHOW pool_nodes"

# 查看连接池状态
psql -h 127.0.0.1 -p 9999 -U postgres -c "SHOW pool_pools"

# PCP 管理命令
pcp_node_count -h 127.0.0.1 -p 9898 -U pgpool
pcp_node_info -h 127.0.0.1 -p 9898 -U pgpool 0
pcp_pool_status -h 127.0.0.1 -p 9898 -U pgpool

八、性能调优

# 根据 VPS 配置调整连接数
# 1GB 内存 VPS 推荐:
num_init_children = 32
max_pool = 4
# 最大连接数 = num_init_children * max_pool = 128

# 2GB 内存 VPS 推荐:
num_init_children = 64
max_pool = 4
# 最大连接数 = 256

# 连接超时优化
connection_life_time = 600
client_idle_limit = 300

总结

Pgpool-II 为 PostgreSQL 提供了全面的连接管理和高可用方案。连接池功能即使在单节点场景下也能显著提升性能。对于 MySQL 数据库,可以参考 ProxySQL MySQL 代理。Redis 代理方案请参考 Twemproxy 教程。选购搬瓦工 VPS 请查看 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,通过 bwh81.net 访问官网。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。