lvs dr模式下real server异常调度等问题的根源在于其对vip的arp响应,解决方法包括:一、抓包验证arp reply;二、配置lo接口arp_ignore=1和arp_announce=2;三、启用lo或lo:0的hidden参数;四、在物理接口(如eth0)设置arp_ignore/arp_announce;五、全局禁用arp_announce并配合arp_ignore=1。

如果您在LVS DR模式下观察到Real Server未被正常调度、客户端请求超时或502错误频发,且ipvsadm显示连接数异常波动,则问题极可能源于Real Server对VIP的ARP响应行为。以下是定位与解决该问题的具体方法:
一、确认ARP响应是否为根本原因
DR模式要求仅Director响应针对VIP的ARP请求,而Real Server必须保持静默;一旦Real Server发出ARP Reply,将导致交换机ARP表项震荡,客户端后续流量被直接发往某台RS而非Director,造成负载失衡与服务中断。验证需从链路层抓包入手。
1、在交换机镜像端口或Director物理网卡上执行:tcpdump -i eth0 arp and host 192.168.1.100 -nn
2、向VIP发起ARP请求(如ping -c1 192.168.1.100后清空本地ARP缓存)
3、检查输出中是否出现来自Real Server MAC地址的ARP Reply帧
4、在任意Real Server上运行:arp -n | grep 192.168.1.100,预期结果为空;若存在条目,说明ARP抑制未生效
二、配置lo接口ARP抑制参数
该方法通过内核参数控制lo接口对VIP的ARP响应逻辑,是DR模式下最标准、最广泛采用的修复手段。核心在于使Real Server仅在VIP实际配置于入接口时才应答ARP,而VIP仅绑定在lo,ARP请求却来自eth0,从而自然拒绝应答。
1、临时生效(立即验证):echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
2、临时生效(立即验证):echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
3、验证参数值:sysctl net.ipv4.conf.lo.arp_ignore net.ipv4.conf.lo.arp_announce
4、永久生效:将以下两行写入/etc/sysctl.conf并执行sysctl -p:net.ipv4.conf.lo.arp_ignore = 1 和 net.ipv4.conf.lo.arp_announce = 2
三、启用内核hidden接口特性
该方法通过标记lo上的VIP子接口为“隐藏”,使其完全不参与任何ARP交互,包括ARP请求和应答,属于更彻底的隔离方式,适用于对ARP行为零容忍的严苛环境。
1、确认当前lo:0或对应别名接口名称(如ip addr show lo)
2、临时启用hidden(以lo为例):echo 1 > /proc/sys/net/ipv4/conf/lo/hidden
3、若VIP配置在lo:0,则使用:echo 1 > /proc/sys/net/ipv4/conf/lo:0/hidden
4、永久生效:在/etc/sysctl.conf中添加net.ipv4.conf.lo.hidden = 1并执行sysctl -p
四、调整ARP响应范围至物理接口
当Real Server存在多网卡或VIP被误配至非lo接口时,需将ARP抑制策略精确作用于实际接收ARP请求的物理接口(如eth0),避免因接口匹配失效导致抑制失败。
1、临时设置物理接口参数:echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
2、临时设置物理接口参数:echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
3、确保net.ipv4.conf.all.arp_ignore保持默认值0,防止干扰其他接口通信
4、永久生效:在/etc/sysctl.conf中添加net.ipv4.conf.eth0.arp_ignore = 1与net.ipv4.conf.eth0.arp_announce = 2
五、禁用全接口ARP通告能力
该方法通过关闭整个主机的ARP通告功能,强制所有出向ARP请求均不携带VIP作为源IP,从而切断Real Server向外宣告VIP合法性的路径,适用于无法精确定位接口但需快速止血的场景。
1、临时关闭ARP通告:echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
2、配合arp_ignore=1使用,确保入向ARP亦被屏蔽:echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
3、注意:此配置影响全局ARP行为,需同步确认net.ipv4.conf.all.arp_filter为0以维持基础连通性
4、永久生效:将两行参数写入/etc/sysctl.conf并执行sysctl -p










