背景:
随着你的网站业务量的增长你网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如F5又太贵,你们又是创业型互联公司如何有效节约成本,节省不必要 的浪费?同时实现商业硬件一样的高性能高可用的功能?有什么好的负载均衡可伸张可扩展的方案吗?答案是肯定的!有!我们利用 LVS+Keepalived基于完整开源软件的架构可以为你提供一个负载均衡及高可用的服务器。 LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项 目之一.目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR); 八种调度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)。 Keepalvied Keepalived在这里主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现 二. 网站负载均衡构架图 IP信息列表: 1 2 3 4 5 6 7 | 名称 IP LVS-DR-Master 61.164.122.6 LVS-DR-BACKUP 61.164.122.7 LVS-DR-VIP 61.164.122.8 WEB1-Realserver 61.164.122.9 WEB2-Realserver 61.164.122.10 GateWay 61.164.122.1 |
三. 安装LVS和Keepalvied软件包
1. 下载相关软件包- 1234
#mkdir /usr/local/src/lvs
#cd /usr/local/src/lvs
#wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
#wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #lsmod |grep ip_vs #uname -r 2.6.18-53.el5PAE #ln -s /usr/src/kernels/2.6.18-53.el5PAE-i686/ /usr/src/linux #tar zxvf ipvsadm-1.24.tar.gz #cd ipvsadm-1.24 #make && make install #find / -name ipvsadm # 查看ipvsadm的位置 #tar zxvf keepalived-1.1.15.tar.gz #cd keepalived-1.1.15 #./configure && make && make install #find / -name keepalived # 查看keepalived位置 #cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ #cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ #mkdir /etc/keepalived #cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ #cp /usr/local/sbin/keepalived /usr/sbin/ #service keepalived start|stop #做成系统启动服务方便管理. |
- 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
#vi /usr/local/sbin/lvs-dr.sh
#!/bin/bash
# description: start LVS of DirectorServer
#Written by :NetSeek http://www.linuxtone.org
GW=61.164.122.1
# website director vip.
SNS_VIP=61.164.122.8
SNS_RIP1=61.164.122.9
SNS_RIP2=61.164.122.10
.
/etc/rc
.d
/init
.d
/functions
logger $0 called with $1
case
"$1"
in
start)
# set squid vip
/sbin/ipvsadm
--
set
30 5 60
/sbin/ifconfig
eth0:0 $SNS_VIP broadcast $SNS_VIP netmask 255.255.255.255
broadcast $SNS_VIP up
/sbin/route
add -host $SNS_VIP dev eth0:0
/sbin/ipvsadm
-A -t $SNS_VIP:80 -s wrr -p 3
/sbin/ipvsadm
-a -t $SNS_VIP:80 -r $SNS_RIP1:80 -g -w 1
/sbin/ipvsadm
-a -t $SNS_VIP:80 -r $SNS_RIP2:80 -g -w 1
touch
/var/lock/subsys/ipvsadm
>
/dev/null
2>&1
;;
stop)
/sbin/ipvsadm
-C
/sbin/ipvsadm
-Z
ifconfig
eth0:0 down
ifconfig
eth0:1 down
route del $SNS_VIP
route del $SS_VIP
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
- 123456789101112131415161718192021222324252627282930313233343536
#vi /usr/local/sbin/realserver.sh
#!/bin/bash
# description: Config realserver lo and apply noarp
#Written by :NetSeek http://www.linuxtone.org
SNS_VIP=61.164.122.8
.
/etc/rc
.d
/init
.d
/functions
case
"$1"
in
start)
ifconfig
lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route
add -host $SNS_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 $SNS_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
- 12345678910
# vi /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
#sysctl –p
#ip addr add 61.164.122.8/32 dev lo
#ip add list 查看是否绑定
- 1
#watch ipvsadm –ln
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #vi /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { cnseek@gmail.com } notification_email_from sns-lvs@gmail.com smtp_server 127.0.0.1 # smtp_connect_timeout 30 router_id LVS_DEVEL } # 20081013 written by :netseek # VIP1 vrrp_instance VI_1 { state MASTER #备份服务器上将MASTER改为BACKUP interface eth0 virtual_router_id 51 priority 100 # 备份服务上将100改为99 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 61.164.122.8 #(如果有多个VIP,继续换行填写.) } } virtual_server 61.164.122.8 80 { delay_loop 6 #(每隔10秒查询realserver状态) lb_algo wrr #(lvs 算法) lb_kind DR #(Direct Route) persistence_timeout 60 #(同一IP的连接60秒内被分配到同一台realserver) protocol TCP #(用TCP协议检查realserver状态) real_server 61.164.122.9 80 { weight 3 #(权重) TCP_CHECK { connect_timeout 10 #(10秒无响应超时) nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 61.164.122.10 80 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } |
1 2 3 4 5 | vi /etc/rc.local #/usr/local/sbin/lvs-dr.sh 将lvs-dr.sh这个脚本注释掉。步 #/usr/local/sbin/lvs-dr.sh stop 停止lvs-dr脚本 #/etc/init.d/keepalived start 启动keepalived 服务,keepalived就能利用 keepalived.conf 配置文件,实现负载均衡和高可用. |
-
4. 查看lvs服务是否正常
- 1
#watch ipvsadm –ln
-
#tail –f /var/log/message
监听日志,查看状态,测试LVS负载均衡及高可用性是否有效。
5.停Master服务器的keepalived服务,查看BAKCUP服务器是否能正常接管服务。