我有一个基于 LVS 的负载均衡器,它一直运行良好。它在两台服务器上运行,使用心跳提供故障转移。
我已经为系统添加了对第二个 IP 范围的支持,但是当发生故障转移时,接管的服务器无法对第二个范围内的任何 IP 进行 ARP,直到我删除并重新添加该范围的路由。
以下是故障转移后我在活动负载均衡器上看到的更多详细信息:
# arp
foo1.example.com ether 00:20:ED:1A:0C:82 C eth0
foo2.example.com ether 00:1E:C9:B0:F6:FE C eth0
bar1.example.com (incomplete) eth0
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
2.2.2.128 * 255.255.255.192 U 0 0 0 eth0
1.1.1.0 * 255.255.255.0 U 0 0 0 eth0
default 1.1.1.1 0.0.0.0 UG 100 0 0 eth0
所以我无法对位于 2.2.2.* 网段的 bar1.example.com 进行 ARP
我发现,删除并添加网块的路由可以解决这个问题
ip route del 2.2.2.128/26 dev eth0
ip route add 2.2.2.128/26 dev eth0
如果我通过 ping bar1.example.com 触发 ARP 查找,ARP 缓存现在将显示
bar1.example.com ether 00:22:19:51:71:E4 C eth0
有谁知道这里发生了什么,或者知道如何让心跳守护进程在执行接管时执行此路由删除并重新添加?
答案1
有时交换机会将旧的 ARP 映射保留太长时间;我不得不在 Linux 下使用“arping -U”来告诉上游交换机刷新缓存。
答案2
您如何将 IP 指定为资源?您使用IPAddr
资源脚本吗?如果您在故障转移时未重新广播 ARP,则之前与 VIP 通信的设备将在 ARP 表中拥有旧的物理地址。