利用LVS+Keepalived 实现高性能高可用负载均衡

时间:2022-10-23 19:46:54

转自http://www.linuxtone.org

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

名称 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. 下载相关软件包      #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    2. 安装LVS和Keepalived      #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     #做成系统启动服务方便管理.     四. 配置LVS实现负载均衡   1. LVS-DR,配置LVS脚本实现负载均衡       #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        2. 配置Realserver脚本. #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  或者采用secondary ip address方式配置  # 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 查看是否绑定  3. 启动lvs-dr脚本和realserver启本,在DR上可以查看LVS当前状态: #watch ipvsadm –ln   五.利用Keepalvied实现负载均衡和和高可用性  1.配置在主负载均衡服务器上配置keepalived.conf  #vi /etc/keepalived/keepalived.conf  ! Configuration File for keepalived   global_defs {    notification_email {       cnseek@gmail.com  #   failover@firewall.loc  #   sysadmin@firewall.loc    }    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         }      } }   2. BACKUP服务器同上配置,先安装lvs再按装keepalived,仍后配置/etc/keepalived/keepalived.conf,只需将红色标示的部分改一下即可.   3. 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服务是否正常  #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服务器是否能正常接管.     四.相关参考  1.LVS 基础知识汇总 Ø         LVS的算法介绍               http://www.linuxtone.org/viewthread.php?tid=69 Ø         学习LVS的三种转发模式       http://www.linuxtone.org/viewthread.php?tid=77 Ø         LVS中的IP负载均衡技术       http://www.linuxtone.org/viewthread.php?tid=68 更多的请到http://www.linuxtone.org 负载均衡版查看   3.       Keepalived 相关参考资料。    http://www.keepalived.org/documentation.html