首页 > 代码库 > 搭建LVS+Keepalived负载均衡

搭建LVS+Keepalived负载均衡

1、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的实现 

2、拓扑图

spacer.gifwKiom1RJ-n7wnelVAAHHYUyFhqA675.jpg

3、地址规划

Master DR:  192.168.122.99

Slave DR:       192.168.122.101

VIP:             192.168.122.100

web server1:  192.168.122.102

web server2:  192.168.122.103

客户端:         192.168.122.1

4、实现思路

此实验使用的是DR模式。在两台DR上安装keepalived。使用keepalived配置DR优先级,以起到DR备份作用,当客户端访问web服务器时,数据包首先到达DR上,DR通过调度算法将数据包分发给web server。由web server回复数据包,当master DR宕机时,slave DR可以迅速接管,同样当web server1宕机时,web server2可以迅速提供服务。从而实现负载均衡。

5、安装 LVS和Keepalvied软件包

#yum -y install ipvsadm
#wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz  

安装keepalived前需要先安装依赖包
yum -y install gcc kernel-devel openssl-devel
#tar -zxvf keepalived-1.1.15.tar.gz  
#cd keepalived-1.1.15
#./configure --sysconf=/etc --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64/
#make && make install

配置keepalived为系统服务
#cp /usr/local/sbin/keepalived /usr/sbin/ 
#service keepalived start|stop    #启动/停止keepalived服务

6、 配置LVS实现负载均衡

Keepalived安装完成后,在/etc/keepalived下生成keepalived.conf配置文件,备份编辑此配置文件
#vim 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         #配置优先级,数值越高优先级越高,将备份服务器设置为80   
        advert_int 1 
        authentication { 
            auth_type PASS 
            auth_pass 1111      #设置服务器连接的用户密码,要和备份服务器一直
        } 
        virtual_ipaddress { 
            192.168.122.100         #虚拟IP,既客户端访问地址
            #(如果有多个VIP,继续换行填写.) 
        } 
    } 
     
    virtual_server 192.168.122.100 80 { 
        delay_loop 10                  #(每隔10秒查询realserver状态,如果宕机,及时接替服务) 
        lb_algo wrr                  #(lvs 算法) 
        lb_kind DR                  #(Direct Route) 
        persistence_timeout 60        #(同一IP的连接60秒内被分配到同一台realserver,如果Master DR宕机,60秒后BDR接替调度) 
        protocol TCP                #(用TCP协议检查realserver状态) 
     
        real_server 192.168.122.102 80 {      #实际web server地址
            weight 3               #(权重) 
            TCP_CHECK { 
            connect_timeout 10       #(10秒无响应超时) 
            nb_get_retry 3 
            delay_before_retry 3 
            connect_port 80 
            } 
        } 
        real_server 192.168.122.103 80 { 
            weight 3 
            TCP_CHECK { 
            connect_timeout 10 
            nb_get_retry 3 
            delay_before_retry 3 
            connect_port 80 
            } 
         } 
    }  

7、配置完成后可用以下命令检查配置是否正确

ipvsadm -L -n   #查看ipvsadm的配置。在这里需要两台web服务器启动服务。否则只能看到VIP的配置
ip addr list        #查看是否和VIP绑定

8、在两台web server中安装httpd服务,并配置realserver脚本

yum -y install httpd     #安装httpd服务。安装后要创建默认页
echo  "this is one site" >/var/www/html/index.html     #另一台同样创建,修改一下默认页内容,以便分辨访问的网站
service httpd restart

配置realserver脚本

    #vi /etc/init.d/realserver.sh     #此脚本是为了配置必须的ip选项并生成虚拟IP
    #!/bin/bash 

    SNS_VIP=192.168.122.100    #虚拟IP地址  
      
    . /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  

创建完脚本后执行
./realserver.sh start  启动脚本。启动成功使用ifconfig可以看到创建的lo:0的虚拟地址

8、在两台keepalived上重启keepalived服务,并使用ipvsadm -L -n查看配置,应有以下结果

   -> RemoteAddressort:port           Forward   Weight   ActiveConn   InActConn
TCP  192.168.122.100:80 rr
  -> 192.168.122.102:80                       Route   2      0          2
  -> 192.168.122.103:80                       Route   1      0          1 

9、登陆192.168.122.1,使用浏览器或者curl验证负载结果

[root@localhost ~]# curl 192.168.122.100
this is one site

10、停掉Master DR,观察Slave DR接管调度任务。停掉一台web服务器,观看另一台web服务是否可继续提供服务。

       使用ipvsadm -L -n查看访问效果。

       tail -f /var/log/httpd/access.log   #查看web日志



本文出自 “余 小 亮” 博客,请务必保留此出处http://yuliangliang.blog.51cto.com/4664834/1567573

搭建LVS+Keepalived负载均衡