You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Patroni集群中vip-manager无法启用虚拟IP的问题求助

问题描述

安装vip-manager用于管理PostgreSQL Patroni集群的可迁移虚拟IP,但vip-manager无法启用虚拟IP地址。

环境信息

  • RHEL 9.3
  • etcd版本:3.4.31
  • patroni版本:3.0.4
  • vip-manager版本:2.3.0

vip-manager配置

interval: 1000
trigger-key: "/pg_cluster/postgres/leader"
trigger-value: "sp-smaxpsql1"
ip: 10.164.20.180 # the virtual ip address to manage
netmask: 24 # netmask for the virtual ip
interface: ens33 #interface to which the virtual ip will be added
hosting-type: basic # possible values: basic, or hetzner.
dcs-type: etcd # etcd or consul
dcs-endpoints:
  - http://10.164.20.177:2379
  - http://10.164.20.178:2379
  - http://10.164.20.179:2379
retry-num: 2
retry-after: 250  #in milliseconds
verbose: true

etcd配置

ETCD_LISTEN_PEER_URLS="http://10.164.20.177:2380"
ETCD_LISTEN_CLIENT_URLS="http://10.164.20.177:2379,http://localhost:2379"
ETCD_NAME="sp-smaxpsql1"
[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.164.20.177:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://10.164.20.177:2379"
ETCD_INITIAL_CLUSTER="sp-smaxpsql1=http://10.164.20.177:2380,sp-smaxpsql2=http://10.164.20.178:2380,sp-smaxpsql3=http://10.164.20.179:2380"
ETCD_INITIAL_CLUSTER_TOKEN="postgresql-etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_DATA_DIR="/var/lib/etcd"

Patroni配置

scope: postgres
namespace: /pg_cluster/
name: sp-smaxpsql1
restapi:
  listen: sp-smaxpsql1:8008
  connect_address: sp-smaxpsql1:8008
etcd:
  hosts: 10.164.20.177:2379, 10.164.20.178:2379, 10.164.20.179:2379
bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
    maximum_lag_on_failover: 1048576
    maximum_lag_on_syncnode: 15000000
    synchronous_mode: false
    postgresql:
      use_pg_rewind: true
      use_slots: true
      parameters:
        shared_buffers: 8GB
        work_mem: 13981kB
        maintenance_work_mem: 2GB
        max_worker_processes: 16
        wal_buffers: 64MB
        max_wal_size: 2GB
        min_wal_size: 8GB
        effective_cache_size: 24GB
        fsync: on
        checkpoint_completion_target: 0.9
        log_rotation_size: 100MB
        listen_addresses: "*"
        max_connections: 2000
        temp_buffers: 4MB
        default_statistics_target: 100
        random_page_cost: 1.1
        effective_io_concurrency: 200
        ssl: true
        ssl_cert_file: /var/lib/pgsql/12/data/server.crt
        ssl_key_file: /var/lib/pgsql/12/data/server.key
  initdb:
    - encoding: UTF8
    - data-checksums
  pg_hba:
    - host replication replicator 127.0.0.1/32 md5
    - host replication replicator 10.164.20.177/32 md5
    - host replication replicator 10.164.20.178/32 md5
    - host replication replicator 10.164.20.179/32 md5
    - host all all 0.0.0.0/0 md5
users:
  admin:
    password: admin
    options:
      - createrole
      - createdb

postgresql:
  listen: sp-smaxpsql1:5432
  connect_address: sp-smaxpsql1:5432
  data_dir: /var/lib/pgsql/12/data
  bin_dir: /usr/pgsql-12/bin
  pgpass: /tmp/pgpass
  authentication:
    replication:
      username: replicator
      password: <*********>
    superuser:
      username: postgres
      password: <*********>
    rewind:
      username: pgrewind
      password: <*********>
tags:
  nofailover: false
  noloadbalance: false
  clonefrom: false
  nosync: true

主节点vip-manager日志

Mar 27 15:24:26 sp-smaxpsql1 vip-manager[68389]: 2024/03/27 15:24:26 IP address 10.164.20.180/24 state is false, desired false
Mar 27 15:24:36 sp-smaxpsql1 vip-manager[68389]: 2024/03/27 15:24:36 IP address 10.164.20.180/24 state is false, desired false
Mar 27 15:24:46 sp-smaxpsql1 vip-manager[68389]: 2024/03/27 15:24:46 IP address 10.164.20.180/24 state is false, desired false
Mar 27 15:24:56 sp-smaxpsql1 vip-manager[68389]: 2024/03/27 15:24:56 IP address 10.164.20.180/24 state is false, desired false
Mar 27 15:25:06 sp-smaxpsql1 vip-manager[68389]: 2024/03/27 15:25:06 IP address 10.164.20.180/24 state is false, desired false
Mar 27 15:25:16 sp-smaxpsql1 vip-manager[68389]: 2024/03/27 15:25:16 IP address 10.164.20.180/24 state is false, desired false
Mar 27 15:25:26 sp-smaxpsql1 vip-manager[68389]: 2024/03/27 15:25:26 IP address 10.164.20.180/24 state is false, desired false
Mar 27 15:25:36 sp-smaxpsql1 vip-manager[68389]: 2024/03/27 15:25:36 IP address 10.164.20.180/24 state is false, desired false
Mar 27 15:25:46 sp-smaxpsql1 vip-manager[68389]: 2024/03/27 15:25:46 IP address 10.164.20.180/24 state is false, desired false

解决方案

从日志看,vip-manager认为当前节点不需要启用VIP(desired false),核心原因是etcd中trigger-key对应的值和trigger-value不匹配,或者vip-manager无法正确读取etcd中的键值。按以下步骤排查:

  1. 验证etcd中的leader键值
    在任意节点执行etcdctl命令查看/pg_cluster/postgres/leader的值:
ETCDCTL_API=3 etcdctl --endpoints=http://10.164.20.177:2379,http://10.164.20.178:2379,http://10.164.20.179:2379 get /pg_cluster/postgres/leader

如果返回的值不是sp-smaxpsql1,说明当前主节点不是sp-smaxpsql1,或者Patroni没有正确更新etcd中的leader键。先确认Patroni集群的主节点状态:

patronictl -c /path/to/patroni.yml list

确保sp-smaxpsql1显示为Leader。

  1. 修正vip-manager的trigger配置
  • 如果etcd中leader键的值是节点的IP而非主机名,把vip-manager的trigger-value改成对应IP(比如10.164.20.177)
  • 检查trigger-key路径是否和Patroni配置一致:Patroni的namespace是/pg_cluster/,scope是postgres,所以leader键的正确路径应该是/pg_cluster/postgres/leader,当前配置是对的,但要确认etcd中确实存在这个键。
  1. 检查vip-manager的权限
    vip-manager需要root权限才能添加/删除虚拟IP,确保服务是以root身份运行:
ps aux | grep vip-manager

如果不是root,修改systemd服务配置(通常在/etc/systemd/system/vip-manager.service),添加User=root,然后重启服务:

systemctl daemon-reload
systemctl restart vip-manager
  1. 手动测试添加VIP
    在主节点手动执行添加VIP的命令,验证网络接口和IP是否可用:
ip addr add 10.164.20.180/24 dev ens33

执行后用ip addr show ens33检查是否添加成功,如果失败,可能是IP已被占用,或者网络接口名称错误(比如实际接口是ens3而非ens33,用ip link确认)。

  1. 验证vip-manager与etcd的连接
    在vip-manager所在节点测试etcd连接:
ETCDCTL_API=3 etcdctl --endpoints=http://10.164.20.177:2379 endpoint health

如果连接失败,检查etcd服务是否运行,防火墙是否开放2379端口,或者etcd配置是否限制了客户端连接。

  1. 重启vip-manager服务
    修改配置后,重启vip-manager并查看日志:
systemctl restart vip-manager
journalctl -u vip-manager -f

观察日志中是否出现desired true的记录,此时VIP应该会被自动添加。


内容的提问来源于stack exchange,提问作者Murat Suluhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:28:10