、为什么要使 用负载均衡技术? 1、系统高可用性 2、 系统可扩展性 3、 负载均衡能力 LVS+keepalived能很好的实现以上的要求,LVS提 供负载均衡,keepalived提供健康检查,故障转移,提高系统的可用性!采用这样的架构以后 很容易对现有系统进行扩展,只要在后端添加或者减少realserver,只要更改lvs的 配置文件,并能实现无缝配置变更!
二、LVS+Keepalived介绍 1、 LVS LVS是一个开源的软件,可以实现LINUX平台下的简单负载均衡。LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器。目前有三种IP负 载均衡技术(VS/NAT、VS/TUN和VS/DR);八种调度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)。 2、 keepalived Keepalived 是运行在lvs 之上,它的主要功能是实现真实机的故障隔离及负载均衡器间的失败 切换,提高系统的可用性
三、LVS+keepalived负载均衡架构图
四、LVS+keepalived的安装和配置 1. 配置环境 System OS:CentOS release 5.4 Software:ipvsadm-1.24.tar.gz, keepalived-1.1.19.tar.gz 2. 信息列表 名称 | | LVS-Master | | LVS-BACKUP | | LVS-VIP | | Realserver1 | | Realserver2 | | Realserver3 | |
3. 安装lvs 分别在backup lvs和master lvs上安装 ln -s /usr/src/kernels/2.6.18-164.el5-i686/ /usr/src/linux tar zxvf ipvsadm-1.24.tar.gz cd ipvsadm-1.24 make && make install 4. 安装keepalived 分别在backup lvs和master lvs上安装 wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gz
tar zxvf keepalived-1.1.19.tar.gz
cd keepalived-1.1.19
./configure --prefix=/usr/local/keepalived
make
make install
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
mkdir /etc/keepalived 5. 配置keepadlived LVS-Master的配置文件如下 [iyunv@linux5 ~]# cat /etc/keepalived/keepalived.conf global_defs { notification_email { } smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS1 # 设置lvs的id,在一个网络内应该是唯一的 } vrrp_sync_group test { #设置vrrp组 group { loadbalance } }
vrrp_instance loadbalance { state MASTER #设置lvs的状态,报错MASTER和BACKUP两种,必须大写 interface eth0 #设置对外服务的接口 lvs_sync_daemon_inteface eth0 #设置lvs监听的接口 virtual_router_id 51 #设置虚拟路由表示 priority 180 #设置优先级,数值越大,优先级越高 advert_int 5 #设置同步时间间隔 authentication { #设置验证类型和密码 auth_type PASS auth_pass 1111 } virtual_ipaddress { #设置lvs vip 192.168.1.115 } }
virtual_server 192.168.1.115 80 { delay_loop 6 #健康检查时间间隔 lb_algo rr #负载均衡调度算法 lb_kind DR #负载均衡转发规则 #persistence_timeout 20 #设置会话保持时间,对bbs等很有用 protocol TCP #协议 real_server 192.168.1.105 80 { weight 3 #设置权重 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.1.103 80 { weight 3 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.1.104 80 { weight 3 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
LVS-backup的配置文件如下 global_defs { notification_email { } smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS2 } vrrp_sync_group test { group { loadbalance } }
vrrp_instance loadbalance { state BACKUP interface eth0 lvs_sync_daemon_inteface eth0 virtual_router_id 51 priority 150 advert_int 5 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.115 } }
virtual_server 192.168.1.115 80 { delay_loop 6 lb_algo rr lb_kind DR #persistence_timeout 20 protocol TCP real_server 192.168.1.105 80 { weight 3 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.1.103 80 { weight 3 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.1.104 80 { weight 3 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
6. Realserver的配置 三台客户端的脚本都一样! cat /etc/rc.d/init.d/realserver.sh #!/bin/bash # description: Config realserver lo and apply noarp
SNS_VIP=192.168.1.115
/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
7. 测试 1) 首先测试各个readserver,确定各个readserver都能正常访问,测试realserver.sh脚本,看启动后 能不能绑定lvs vip,停止后能不能去除绑定的vip 2) 测试lvs能否进行负载均衡转发,利用ipvsadm命令查看,如果想只当当前的 请求转发到哪个服务器去了,可以用ipvsadm加选项来查看,其完整形式为:ipvsadm –lcn | grep 192.168.1.115 3) 停掉主lvs看lvs backup是否接管! 4) 更详细信息请查看日志,tail -f /var/log/messages
|