LVS无法将请求发送到real server

我用一台机器安装LVS作为LBServer,另外两台安装了apache作为real server,已经测试过访问apache正常。
但是访问LVS的时候始终无响应。用ipvsadm --list可以查看到有请求已经发送到real server,但在apache的日志文件中却看不到。另外从LBServer无法ping通real server,但用别的机器却可以ping通real server。所以我怀疑是我找的教程有错,请各位指点一下。

我所做的步骤如下。
在LBServer:
配置虚拟IP
ifconfig eth0:0 10.45.8.100 netmask 255.255.252.0 broadcast 10.45.11.255
echo "1">/proc/sys/net/ipv4/ip_forward

使用ipvsadm安装LVS服务
ipvsadm -A -t 10.45.8.100:http -s rr
增加真实服务器
ipvsadm -a -t 10.45.8.100:http -r 10.45.8.111 -g -w 1
ipvsadm -a -t 10.45.8.100:http -r 10.45.8.5 -g -w 1

在real server:
配置虚拟IP
ifconfig lo:0 10.45.8.100 netmask 255.255.252.0 broadcast 10.45.11.255
route add -host 10.45.8.100 dev lo:0
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
但我用的ubuntu9.10系统中没有这两个文件或目录

仅此而已,请各位高手帮帮忙啊

Forums:

1)你是用80端口来访问的(把:http去掉):
ipvsadm -A -t 10.45.8.100 -s rr
ipvsadm -a -t 10.45.8.100 -r 10.45.8.111 -g -w 1
ipvsadm -a -t 10.45.8.100 -r 10.45.8.5 -g -w 1

2)在real server:
ifconfig lo:0 10.45.8.100 netmask 255.255.252.255 broadcast 10.45.8.100
你输入的有错。这条语句的意思是在real server中建立虚拟ip和网卡回环的绑定。

1)在LBServer端,如果我把:http去掉,按照提示的指令执行后会报错
ipvsadm -A -t 10.45.8.100 -s rr
Zero port specified for non-persistent service
ipvsadm -a -t 10.45.8.100 -r 10.45.8.111 -g -w 1
Service not defined
ipvsadm -a -t 10.45.8.100 -r 10.45.8.5 -g -w 1
Service not defined

我后来发现其实用:http和:www都是一样的,重要的是一定要能在LBServer端ping通real server。

2)在real server:
按照你所提供的指令执行后,LBServer仍然无法ping通real server。
后来发现执行ifconfig eth0:0 10.45.8.100 netmask 255.255.252.0 broadcast 10.45.8.100 就可以了。如果这样的话,原先的指令:route add -host 10.45.8.100 dev lo:0也需要进行修改了(我甚至发现这句指令都不用输入都可以使用)。
请各位高手能分析一下原因

现在已经可以使用了,但是我发现必须要等半分钟以上然后刷新页面才能把请求发送给另一台服务器,在这之前不管怎么刷新似乎都是用的缓存里面的数据啊。

刷新没切换页面,可以查这两个原因:
1)ipvsadm是否使用persistent,使用ipvsadm -ln就可以查看到。
2)绝大部分是因为浏览器keep-alive造成的,也就是长连接。你可以使用firefox来测试,在地址栏输入about:config,进去之后修改network.http.keep-alive=false,取消长连接。这样你每次刷新都会看到不同的页面。

那命令中eth0和lo,到底应该怎么用呢?我在网上查到的都是设置为lo:0但是我这么做的话,LBServer就没法ping通real server。

还请指教

1)能不能ping通real server,跟你的网络环境有关系。如果你在配置lvs之前,LBServer能ping通real server,说明你的网络没问题。那就是你输入的lvs配置有问题了。
2)根据你的网络环境,我重新写一下ipvsadm的命令:
网络环境:
LBServer 未知(eth0)
VIP 10.45.8.100(eth0:0)
real server1 10.45.8.111(eth0)
real server2 10.45.8.5(eth0)
输入的命令:
1.为LBServer添加虚拟ip:
ifconfig eth0:0 10.45.8.100 netmask 255.255.252.0 broadcast 10.45.8.100

2.在两台real server上分别建立虚拟ip和回环的绑定:
ifconfig lo:0 10.45.8.100 netmask 255.255.252.255 broadcast 10.45.8.100

3.配置ipvsadm,使用80端口进行访问
ipvsadm -A -t 10.45.8.100:80 -s rr
ipvsadm -a -t 10.45.8.100:80 -r 10.45.8.111:80 -g -w 1
ipvsadm -a -t 10.45.8.100:80 -r 10.45.8.5:80 -g -w 1

4.在两台real server上hidden arp
你找一下ubuntu怎么进行arp hidden

3)可参考我写的一个文档
链接:http://www.163pan.com/home/82713
下载《软负载均衡配置.doc》

按照提供的命令:ifconfig lo:0 10.45.8.100 netmask 255.255.252.255 broadcast 10.45.8.100
提示SIOCSIFNETMASK: Invalid argument

然后就发现这台real server网络中断

ifconfig eth0:0 10.45.8.100 netmask 255.255.255.0 broadcast 10.45.8.100
ifconfig lo:0 10.45.8.100 netmask 255.255.255.255 broadcast 10.45.8.100
netmask不是255.255.252

能说明一下为什么吗?我的真实地址子网掩码都是255.255.252.0啊

I thank you humbly for shinrag your wisdom JJWY

And to think I was going to talk to soemone in person about this.

A perfect reply! Thanks for taking the trouelb.

Yup, that'll do it. You have my apiincratpoe. http://vvobxfod.com [url=http://odvgsjcefhf.com]odvgsjcefhf[/url] [link=http://jskoejby.com]jskoejby[/link]