news 2026/8/9 11:52:09

为开源数据库集群配置VIP(虚拟IP)的2种方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
为开源数据库集群配置VIP(虚拟IP)的2种方案

为开源数据库集群配置VIP(虚拟IP),Patroni和repmgr确实是最主流的两种方案。它们提供了完整的HA解决方案,包括VIP管理。以下是基于这两个工具的详细配置方案:

一、Patroni + VIP 方案

Patroni内置VIP管理功能,通过REST API和回调脚本实现。

方案架构

Primary (Node1) : 192.168.1.10 + VIP 192.168.1.100 Replica (Node2) : 192.168.1.11 Replica (Node3) : 192.168.1.12

配置步骤

1. 安装依赖

# 所有节点安装sudoapt-getinstall-y patroni etcd-client python3-psycopg2

2. Patroni配置文件 (patroni.yml)

scope:pg_clustername:node1# 各节点分别改为node1、node2、node3restapi:listen:0.0.0.0:8008connect_address:192.168.1.10:8008# 各节点使用自己的IPetcd:hosts:["192.168.1.10:2379","192.168.1.11:2379","192.168.1.12:2379"]bootstrap:dcs:ttl:30loop_wait:10retry_timeout:10maximum_lag_on_failover:1048576postgresql:use_pg_rewind:trueparameters:max_connections:100shared_buffers:128MBinitdb:-encoding:UTF8-data-checksumspg_hba:-host replication replicator 192.168.1.0/24 md5-host all all 0.0.0.0/0 md5postgresql:listen:0.0.0.0:5432connect_address:192.168.1.10:5432# 各节点使用自己的IPdata_dir:/var/lib/postgresql/14/mainpgpass:/tmp/pgpassauthentication:replication:username:replicatorpassword:rep_passwordsuperuser:username:postgrespassword:postgres_passwordparameters:logging_collector:true# VIP配置 - 关键部分tags:vip:192.168.1.100/24vip_interface:eth0vip_skip_check:falsenofailover:false

3. VIP管理脚本 (/etc/patroni/vip_manager.sh)

#!/bin/bashVIP=$1INTERFACE=$2ACTION=$3case$ACTIONinon_start)# 当成为主节点时添加VIPipaddradd$VIPdev$INTERFACE;;on_stop)# 当不再是主节点时移除VIPipaddr del$VIPdev$INTERFACE;;on_role_change)# 角色变更时的处理NEW_ROLE=$4if["$NEW_ROLE"="master"];thenipaddradd$VIPdev$INTERFACE2>/dev/null||trueelseipaddr del$VIPdev$INTERFACE2>/dev/null||truefi;;esac

4. 配置systemd服务

# /etc/systemd/system/patroni.service[Unit]Description=Runners to orchestrate a high-availability PostgreSQLAfter=syslog.target network.target[Service]Type=simpleUser=postgresGroup=postgresExecStart=/usr/bin/patroni /etc/patroni/patroni.ymlKillMode=processTimeoutSec=30Restart=no[Install]WantedBy=multi-user.target

5. 启动集群

sudosystemctl daemon-reload# 从第一个节点开始启动sudosystemctl start patroni

二、repmgr + Keepalived 方案

repmgr本身不直接管理VIP,通常与Keepalived结合使用。

方案架构

Primary + Keepalived MASTER : 192.168.1.10 + VIP 192.168.1.100 Replica + Keepalived BACKUP : 192.168.1.11

配置步骤

1. 安装软件包

# 所有节点安装sudoapt-getinstall-y postgresql-14 repmgrd keepalived

2. 配置repmgr (主节点)

# /etc/repmgr.confnode_id=1node_name=node1conninfo='host=192.168.1.10 user=repmgr dbname=repmgr connect_timeout=2'data_directory='/var/lib/postgresql/14/main'log_level=INFOlog_file='/var/log/postgresql/repmgr.log'failover=automaticpromote_command='repmgr standby promote -f /etc/repmgr.conf'follow_command='repmgr standby follow -f /etc/repmgr.conf'# 监控设置monitor_interval_secs=10monitor_history_minutes=90

3. 配置repmgrd服务

# /etc/default/repmgrdREPMGRD_ENABLED=yesREPMGRD_CONF="/etc/repmgr.conf"REPMGRD_OPTS="--daemonize=false"

4. 配置Keepalived (主节点配置)

# /etc/keepalived/keepalived.confglobal_defs{router_id pg_cluster}vrrp_script chk_pg_master{script"/usr/bin/pg_isready -h 192.168.1.10 -p 5432"interval2fall2rise2}vrrp_instance VI_1{state MASTER interface eth0 virtual_router_id51priority100advert_int1authentication{auth_type PASS auth_pass postgres}virtual_ipaddress{192.168.1.100/24 dev eth0}track_script{chk_pg_master}# 当状态变更时执行脚本notify_master"/etc/keepalived/notify_master.sh"notify_backup"/etc/keepalived/notify_backup.sh"notify_fault"/etc/keepalived/notify_fault.sh"}

5. Keepalived状态变更脚本

# /etc/keepalived/notify_master.sh#!/bin/bash# 成为主节点时的处理LOGFILE="/var/log/keepalived/state.log"echo"`date`Becoming MASTER">>$LOGFILE# 可以在这里触发repmgr的强制切换# sudo -u postgres repmgr standby promote -f /etc/repmgr.conf

6. 从节点Keepalived配置

# /etc/keepalived/keepalived.conf (从节点)global_defs{router_id pg_cluster_node2}vrrp_instance VI_1{state BACKUP interface eth0 virtual_router_id51priority90# 优先级低于主节点advert_int1authentication{auth_type PASS auth_pass postgres}virtual_ipaddress{192.168.1.100/24 dev eth0}track_script{chk_pg_master}}

三、两种方案对比与选择建议

特性Patroni方案repmgr+Keepalived方案
VIP管理内置支持,简单配置需配合Keepalived
架构复杂度较低,一体化方案较高,多组件配合
学习曲线中等,需理解DCS概念较高,需掌握多个工具
功能完整性完整HA方案需要额外组件
社区支持非常活跃稳定但相对传统
适用场景新部署,云环境传统部署,已有经验

推荐选择:

  1. 选择Patroni如果

    • 新项目或重新部署
    • 希望更现代化的方案
    • 需要与云原生工具集成
    • 希望减少运维复杂度
  2. 选择repmgr+Keepalived如果

    • 已有repmgr使用经验
    • 需要与传统运维体系集成
    • 对Keepalived有深入理解
    • 需要更细粒度的控制

最佳实践建议:

  • 生产环境建议使用Patroni,它提供了更完整和现代的HA解决方案
  • 无论选择哪种方案,都要确保有完善的监控和告警
  • 定期进行故障转移测试
  • VIP应该配合DNS使用,应用层使用域名连接数据库

两种方案都是经过大量生产验证的可靠方案,具体选择可以根据团队的技术栈和运维经验来决定。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 4:30:29

Open-AutoGLM数据安全真相曝光:5个你必须立即检查的配置项

第一章:Open-AutoGLM有没有数据安全问题Open-AutoGLM 作为一款开源的自动化大语言模型工具,在提升开发效率的同时,其数据安全问题也受到广泛关注。由于其设计目标是支持本地部署与远程调用,数据在传输、处理和存储过程中可能存在潜…

作者头像 李华
网站建设 2026/8/9 3:55:28

python选课系统

目录已开发项目效果实现截图开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!已开发项目效果实现截图 同行可拿货,招校园代理 python选课系统 开发技术路线 开发语言:Pyt…

作者头像 李华
网站建设 2026/7/31 2:51:35

python校园资料在线分享网站

目录已开发项目效果实现截图开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!已开发项目效果实现截图 同行可拿货,招校园代理 python校园资料在线分享网站 开发技术路线 开发语言&am…

作者头像 李华
网站建设 2026/8/1 11:16:00

得物Java面试被问:Fork/Join框架的使用场景

一、核心特性与适用原则 1. 适用场景特征 java 复制 下载 // 适合Fork/Join的任务必须满足: 1. 可递归分解:任务可以不断拆分成更小的子任务 2. 子任务独立性:任务之间没有依赖或依赖很少 3. 结果可合并:子任务结果能够合并成最…

作者头像 李华
网站建设 2026/7/31 3:02:39

Java 小白面试记:从Spring Boot到大数据处理

文章内容 场景: 在一家知名的互联网大厂,Java小白程序员超好吃正在接受面试。面试官以严肃的态度开始了提问。 第一轮提问:Web框架与微服务 面试官:请你谈谈在Spring Boot中如何实现一个简单的RESTful API? 超好吃&…

作者头像 李华
网站建设 2026/7/31 1:21:33

**手机写小说软件哪家靠谱2025推荐,适配不同创作场景的实

手机写小说软件哪家靠谱2025推荐,适配不同创作场景的实战指南在2025年,移动端创作已成为内容创作者的常态。据《2025中国网络文学发展报告》显示,超过68%的网文作者会使用手机进行碎片化创作或灵感记录,但其中52%的用户面临工具功…

作者头像 李华