March 31, 2010 by Chan Cham Chung
LVS 有个 connection hash table ,默认的 size 为 4096,可以通过以下命令得到:
# ipvsadm -ln
IP Virtual Server version 1.0.12 (size=4096)
简单地说,这个hash table 用于记录每个进来的连接及路由去向的信息。面对庞大的连接时,这个4096是远远不够的,这时就会产生冲突,然后hash table 就不断置换table 中的数据,系统的负荷就这样上来了。所以,很多调优文章都说,要把这个值调大。至于如何调大呢,好像必须重编译内核了。。。
我的是 centos 5.4 final ,利用 srpm 去重编译吧,使用当前系统的 config ,这样编译后的内核只不过是改变了 hash table 的值,并没有改变其它的东西。
下一个 kernel 的 srpm :http://mirrors.163.com/centos/5.4/os/SRPMS/kernel-2.6.18-164.el5.src.rpm
重编内核时,把原来的 config(/boot/config-2.6.18-164.el5) copy 覆盖 SOURCES/kernel-2.6.18-x86_64.config .
把第一行的
#
改为
# x86_64
同时,修改 CONFIG_IP_VS_TAB_BITS=12 (2的12次方,4096)为 CONFIG_IP_VS_TAB_BITS=20 。
然后 rpmbuild -ba –target=`uname -m` kernel-2.6.spec ,新编译出来的kernel-2.6.18-164.el5.x86_64.rpm 就在 RPMS/x86_64/ 里了。
rpm -Uvh 吧。
reboot 后,再 ipvsadm -ln 就可以看到
IP Virtual Server version 1.2.1 (size=1048576)
成功!
lvs 调优的文章通常会说,如果你的并发连接数是 200,keep alive 是200秒,那么hash table size 就应该设置为不要低于 200×200=40000 太多,2的15次方32768 就差不多了。不过,谁知道我们的需求是否会变呢?我一般都懒得算,直接开到最大,20 就是最大的了。
还需要注意一点,就是每个连接是要占用内存的,印象中是每个连接占用136 bytes ,尽管说 lvs 可以抗百万级别的连接,也要注意有没有足够的内存哦,呵呵。
Tags: lvs
Categories: technology •
No Comments »
March 18, 2010 by Chan Cham Chung
最近为那个公司很重视的项目搭建 lvs ,在这里 log 一下吧。
利用red hat 提供的 piranha ,简单快捷。
我选择的是 centos 5.4 ,安装 piranha ,很简单
yum install piranha
此时,它还需要你安装 ipvsadm , php , php-cli , php-common , httpd ,piranha 是一个 web 管理的工具,没办法,虽然我不用web 界面,但这些在yum 下还是必须装上的。
装完以后,/etc/sysconfig/ha/lvs.cf 还是空的,我去抄一份过来。
serial_no = 1
primary = 60.12.227.1
service = lvs
backup_active = 1
backup = 60.12.227.2
heartbeat = 1
heartbeat_port = 10001
keepalive = 6
deadtime = 18
network = direct
debug_level = NONE
virtual vs[1] {
active = 1
address = 60.12.227.200 eth0:200
vip_nmask = 255.255.255.0
port = 80
send = "GET / HTTP/1.0\r\n\r\n"
expect = "HTTP"
use_regex = 0
load_monitor = none
scheduler = wlc
protocol = tcp
timeout = 6
reentry = 15
quiesce_server = 0
server rs[1] {
address = 192.168.0.1
active = 1
weight = 2
}
server rs[2] {
address = 192.168.0.2
active = 1
weight = 2
}
}
到此,lvs 的 director 端,算是安装完成了。
有人会问了,为什么我没有修改 /proc/sys/net/ipv4/ip_forward 为1 。其实,这里我也还不是很懂,理论上,转发是必须设为1 的,但我发现,貌似不设,也可以正常工作,难道是 piranha 的关系??
然后就是配置 real server 端了。
我又抄一个shell 过来
#!/bin/sh
VIP=60.12.227.200
/sbin/ifconfig lo:0 $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
由于我的director 端配置的是 dr 模式,所以必须关闭arp 响应。
执行一下这个shell,real server 端也算是完成了。
启动 director 端:
# /etc/init.d/pulse start
Starting pulse: [ OK ]
查看服务状态:
# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 60.12.227.200:80 wlc
-> 192.168.0.1:80 Route 2 326 172
-> 192.168.0.2:80 Route 2 326 192
搭建完成了,算是比较快速的了,呵呵。还有一点知识点的,下回再说吧。
Tags: linux, lvs
Categories: technology •
No Comments »