ipvsadm vip 无响应 的 keepalived vrrp_instance unicast_peer 配置

1次阅读

根本原因是unicast通信不通导致vrrp状态异常,需确保两端udp 3240端口双向互通、Interface和unicast_src_ip配置正确、unicast_peer填写对端真实ip,否则会进入fault状态并释放vip。

ipvsadm vip 无响应 的 keepalived vrrp_instance unicast_peer 配置

keepalived 里 vrrp_instance 配置了 unicast_peer,但 VIP 不生效

根本原因通常是 unicast 通信没通,导致 VRRP 状态卡在 BACKUP 或反复切换,VIP 根本不绑定。这不是配置写错的问题,而是网络层连通性被忽略了。

  • unicast_peer 要求两端能直接 UDP 单播通信(默认端口 3240),防火墙、云厂商安全组、容器网络或跨网段路由都可能拦截
  • 必须双向互通:A 发给 B 的包,B 要能回;不能只开 A→B 的出口
  • 检查方式不是看配置文件有没有写,而是用 tcpdump -i any port 3240 在两台机器上同时抓包,确认能否看到对方发来的 VRRP 包
  • 如果用的是 eth0 但实际流量走的是 ens192interface 参数配错也会导致发包失败

为什么加了 unicast_peer 反而 VIP 消失了

因为 keepalived 默认用多播(224.0.0.18),加了 unicast_peer 就强制切单播模式,一旦其中一台收不到对端的通告,就会降级为 FAULT 状态,主动释放 VIP。

  • 常见现象:ip addr show 看不到 VIP,systemctl status keepalived 显示状态是 FAULT 或反复在 BACKUP/MASTER 间跳变
  • 日志里会频繁出现:VRRP_Script(check_nginx) failedTimeout for interface eth0 —— 实际未必是脚本或接口问题,而是底层 VRRP 通告断了
  • 单播模式下不依赖 IGMP 或多播路由,但要求 unicast_src_ip 必须是本机真实存在的 IP(不能是 VIP,也不能是未配置的地址)

unicast_peerunicast_src_ip 怎么配才不翻车

这两个参数必须成对出现,且 unicast_src_ip 是你希望用来发包的本地 IP,不是 VIP,也不是 127.0.0.1。

  • unicast_peer 列表里只能写对端的真实 IP(IPv4),不能写域名、不能写 0.0.0.0、不能写 VIP
  • 如果集群有 3 台,每台的 vrrp_instance 块里都要列出另外两台的 IP,顺序无关
  • 示例正确写法:
    unicast_src_ip 192.168.5.10<br>unicast_peer {<br>    192.168.5.11<br>    192.168.5.12<br>}
  • 错误写法:unicast_src_ip 192.168.5.100(该 IP 未配置在任何接口上)或漏掉 unicast_src_ip(keepalived 会静默降级为多播)

IPVS 规则没更新,不是 keepalived 的锅

keepalived 只管 VIP 绑定和健康检查,ipvsadm 规则得自己配或靠外部脚本同步。VIP 有了但服务无响应,大概率是 IPVS 没加载规则,或者 real server 不通。

  • 检查是否真有规则:ipvsadm -Ln,空输出说明没加;--syncid 参数不等于自动同步
  • 如果用了 vrrp_script 触发 IPVS 更新,要确认脚本 exit code 是 0 才算成功,且脚本里调用 ipvsadm 时用了绝对路径(如 /sbin/ipvsadm
  • real server 的回包路径要一致:若 VIP 在 LB 上,RS 回包不能绕过 LB(否则 TCP 握手失败),常见解法是 RS 使用 LB 作为网关,或配置 arp_ignore/arp_announce

keepalived 单播模式下,VRRP 报文不经过 ARP 解析,也不依赖多播组成员管理,但代价是每个节点的网络可达性必须手工验证清楚——这点最容易被当成“配置完了就该好使”而跳过。

text=ZqhQzanResources