2012年(39)
分类:
2012-04-06 11:37:51
最重要的是了解ipvsadm命令的使用,先例举些例子:
首先说明,lvs负载均衡的3中模式,(DR,NAT,隧道) DR模式网上说是最有效率的.
ipvsadm命令,例如:
# ipvsadm -A -t 192.168.1.202:80 -s rr
# ipvsadm -a -t 192.168.1.202:80 -r 192.168.1.203:80 -g
# ipvsadm -a -t 192.168.1.202:80 -r 192.168.1.204:80 -g
# ipvsadm -S
-s rr 表示使用轮询方式,具体的还有 rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq 这么多种,常用的还有wrr.
-a 表示往一个服务内增加一个real server
-r 指定real server的IP地址
-w 表示权重
-g 表示使用DR方式,-m表示NAT方式,-i表示tunneling方式。
不知道这些参数什么意思的话也可以直接使用ipvsadm -h查看
# ipvsadm -S 保存LVS节点配置
# ipvsadm -C 清除LVS节点配置
# ipvsadm -Z zero counters in a service or all services
然后就不一一说明了,两个shell脚本就搞定lvs负载均衡.
环境:
Virtual IP: 192.168.1.202
LVS IP: 192.168.1.201
Real IP1: 192.168.1.203
Real IP2: 192.168.1.204
安装ipvsadm,yum -y install ipvsadm 的版本就很新了,如果要手动编译,请先运行
ln -s /usr/src/kernels/2.6.18-8.el5-i686 /usr/src/linux
后再编译,我的内核是2.6.18-8.el5-i686,只要是2.6内核就OK,如果不知道自己的是多少cd /usr/src/kernels 可以看到具体的版本信息,uname -a也可以.没上面的语句会提示出错,没错就 make && make install
lvs-dr.sh 这个就是转发器脚本,放在lvs服务器上运行.
#!/bin/bash
#Realserver
RIP1=192.168.1.203
RIP2=192.168.1.204
#Vip
VIP=192.168.1.202
/etc/rc.d/init.d/functions
case "$1" in
start)
echo " Starting lvs director ..."
# Set Vip
/sbin/ipvsadm --set 30 5 60
/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev eth0:0
echo "1" >/proc/sys/net/ipv4/ip_forward
/sbin/ipvsadm -C
# Set Lvs Realserver
/sbin/ipvsadm -A -t $VIP:80 -s wrr -p 3
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g -w 1
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g -w 1
/sbin/ipvsadm -S
touch /var/lock/subsys/ipvsadm >/dev/null 2>&1
echo "Ipsvsadm started ..."
/sbin/ipvsadm -ln
;;
stop)
echo "Stoping ipsvsadm ..."
echo "0" >/proc/sys/net/ipv4/ip_forward
/sbin/ipvsadm -C
/sbin/ipvsadm -Z
/sbin/ifconfig eth0:0 down
#route del eth0:0
rm -rf /var/lock/subsys/ipvsadm >/dev/null 2>&1
echo "Ipvsadm Stoped"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ];then
echo "Ipvsadm stoped"
exit 1
else
echo "Ipvsadm OK"
fi
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
esac
exit 0
lvs-real.sh 这个脚本放到realserver上运行,运行后ifconfig就可以看到效果.
#!/bin/bash
VIP=192.168.1.202
/etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
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
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
# ipvsadm -ln 查看是否已经配置正确
# ipvsadm -L -c 显示LVS 目前的连接