ipvsadm 配置后 vip 无 ARP 响应或漂移失败的 keepalived 配合

17次阅读

VIP 无法响应 ARP 或频繁漂移的根源在于 ARP 参数配置错误、Keepalived 状态异常、IPVS 规则未同步及 RS 回环配置缺失;需统一设置 arp_ignore=1/arp_announce=2,校验 VRRP 配置与防火墙,通过 notify 脚本同步 IPVS 规则,并在 RS 的 lo 接口正确绑定 VIP 且禁用 ARP。

ipvsadm 配置后 vip 无 ARP 响应或漂移失败的 keepalived 配合

IPVS + Keepalived 配置后 VIP 无法响应 ARP 或频繁漂移,通常不是单一组件故障,而是网络层、内核参数、Keepalived 状态机与 IPVS 规则协同失配所致。核心在于:VIP 必须能被正确宣告(ARP 响应)、稳定绑定(内核不抢答)、且状态切换时规则同步无延迟。

ARP 响应失效:Linux 内核抑制了 VIP 的 ARP 回复

默认情况下,Linux 内核对非本地主 IP(即未配置在任何 real interface 上的 VIP)会忽略 ARP 请求(arp_ignore=1),或不主动宣告(arp_announce=2)。即使 Keepalived 已成功绑定了 VIP,若内核不响应 ARP,下游设备就学不到 VIP 的 MAC 地址。

解决方法

  • 在所有参与 LVS+Keepalived 的节点上,执行:
    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  • 同时确保对应网卡(如 eth0)也生效:
    echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
  • 写入 /etc/sysctl.conf 持久化:
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2
    net.ipv4.conf.eth0.arp_ignore = 1
    net.ipv4.conf.eth0.arp_announce = 2

Keepalived 主备状态异常:VIP 绑定失败或未触发同步

Keepalived 进程运行但未真正绑定 VIP,常见于:

  • 配置中 vrrp_instancestate 与实际角色不符(例如 backup 节点误配为 MASTER);
  • interface 指向错误网卡(如配成 lo 而非 eth0);
  • virtual_router_id 在集群中不唯一,导致 VRRP 报文被丢弃;
  • 防火墙 拦截 VRRP 协议(协议号 112,目的组播地址 224.0.0.18),造成主备无法通信、脑裂或反复切换。

验证方式:
ip addr show dev eth0 查看 VIP 是否存在;
sudo tcpdump -i eth0 host 224.0.0.18 观察 VRRP 报文收发;
tail -f /var/log/messages | grep Keepalived 检查状态切换日志。

IPVS 规则未随 VIP 同步:主备切换后调度器失效

Keepalived 默认只管理 VIP 和健康检查,不会自动同步 ipvsadm 规则。若仅在主节点手动添加规则,备节点无规则,VIP 漂移后流量到达却无对应虚拟服务,表现为“VIP 可 ping 通但服务不可达”。

推荐做法:

  • 使用 Keepalived 的 notify_master / notify_backup 脚本,在状态切换时自动加载 / 清空规则;
  • 示例脚本 /etc/keepalived/vip_rules.sh
    #!/bin/bash case "$1" in   master)     ipvsadm -C     ipvsadm -A -t 192.168.1.100:80 -s rr     ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.10:80 -g     ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.11:80 -g     ;;   backup)     ipvsadm -C     ;; esac
  • 在 keepalived.conf 中调用:
    notify_master “/etc/keepalived/vip_rules.sh master”
    notify_backup “/etc/keepalived/vip_rules.sh backup”

真实服务器(RS)回环接口配置遗漏:DR 模式下响应失败

若采用 LVS-DR 模式,RS 必须在 lo 接口上配置 VIP 并禁用 ARP 响应,否则:

  • RS 自身 ARP 表混乱,可能响应 VIP 的 ARP 请求,引发冲突;
  • 返回包不走 director,破坏 DR 转发路径。

RS 上必须执行:

ip addr add 192.168.1.100/32 dev lo label lo:0 echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

并加入开机脚本或 network-scripts,确保重启后仍生效。

text=ZqhQzanResources