我正在尝试为我们的 Web 集群实施直接服务器返回方案,但我认为我遇到了一些 ARP 问题。为了测试目的,我部署了 2 个虚拟服务器(在 ESXi 环境中)。
主机 A:eth0 10.0.0.1/24 (VIP) 是我们的控制器,其虚拟 IP 位于 eth0 上
主机 B:eth0 10.0.0.2/24,lo:0 10.0.0.1/32 是 webapp 节点之一,运行 httpd 守护进程
这两个服务器位于同一以太网段上。如您所见,主机 B 的环回接口别名为 VIP (10.0.0.1)。为了让服务器 B 不回复 VIP,通过 arptables 实现了 arp 过滤:
arptables -A IN -d 10.0.0.1 -j DROP arptables -A OUT -s 10.0.0.1 -j mangle --mangle-ip-s 10.0.0.2
到目前为止一切似乎都很好,直到我尝试从主机 A ping 主机 B。我得到的是“目标主机无法访问”。通过在主机 B 上运行 tcpdump,我发现它确实收到了来自主机 A 的 ARP 请求,但没有发送回复。同时,我们成功地通过主机 B 回复了来自其他节点的 ARP 请求。因此看起来主机 A 无法与另一台机器通信,持有其 VIP。即使我进行了 arp 过滤。这对我来说实际上很奇怪。
有什么建议吗?顺便说一句,我正在运行 Centos 6。
答案1
从设置方式来看,当主机 B 从主机 A 获得 ping 并尝试响应时,它甚至不必执行 arp 请求(您想要对其进行修改)即可“到达 10.0.0.1”,它已经直接连接。您可以通过打印主机 B 上的 arp 表并查看 10.0.0.1 已经有记录来确认这一点。我从未在 VIP 位于包含真实服务器 IP 的子网中的设置中使用过 DSR。通常 VIP 绑定到环回并位于具有路由设置的不同子网中。它既可以避免这个问题,也可以避免必须修改 arp 表,这可能会导致以后出现一些非常大的调试问题。