关于realserver的 no arp 疑问

我现在有个集群系统正运行着

运行模式是 Direct Routing

所有服务器都在内网,通过硬件防火墙将外部地址影设到 集群的公共ip上,也就是调度机的公共ip上

一般情况下,如果去ping 这个公共ip 那响应的一定是 前面的调度机,因为 realserver网卡的lo:0设置的是 no arp

但有种情况发生了

当我将realserver的一台机器重新启动或调度机掉电,防火墙的地址却影设到了一台具体的realserver的公共ip上,这样,所有的外部请求就都落在了一台机器上,没有均衡实现了

这个时候一定要将防火墙重新刷新一下,防火墙才影设到调度系统的公共ip上

按照我的理解,no arp后将对外部请求和连接是透明的

不知道怎么解释这个现象

Forums:

觉得还是ARP没有处理好的问题,估计要在所有接口上都禁止ARP

建议用WIRESHARK抓一下ARP包,证实一下。

是ARP问题。

我正在整理ARP问题文章,可以参见其中的一些解决方法。

hehe 过了一段时间又看到了这篇文章

现在忽然想明白了为什么会这样

看下我的realserver启动script

#!/bin/sh
echo "1" > /proc/sys/net/ipv4/ip_forward
/sbin/ifconfig lo:0 192.168.0.254 netmask 255.255.255.255 broadcast 192.168.0.254 up
/sbin/route add -host 192.168.0.254 dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/all/hidden
echo "1" > /proc/sys/net/ipv4/conf/lo/hidden

我是先启动了vip 然后在echo "1" 来hidden的

所以我想在设置vip的一瞬间,网络上是有地址冲突的

所以前面的路由会学到realserver上去了

很快的,因为 realserver的 arp 又hidden了 所以重新启动路由就没事了

不知道我解释的对不对,有机会把运行的系统改下

如下

#!/bin/sh
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/conf/all/hidden
echo "1" > /proc/sys/net/ipv4/conf/lo/hidden
/sbin/ifconfig lo:0 192.168.0.254 netmask 255.255.255.255 broadcast 192.168.0.254 up
/sbin/route add -host 192.168.0.254 dev lo:0

2.6内核有个arp hidden,可以用那个去解决

2.4内核的用arp_tables也可以解决

Thank God! Soemone with brains speaks!

It's a plausere to find someone who can identify the issues so clearly

randomness