lvs-dr模式中,realserver无响应,请求帮忙!

在同一网段配置lvs-dr集群,出现realserver无响应现象,具体配置如下,请帮忙解决:
director配置:
#!/bin/sh
VIP=58.1.32.129
RIP1=58.1.32.171
case "$1" in
start)
echo "start lvs of director server"
#set the virtual ip address and sysctl parameter
/sbin/ifconfig eth0:110 $VIP broadcast $VIP netmask 255.255.255.192 up
echo "1" >/proc/sys/net/ipv4/ip_forward
#clear IPVS table
/sbin/ipvsadm -C

#set lvs
/sbin/ipvsadm -A -t $VIP:7003 -s rr
/sbin/ipvsadm -a -t $VIP:7003 -r $RIP1:7003 -g
#RUN LVS
/sbin/ipvsadm
;;
realserver端配置:
#!/bin/bash
#description : start realserver
VIP=58.1.32.129
case "$1" in
start)
echo " start LVS of REALServer"
/sbin/ifconfig lo:110 $VIP broadcast $VIP netmask 255.255.255.255 up
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
/sbin/sysctl -p
;;
用wget命令测试,发现直接访问realserver可以,而访问虚拟IP(58.1.32.129)不行,同时做了如下故障排除:
1.开放防火墙端口及关闭防火墙,均无响应,排除防火墙问题
2.用tcpdump抓包,发现请求已经转发至realserver,而realserver无响应
3.在realserver上用wget http://127.0.0.1:7003/piccclaim 显示拒绝连接

在网上查找了一些资料,尝试多种方法未果,请求帮忙,谢谢!

Forums:

今天又重新试了一下,还是有问题,但是今天解决了在realserver上,无法用wget http://127.0.0.1:7003/piccclaim 的问题,是weblogic配置造成的。
但是,用lvs-dr时,访问wget http://58.1.32.129:7003/piccclaim还是不行.
现在关键点就在于,通过lvs转发了的数据包,似乎在realserver上不能响应其请求,请指点怎么排除故障,谢谢!

下面是在realserver上抓包片段:
是在打开浏览器时
23:54:37.178494 IP 58.1.32.4.amx-icsp > localhost.afs3-vlserver: S 4268146672:4268146672(0) win 16384
23:54:37.178508 IP localhost.afs3-vlserver > 58.1.32.4.amx-icsp: R 0:0(0) ack 4268146673 win 0
23:54:37.709955 IP 58.1.32.4.amx-icsp > localhost.afs3-vlserver: S 4268146672:4268146672(0) win 16384
23:54:37.709964 IP localhost.afs3-vlserver > 58.1.32.4.amx-icsp: R 0:0(0) ack 1 win 0
23:54:38.256872 IP 58.1.32.4.amx-icsp > localhost.afs3-vlserver: S 4268146672:4268146672(0) win 16384
23:54:38.256885 IP localhost.afs3-vlserver > 58.1.32.4.amx-icsp: R 0:0(0) ack 1 win 0

请帮忙分析,谢谢!

#
/sbin/sysctl -q -w net.ipv4.conf.all.arp_announce=2
/sbin/sysctl -q -w net.ipv4.conf.all.arp_filter=2
#

will fix it.

R 0:0(0) ack 中R是RST即reset 意思
正常数据应该是返回syn、ack

所有其实就是dr模式下,ip包的ip地址没变,只是保重dst和src的mac地址变了
所以在被分发到rserver上,rserver根据lo上的ip和包的dst的ip相等时,确定是发送给本服务器的
但是如果这个时候rserver在etho上绑定一个端口,而不在lo上的那个vip绑定端口
就会由系统返回一个无此响应端口处理业务,即返回RST
所以就出现syn_recv问题

如果在weblogic设置0.0.0.0绑定所有设备的端口,肯定可以解决这个问题,
但个人感觉这个做法,让web容器配置和lvs交叉太深,不知还有什么好的其他方式,
或许可能是我还不是太了解lvs

今天又重新整理了一遍思路,尝试了在realserver上直接用虚拟IP访问,wget被拒绝连接。
按照这个思路,重新调整了weblogic监听地址,即设置为0.0.0.0,
这样在realserver上直接用wget访问虚拟地址服务,是可以的,问题就解决了:)

经过这几天的尝试,搜索了不少高手的资料及经验,收益匪浅。

randomness