PostgreSQL结合Keepalived实现漂移IP的高可用方案,核心是通过Keepalived的主备选举机制和健康检查能力,配合PostgreSQL主从复制,当主节点出现故障时自动将VIP切换到备节点,让业务无需修改连接配置即可继续访问数据库。

环境准备
本次示例准备两台服务器,系统均为CentOS 7,配置如下:
- 主节点:IP 192.168.0.10,安装PostgreSQL 14、Keepalived 2.2.7
- 备节点:IP 192.168.0.11,安装PostgreSQL 14、Keepalived 2.2.7
- 规划VIP:192.168.0.100,作为业务访问的数据库入口IP
PostgreSQL主从复制配置
主节点配置
首先修改主节点PostgreSQL配置文件postgresql.conf:
-- 开启wal日志 wal_level = replica -- 设置最大复制连接数 max_wal_senders = 10 -- 设置wal日志保留数量 wal_keep_size = 64
然后修改pg_hba.conf允许备节点复制连接:
host replication all 192.168.0.11/32 trust
重启主节点PostgreSQL服务,创建用于复制的用户:
CREATE USER replica REPLICATION LOGIN PASSWORD 'replica123';
备节点配置
停止备节点PostgreSQL服务,使用pg_basebackup同步主节点数据:
pg_basebackup -h 192.168.0.10 -U replica -D /var/lib/pgsql/14/data -P -v -R
同步完成后启动备节点PostgreSQL服务,查看复制状态确认主从同步正常。
Keepalived配置
主节点Keepalived配置
修改/etc/keepalived/keepalived.conf:
global_defs {
router_id pg_master
}
vrrp_script check_pg {
script "/etc/keepalived/check_pg.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.100/24
}
track_script {
check_pg
}
}
备节点Keepalived配置
备节点配置文件修改如下:
global_defs {
router_id pg_backup
}
vrrp_script check_pg {
script "/etc/keepalived/check_pg.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.100/24
}
track_script {
check_pg
}
}
健康检查脚本编写
在两台节点都创建/etc/keepalived/check_pg.sh脚本,用于检测PostgreSQL服务状态:
#!/bin/bash
# 检查PostgreSQL服务是否运行
pg_isready -h 127.0.0.1 -p 5432 -U postgres > /dev/null 2>&1
if [ $? -ne 0 ]; then
# 服务异常则停止keepalived,触发VIP漂移
systemctl stop keepalived
fi
给脚本添加执行权限:
chmod +x /etc/keepalived/check_pg.sh
方案验证
启动两台节点的Keepalived服务,主节点会优先获取VIP 192.168.0.100,此时业务可以通过该VIP连接PostgreSQL。手动停止主节点的PostgreSQL服务,健康检查脚本会触发Keepalived停止,VIP会自动漂移到备节点,业务连接不会中断。当主节点服务恢复后,可以手动启动Keepalived重新抢回VIP,或者根据需求调整优先级配置决定是否自动回切。
注意事项
- PostgreSQL主从复制建议配置同步复制或者半同步复制,避免数据丢失
- 健康检查脚本可以根据实际需求扩展,比如增加主从同步延迟检测逻辑
- 防火墙需要开放VRRP协议对应的112端口,以及PostgreSQL的5432端口
- 如果业务使用长连接,切换时可能需要处理连接断开重连的逻辑
PostgreSQLKeepalived漂移IP高可用VIP修改时间:2026-07-24 05:45:22