我有一个 Barracuda 负载均衡器和一个 VIP,后者依次转发到一组服务器。由于负载均衡器直接响应服务器,因此每个服务器都将 VIP 添加到环回接口。
我已经使用这种方法近几年了,没有出现任何问题,但是前几天我需要向集群/负载平衡器添加一个额外的 IP 地址。我在将其放在负载平衡器上之前添加了环回接口。
现在的问题是,如果我尝试访问 public-ip-here:80,它工作得很好,好像它不是环回?我可以通过 ssh 连接到该 ip 和任何其他服务。如果我将它添加到我的负载均衡器并尝试像我其他服务器一样转发它,它将直接连接到服务器,而不是像预期的那样使用负载均衡器。
以下是已删除实际公共 IP 的接口示例:
lo:6 Link encap:Local Loopback
inet addr:123.123.123.123 Mask:255.255.255.255
UP LOOPBACK RUNNING MTU:16436 Metric:1
我不知道如何解决这个问题,而且谷歌也没有提供太多帮助。
答案1
听起来你正在使用 DR(直接路由)模式,你需要处理 ARP 问题。你的真实服务器不能向网络的其余部分宣布它拥有 123.123.123.123 VIP 地址。不同版本的 Linux 以不同的方式做出反应。请查看 loadbalancer.org 手册第 69 页: http://pdfs.loadbalancer.org/loadbalanceradministrationv7.pdf
所有接口都需要 Arp 控制,即:net.ipv4.conf.all.arp_ignore=1 net.ipv4.conf.eth0.arp_ignore=1 net.ipv4.conf.eth1.arp_ignore=1 net.ipv4.conf.all.arp_announce=2 net.ipv4.conf.eth0.arp_announce=2 net.ipv4.conf.eth1.arp_announce=2
或者你可能会发现 iptables 方法更简单:iptables -t nat -A PREROUTING -p tcp -d 123.123.123.123 -j REDIRECT