暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

用 vip-manager 控制 pg patroni 架构中 vip 的漂移

原创 黄山谷 2025-07-01
335

在PostgreSQL的高可用架构中,​vip-manager是一个关键组件,用于管理虚拟IP(VIP)的自动漂移,确保客户端能够无感知地访问主节点。

vip-manager是一个轻量级的Go语言工具,由Cybertec PostgreSQL团队维护,主要用于根据分布式键值存储(如etcd或Consul)中的集群状态信息,动态绑定或释放虚拟IP地址。

可以实现 pg ​自动故障转移​:当Patroni集群发生主备切换时,vip-manager会检测到Leader变更,并将VIP绑定到新的主节点

下载地址:
https://github.com/cybertec-postgresql/vip-manager/releases

下载 tar 包,解压即可用

/usr/local/vip-manager_2.3.0_Linux_x86_64
[root@node001 vip-manager_2.3.0_Linux_x86_64]# ll
total 15548
-rw-r--r-- 1 1001  127     1345 Jan 19  2024 LICENSE
-rw------- 1 root root   617924 Jul  1 18:13 nohup.out
-rw-r--r-- 1 1001  127    11024 Jan 19  2024 README.md
-rwxr-xr-x 1 1001  127 15282176 Jan 19  2024 vip-manager
-rw-r--r-- 1 1001  127      298 Jul  1 16:31 vip-manager.yml

修改参数文件,每台都要配置

vim vip-manager.yml

ip: 192.168.2.249   # vip
netmask: 24
interface: ens33   # 网卡名
hosting-type: basic
dcs-type: etcd
dcs-endpoints:
  - http://192.168.2.91:2379
  - http://192.168.2.92:2379
  - http://192.168.2.93:2379
scope: cndb-cluster    # 跟patroni的配置相同
trigger-key: /service/cndb/leader # 跟patroni的配置相同
trigger-value: node001  # 节点名称 # 跟patroni的配置相同
retry-num: 2
retry-after: 250
verbose: false

启动

nohup /usr/local/vip-manager_2.3.0_Linux_x86_64/vip-manager --config vip-manager.yml &

可以看到日志:

tail -200f /usr/local/vip-manager_2.3.0_Linux_x86_64/nohup.out

2025/07/01 17:37:55 Using config from file: vip-manager.yml
2025/07/01 17:37:55 This is the config that will be used:
        config : vip-manager.yml
        dcs-endpoints : [http://192.168.2.91:2379 http://192.168.2.92:2379 http://192.168.2.93:2379]
        dcs-type : etcd
        hosting-type : basic
        hostingtype : basic
        interface : ens33
        interval : 1000
        ip : 192.168.2.249
        manager-type : basic
        netmask : 24
        retry-after : 250
        retry-num : 2
        scope : cndb
        trigger-key : /service/cndb/leader
        trigger-value : node001
        verbose : false
        version : false
2025/07/01 17:37:55 IP address 192.168.2.249/24 state is false, desired false
2025/07/01 17:37:55 set WATCH on /service/cndb/leader
2025/07/01 17:37:55 Current Leader from DCS: node002
2025/07/01 17:38:05 IP address 192.168.2.249/24 state is false, desired false
2025/07/01 17:38:15 IP address 192.168.2.249/24 state is false, desired false
2025/07/01 17:38:25 IP address 192.168.2.249/24 state is false, desired false

当 patroni 机器中发生切换时,可以看到 vip 切换到了leader 节点。

我遇到的问题:
1、patroni.yml 配置 建议用 etcd3 ,否则可能由于patroni 和 etcd 的版本不匹配导致,接口协议问题,导致vip-manager获取不到leader节点,无法注册vip。

etcd3:
  hosts: 192.168.2.91:2379,192.168.2.92:2379,192.168.2.93:2379

etcd 需要获取到主节点的值,确保patroni把这个信息 确实写入了 etcd

ETCDCTL_API=3 etcdctl --endpoints="http://192.168.2.91:2379,http://192.168.2.92:2379,http://192.168.2.93:2379" get /service/cndb/leader


2、一下几个配置要与 patroni 配置文件一致

scope: cndb
namespace: /service/
leader_key: /service/cndb/leader

最后修改时间:2025-07-02 10:14:47
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论