急!请教章博士
章博士:你好!我建立了一个LVS/DR方式的FTP集群,基本配置为一台LB调度器,后台五台真实服务器,真实服务器下连接的为NFS文件系统存储,存储中有10000个文件。操作系统都为SUSE 9(内核2.6.5).调度器的调度脚本为:
# Stopping the ip_forward for the secure reason,if you need ip_forward ,you can
# ENABLE it,1 for ENABLE ,0 for DISABLE
echo 0 > /proc/sys/net/ipv4/ip_forward
# Because in the LVS/DR, direcotr is not a gw for realserver ,so we use icmp
# to redirects on, 1 for on ,0 for off
echo "1" > /proc/sys/net/ipv4/conf/all/send_redirects
echo "1" > /proc/sys/net/ipv4/conf/default/send_redirects
echo "1" > /proc/sys/net/ipv4/conf/eth1/send_redirects
# Configging the VIP for the eth1:110,the netmask must be 0xffffffff
# eth1 ip 174.19.200.11
/sbin/ifconfig eth1:1 174.19.200.1 broadcast 174.19.200.1 netmask 255.255.255.255 up
/sbin/route add -host 174.19.200.1 dev eth1:1
# Listing ifconfig information for VIP
sbin/ifconfig eth1:1
# Clearing ipvsadm table
/sbin/ipvsadm -C
## Installing LVS services with ipvsadm
# Adding ftp to VIP with wlc scheduling
/sbin/ipvsadm -A -t 174.19.200.1:ftp -p -s wlc
# Forwarding ftp to realserver using direct routing with with weight=1
/sbin/ipvsadm -a -t 174.19.200.1:ftp -r 174.19.200.3 -w 5 -g
# Forwarding ftp to realserver using direct routing with with weight=1
/sbin/ipvsadm -a -t 174.19.200.1:ftp -r 174.19.200.9 -w 5 -g
# Forwarding ftp to realserver using direct routing with with weight=1
/sbin/ipvsadm -a -t 174.19.200.1:ftp -r 174.19.200.10 -w 5 -g
# Forwarding ftp to realserver using direct routing with with weight=1
/sbin/ipvsadm -a -t 174.19.200.1:ftp -r 174.19.200.12 -w 5 -g
# Forwarding ftp to realserver using direct routing with with weight=1
/sbin/ipvsadm -a -t 174.19.200.1:ftp -r 174.19.200.13 -w 5 -g
# Listing ipvsadm table
/sbin/ipvsadm
真实服务器的脚本为:
# Setting realserver ip_forwarding to OFF(1 on,0 off)
echo "0" > /proc/sys/net/ipv4/ip_forward
# Installing realserver_vip
/sbin/ifconfig lo:1 174.19.200.1 broadcast 174.19.200.1 netmask 0xffffffff up
# Installing route for VIP 174.19.200.1 on device lo:1
/sbin/route add -host 174.19.200.1 dev lo:1
# Configging output
/sbin/ifconfig lo:1
# Listing routing information for VIP 174.19.200.1
/bin/netstat -rn
# Hiding interface lo:1,will not arp
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" > /proc/sys/net/ipv4/conf/lo/rp_filter
我用LoadRunner(测试工具)测试,模拟4000个用户/每秒去取存储中的文件,每个真实服务器平均分担近1000个用户访问.开始时是100个用户,然后每秒递增10个用户,最终达到每秒4000个用户每秒的访问速度.达到4000个用户每秒的速度后能够运行20分钟左右,然后就出现连接不上的错误和Type failed错误,且一直增长下去.连续几个实验都是相同的问题.我们怀疑是操作系统未优化出现错误,于是对vsftp,内核进程数等做了相应的优化.结果还是同样的问题.
我们不用调度器直接对单台真实服务器进行测试,发现每个真实服务器能够提供2000个用户的访问且能长时间稳定运行。
最后加上调度器后对一台真实服务器做DR调度,模拟1000个用户访问发现出现以前出现的错误。是不是在LVS的调度算法中的参数与调度的服务的设置有关系,如persistent等.
wensong
周五, 2006-03-24 16:01
Permalink
你现在是用LVS/DR方式做的集群,不知道在真实服务器上让它们不对VIP地址(174.19.200.1在你的系统中)作ARP响应?
在你的LoadRunner测试中,有多少台测试客户机器?
microwise
周六, 2006-03-25 02:40
Permalink
回复章博士
章博士,你好!我对这句话还是没有理解清楚:"不知道在真实服务器上让它们不对VIP地址(174.19.200.1在你的系统中)作ARP响应?"。
我对ARP问题的理解是:
在2.6.5的内核中有2个设备标志(arp_announce和arp_ignore),用于调整ARP堆栈。应该可以利用这2个标志来解决ARP问题,方法是对设置了VIP的设备设置arp_ignore=1,arp_announce=2。此外,应将rp_filter=0。
arp_ignore=1,系统只回答目的IP为是本地IP的包。也就是对广播包不做响应。
arp_announce=2,系统忽略IP包的源地址(source address),而根据目标主机(target host),选择本地地址。
rp_filter=0,则是不作源地址检测。
我在真实服务器上的设置就是这样的,没有去打hidden补丁。
我在LoadRunner测试中,用了8台客户机器(双至强、4G内存和千兆网络,应该不是瓶颈)做测试,每台发送500个用户每秒的请求,每台上面利用了LoadRunner的IP欺骗功能,相当于是每台每秒发送的IP地址是不同的。调度器中IP Virtual Server version 为1.2.0 。
wensong
周六, 2006-03-25 14:30
Permalink
arp_announce和arp_ignore应该可以解决ARP的问题(上次是我没有注意到)。大概还需要对以太网口作arp_announce和arp_ignore设置,例如:
echo "1" > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/eth0/arp_announce
在LVS/DR的调度器上,应该考虑将send_redirects关掉。
其他的,我没有更多的想法。
我想在“最后加上调度器后对一台真实服务器做DR调度,模拟1000个用户访问发现出现以前出现的错误。”情形下,可以找一个正常的客户端连接一下,看能否进行高校的FTP下载?然后用“ipvsadm -Ln”来看看连接数的情况,用“ipvsadm -Lcn”来看看连接的状态?
在真实服务器上也可考虑抓报文,确保它不作来自外面的VIP ARP响应,请求报文是来自调度器的。
microwise
周日, 2006-03-26 13:56
Permalink
谢谢章博士指点
我对这句:“在LVS/DR的调度器上,应该考虑将send_redirects关掉”理解得不够好。
我开始的想法是:在LVS-DR 模式下,如果集群的网关是外部网关,而不是负载均衡器的话,所以要打开 icmp 包的重定向设置 send_redirects 置为 1。您认为我这样理解正确吗?
代码罐头
周四, 2006-03-30 07:34
Permalink
失去响应的时候ipvsadm输出是如何的。
每台real server上面的分到的连接数如何?
我也碰到过类似问题
在压力测试LVS DR分发给tomcat时负载虽然均衡
但是实际效果甚至不如单台服务器的压力测试结果
(返回比较多的error并且响应时间迟缓)
后来发现是ARP的关系
不过看你的描述恐怕不是这个关系了。
wensong
周四, 2006-03-30 13:45
Permalink
我想应该是ARP关系。:)
microwise
周一, 2006-04-03 01:59
Permalink
谢谢wengsong老师的指导
在实验中使用的是电信架构的ATCA服务器板,每块服务板有八个网口对外连接.用它作后台真实服务器我只启用了每块板的两个网口,一个网口用作LVS相关服务,另一个做为取数据通道(DR模式下,本网口地址不在做LVS相关服务的同一网段).
是否要将两个网口都要做arp_announce和arp_ignore设置?
还是只要对做LVS服务的网口做arp_announce和arp_ignore设置.
我去实验了一下:在真实服务器上抓报文,确保它不作来自外面的VIP ARP响应,请求报文是来自调度器的.我用TCPDUMP抓的报文有点看不懂.
能否指点一下怎样确定报文的响应
wensong
周二, 2006-04-04 13:34
Permalink
两个网口都需要做arp_announce和arp_ignore设置。
凡是能收到对VIP ARP广播报文的网口,如果我们用arp_announce和arp_ignore,都需要设置。
microwise
周三, 2006-04-05 03:12
Permalink
这个小集群已经没有问题
经过这几次的实验,负载均衡已经用起来了.
下一步准备研究一下真实服务器负载的监控方式(CPU负载、内存利用情况、磁盘利用率和当前进程数目Pi),想能够动态地调整真实服务器的权值.达到真正的负载均衡.
现在是否也有相关的工具来完成这项工作.
清水
周日, 2006-04-16 10:43
Permalink
可否写个总结给大家看下
我们还是不懂你怎么搞定的,能否写个详细的配置和测试过程。谢谢!
wensong
周四, 2006-03-30 13:45
Permalink
在一般路由状态下,一个报文比一个网卡进来,又从同一块网卡路由出去,当send_redirects 置为1,会发ICMP REDIRECT报文。
在LVS/DR下, 访问VIP的报文是走INPUT路径,而不是FORWARD路径。所以无论send_redirects是否设置,应该不受影响。前面的大概是我没有仔细想。
Anonymous (没有被验证)
周三, 2014-03-05 07:19
Permalink
XurWWTLSynBoGwfKCXd
Now we know who the sebilnse one is here. Great post!
Anonymous (没有被验证)
周四, 2014-03-06 14:13
Permalink
FTDQyXRceC
Grazi for maknig it nice and EZ.
Anonymous (没有被验证)
周五, 2014-12-19 10:44
Permalink
hHzBWeGwkW
A wonderful job. Super helpful intrmoafion.
Anonymous (没有被验证)
周三, 2014-06-04 12:27
Permalink
ZkzdmguQADmdfFFE
cheapautoinsurancequotes.us cheap car insurance quotes online inexpensive auto insurance florida car insurence best life insurance companies
sparrow
周六, 2006-09-09 03:23
Permalink
写个总结给大家看看
不知你是如何解决问题的,希望你能写个详细的过程.谢谢!