PostgreSQL配合Keepalived通过VIP实现高可用,主库故障时备库自动接管。基于流复制同步数据,Keepalived用VRRP管理虚拟IP,结合健康检查脚本检测数据库状态,主节点异常时优先级降低,备节点升主并绑定VIP,应用通过VIP无缝连接新主库。需配置SSH免密、规划VIP、设置监控脚本,并注意脑裂防范与网络通信。方案简单高效,适用于中小规模系统。

PostgreSQL 配合 Keepalived 实现漂移 IP(VIP)是一种常见高可用方案,主要用于主备架构下避免单点故障。当主库宕机时,虚拟 IP 自动漂移到备库,应用无需修改连接地址即可继续访问数据库。
该方案依赖于以下组件协同工作:
正常情况下,VIP 绑定在主库所在主机上。一旦主库或数据库进程异常,Keepalived 检测失败,优先级降低,备库提升为 MASTER 并接管 VIP。
实施前需确保以下配置已完成:
以两节点为例,主节点(priority 100),备节点(priority 90)。
主节点 /etc/keepalived/keepalived.conf:
vrrp_script chk_pg { script "/usr/local/bin/check_postgres.sh" interval 2 weight 2 }vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass yourpass } virtual_ipaddress { 192.168.1.100/24 } track_script { chk_pg } }
备节点配置:
vrrp_script chk_pg { script "/usr/local/bin/check_postgres.sh" interval 2 weight 2 }vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass yourpass } virtual_ipaddress { 192.168.1.100/24 } track_script { chk_pg } }
该脚本用于判断本地 PostgreSQL 是否正常运行,是否为主库角色。
#!/bin/bash # 检查 PostgreSQL 是否运行且为 primaryPGDATA=/data/postgresql/data LOGFILE=/var/log/keepalived/pg_check.log
if pg_ctl -D "$PGDATA" status > /dev/null 2>&1; then ROLE=$(psql -U postgres -Atc "SELECT pg_is_in_recovery();" 2>/dev/null) if [ "$ROLE" = "f" ]; then exit 0 # 是主库,健康 else exit 1 # 是备库,不参与主角色竞争 fi else exit 1 # PG 未运行 fi
赋予执行权限:
chmod +x /usr/local/bin/check_postgres.sh
注意:实际环境中建议加入更严格的判断,例如端口监听、复制延迟等。
建议在备库的 keepalived 脚本中集成自动 promote 操作,或使用 repmgr 等工具辅助。
基本上就这些。这套方案简单有效,适合中小规模系统快速实现 PostgreSQL 高可用。关键是脚本要写稳,检测准确,避免误切。
以上就是postgresqlkeepalived如何实现漂移ip_postgresqlvip方案的详细内容,更多请关注php中文网其它相关文章!
Keep是一款健身安排,无论是想减肥塑形或增肌,还是寻找健身跑步瑜伽计步等训练计划,你可以随时随地选择课程进行训练!权威教练视频教学,健身干货自由分享!有需要的小伙伴快来保存下载体验吧!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号