利用LVS+Keepalived 实现高性能高可用负载均衡
一.LVS+Keepalived 介绍
1.       LVS
LVSLinux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在19985月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。目前有三种IP负载均衡技术(VS/NATVS/TUNVS/DR);
十种调度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。
2.       Keepalvied
       Keepalived在这里主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现
. 网站负载均衡拓朴图
 
IP信息列表:

名称
IP
 LVS-DR-Master
222.73.247.19*
 LVS-DR-BACKUP
222.73.247.19*
 LVS-DR-VIP
222.73.247.19*
 WEB1-Realserver-slave
222.73.247.197
 WEB2-Realserver-master
222.73.247.19*
 GateWay
222.73.247.254

 
. 安装LVSKeepalvied软件包
系统均为centos6.2,内核版本; 2.6.32-220.el6.x86_64
#yum -y install kernel-devel
#yum -y update kernel
#modprobe ip_vs //内核加载ip_vs模块
#lsmod |grep ip_vs //查看是否加载成功。
#ln -s /usr/src/kernerls/2.6.32-220.23.1.el6.x86_64/ /usr/src/linux //生成一个链接文件
#cp /usr/src/kernels/2.6.32-220.23.1.el6.x86_64/include/net/ip_vs.h /usr/inclide/net/ //这个很重要,否则在安装ipvsadm的时候会提示缺少*.h文件
#yum -y install openssl openssl-devel //安装keepalived需要
安装完以下这些软件
popt-1.13-7.el6.x86_64
popt-devel-1.13-7.el6.x86_64
libnl-1.1-14.el6.x86_64
libnl-devel-1.1-14.el6.x86_64
popt-static-1.13-7.el6.x86_64.rpm
 
 
tar xzvf ipvsadm-1.26.tar.gz
#cd ipvsadm-1.26
#make && make install
安装完成,会多出以下文件。
/sbin/ipvsadm
/sbin/ipvsadm-save
/sbin/ipvsadm-restore
/usr/man/man8/ipvsadm.8
/usr/man/man8/ipvsadm-save.8
/usr/man/man8/ipvsadm-restore.8
/etc/rc.d/init.d/ipvsadm
#tar xzvf keepalived-1.2.2.tar.gz
#cd keepalived-1.2.2
#./configure --prefix=/usr/local/keepalived--with-kernel-dir=/usr/src/kernels/2.6.32-220.23.1.el6.x86_64/
#make && make install
正确完成安装会显示如下信息:
Keepalived configuration
------------------------
Keepalived version : 1.1.20
Compiler : gcc
Compiler flags : -g -O2
Extra Lib : -lpopt -lssl -lcrypto
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
Use VRRP Framework : Yes
Use Debug flags : No
设置成为系统服务 ,方便启动,keepalived默认查找配置文件的位置是/etc/keepalived/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
 mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
chkconfig --add keepalived
chkconfig keepalived
. 利用Keepalvied实现负载均衡和和高可用性
1Vim /etc/keepalived/keepalived.conf,slave上面只需要更改优先级,和状态,官方推荐备份的优先级要低于master的优先级50
! Configuration File for keepalived
 
 
global_defs {
 
   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    # 备份服务优先级将低于master50
 
    advert_int 1
 
    authentication {
 
        auth_type PASS
 
        auth_pass 1111
 
    }
 
    virtual_ipaddress {
 
        192.168.5.46
 
        #(如果有多个VIP,继续换行填写.)
 
    }
 
}
 
 
virtual_server 192.168.5.46 80 {
 
    delay_loop 3                  #(每隔3秒查询realserver状态)
 
    lb_algo wrr                  #(lvs 算法)
 
    lb_kind DR                  #(Direct Route)
 
    persistence_timeout 60        #(同一IP的连接60秒内被分配到同一台realserver)
 
    protocol TCP                #(TCP协议检查realserver状态)
 
 
    real_server 192.168.5.148 80 {
 
        weight 3               #(权重)
 
        TCP_CHECK {
 
        connect_timeout 4       #(4秒无响应超时)
 
        nb_get_retry 2
 
        delay_before_retry 2
 
        connect_port 80
 
        }
 
    }
 
    real_server 192.168.5.161 80 {
 
        weight 6
 
        TCP_CHECK {
 
        connect_timeout 4
 
        nb_get_retry 2
 
        delay_before_retry 2
 
        connect_port 80
 
        }
 
     }
 
}
 
2. BACKUP服务器同上配置,先安装lvs再按装keepalived,仍后配置/etc/keepalived/keepalived.conf,只需将红色标示的部分改一下即可.
3LVSDR模式下,有一个必须要处理的问题就是real server上的ARP响应问题,必须对real server进行一定的处理,使其不响应VIP接口上的ARP请求
1) 通过脚本更改
                #!/bin/bash
# description: Config realserver lo and apply noarp
#Written by :NetSeek http://www.linuxtone.org
SNS_VIP=192.168.5.46    ,注意vip的配置
. /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
将这个脚本分别放在web1web2上执行之后就ok
2) 也可以通过修改 /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使其生效
分别启动keepalived
4. 查看lvs服务是否正常
 #watch ipvsadm –ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP 61.164.122.8:80 wrr persistent 60
 -> 61.164.122.10:80            Route   3      0          0
 -> 61.164.122.9:80             Route   3      0          0
 
 #tail –f /var/log/message 监听日志,查看状态。
 
5.停Master服务器的keepalived服务,查看BAKCUP服务器是否能正常接管.