在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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




