zoukankan      html  css  js  c++  java
  • LVS+keepalived DR模式配置高可用负载均衡集群

    实验环境

    LVS-Master 10.0.100.201

     VIP:10.0.100.203

    LVS-Slave      
    10.0.100.204
    WEB1-Tomcat 10.0.2.29 gateway:10.0.2.253
    WEB2-Tomcat 10.0.100.202

    (注意:应保持所有服务器的时间一致)                                                  

    Install LVS

    # ln -s /usr/src/kernels/2.6.32-431.el6.i686/ /usr/src/linux  
    //若找不到这个目录则先安装kernel-devel
    # yum -y install kernel-devel
    
    # tar xf ipvsadm-1.24.tar.gz 
    
    # cd /soft/ipvsadm-1.24
    
    # make;make install
    
    # ipvsadm -L
      IP Virtual Server version 1.2.1 (size=4096)
      Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

    Install keepalived

    # tar –xvf keepalived-1.2.12.tar.gz
    
    # ./configure --sysconf=/etc/ --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.i686/
    Keepalived version       : 1.2.12
    Compiler                 : gcc
    Compiler flags           : -g -O2
    Extra Lib                : -lssl -lcrypto -lcrypt 
    Use IPVS Framework       : Yes   //表示使用ipvs框架也代表启动ipvs功能
    IPVS sync daemon support : Yes   //表示启动ipvs的同步功能,--disabled-lvs-sysncd此参数可以关闭
    IPVS use libnl           : No    //表示使用新的libn1版本,如果想使用新的版本,需要重新安装libn1的包
    Use VRRP Framework       : Yes   //表示使用VRRP框架,这个实现keepalived高可用的必须功能
    Use VRRP VMAC            : Yes   //表示使用基础VMAC接口的xmit VRRP包
    SNMP support             : No
    SHA1 support             : No
    Use Debug flags          : No
    
    # make;make install
    
    # cp /soft/keepalived-1.2.12/bin/keepalived /usr/bin/

    配置

    1. LVS-Master的Keepalived配置

    ! Configuration File for keepalived
    //全局定义
    global_defs {  
       notification_email     //定义邮件
       { 
          xxxxxxxxx@163.com    //定义邮件地址
       }
       notification_email_from xxxxxxxxx@163.com 
       smtp_server mail.163.com //定义邮件服务器
       smtp_connect_timeout 30  //邮件超时时间
       router_id LVS_DEVEL      //route_id标识
    }
    
    //定义VRR组
    vrrp_instance VI_1 { 
        state MASTER           //定义为MASTER
        interface eth0         //对外访问的网络接口
        virtual_router_id 100  //虚拟路由标识(注意要主从一致)
        priority 100           //优先级(主肯定比从高)
        nopreempt              //不抢占模式
        advert_int 1           //广播周期秒数
        authentication {
            auth_type PASS
            auth_pass 2209
        }
        virtual_ipaddress {
            10.0.100.203      //VIP地址
     }
    }
    
    //VIP地址与端口等设置-->注意DR模式的VIP端口和所有WEB端口应该保持一致
    virtual_server 10.0.100.203 80 { 
        delay_loop 6  //健康检查时间间隔,单位秒
        lb_algo rr    //调度算法为rr
        lb_kind DR    //模式为DR
        persistence_timeout 0 //设置同一IP多少秒内的请求都发送到同一个realserver
        protocol TCP   //使用TCP协议
    
    //realserver的IP与端口等设置   
        real_server 10.0.2.29 80{ 
            weight 1 
            TCP_CHECK {
            connect_timeout 10   //连接超时时间,单位s
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80      //连接端口
    } 
    
    }
        real_server 10.0.100.202 80 {
            weight 1
            TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
            }
         }
    }
    LVS-Master:keepalived.conf

    2. LVS-Slave的keepalived配置

    ! Configuration File for keepalived
    global_defs {  
       notification_email 
       { 
          xxxxxxxxx@163.com  
       }
       notification_email_from xxxxxxxxx@163.com 
       smtp_server mail.163.com 
       smtp_connect_timeout 30 
       router_id LVS_DEVEL  
    }
    
    vrrp_instance VI_1 { 
        state BACKUP      //这里的角色是BACKUP
        interface eth0
        virtual_router_id 100  //这里注意和MASTER保持一致
        priority 90           //优先级设置应比MASTER低
        advert_int 1 
        authentication {
            auth_type PASS
            auth_pass 2209
        }
        virtual_ipaddress {
            10.0.100.203
     }
    }
    
    virtual_server 10.0.100.203 80 { 
        delay_loop 6 
        lb_algo rr   
        lb_kind DR   
        persistence_timeout 0 
        protocol TCP  
       
        real_server 10.0.2.29 80{ 
            weight 1 
            TCP_CHECK {
            connect_timeout 10   
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80  
    } 
    }
        real_server 10.0.100.202 80 {
            weight 1
            TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
            }
         }
    }
    LVS-Slave:keepalived.conf

    3. 利用脚本配置所有的WEB服务器

    #!/bin/bash
    # Written by NetSeek 
    # description: Config realserver lo and apply noarp 
    WEB_VIP="10.0.100.203"        //这里是VIP地址
    
    . /etc/rc.d/init.d/functions
    
    case "$1" in
    start)
           ifconfig lo:0 $WEB_VIP netmask 255.255.255.255 broadcast $WEB_VIP
           /sbin/route add -host $WEB_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 $WEB_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"
           ;;
    status)
            # Status of LVS-DR real server.
            islothere=`/sbin/ifconfig lo:0 | grep $WEB_VIP`
            isrothere=`netstat -rn | grep "lo:0" | grep $web_VIP`
            if [ ! "$islothere" -o ! "isrothere" ]
            then
                echo "LVS-DR real server Stopped."
            else
                echo "LVS-DR Running."
            fi 
            ;;
    *)
            # Invalid entry.
            echo "$0: Usage: $0 {start|status|stop}"
            exit 1
            ;;
    esac
    exit 0
    realserver.sh

    启动与验证

    1. 在所有WEB服务器运行脚本,并查看是否都有了VIP?

    WEB1:10.0.2.29
    # ./realserver.sh start
    RealServer Start OK
    # ip add show
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
        inet 10.0.100.203/32 brd 10.0.100.203 scope global lo:0
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    
    WEB2:10.0.100.202       
    # ./realserver.sh start
    RealServer Start OK
    # ip add show
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
        inet 10.0.100.203/32 brd 10.0.100.203 scope global lo:0
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever

    2. 在MASTER和SLAVE都启动LVS,查看VIP位置

    LVS-Master:10.0.100.201
    # /etc/init.d/keepalived start
    正在启动 keepalived:                                      [确定]
    # ip add show
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
        link/ether 00:0c:29:0f:bf:4a brd ff:ff:ff:ff:ff:ff
        inet 10.0.100.201/16 brd 10.0.255.255 scope global eth0
        inet 10.0.100.203/32 scope global eth0
        inet6 fe80::20c:29ff:fe0f:bf4a/64 scope link 
           valid_lft forever preferred_lft forever
    
    LVS-Slave:10.0.100.204
    # /etc/init.d/keepalived start
    正在启动 keepalived:                                      [确定]
    # ip add show
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
        link/ether 00:0c:29:2e:1d:0d brd ff:ff:ff:ff:ff:ff
        inet 10.0.100.204/16 brd 10.0.255.255 scope global eth0
        inet6 fe80::20c:29ff:fe2e:1d0d/64 scope link 
           valid_lft forever preferred_lft forever

    3. 访问测试(可通过浏览器访问VIP,我们测试是否在两个实验WEB服务器访问中实现了负载均衡)

    LVS-Master:10.0.100.201
    # ipvsadm -L
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  10.0.100.203:http rr
      -> 10.0.100.202:http            Route   1      0          0         
      -> 10.0.2.29:http               Route   1      0          0  
    
    LVS-Slave:10.0.100.204
    # ipvsadm -L
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  10.0.100.203:http rr
      -> 10.0.100.202:http            Route   1      0          0         
      -> 10.0.2.29:http               Route   1      0          0   
  • 相关阅读:
    【SQL-自动生成编号】按规则自动生成单据编号 以及并发问题_使用触发器、函数 等
    【C#-枚举】枚举的使用
    问题_VS2008和VS2012未能加载包.....以及破解VS2008方法
    【C#-算法】根据生日自动计算年龄_DataTime 的 DateDiff 方法
    【SQL-分组合并字符串】把相同分组的某个字段合并为同一个字符串(使用函数)
    【Winform-GataGridView】根据DataGridView中的数据内容设置行的文字颜色、背景色 — 根据状态变色
    【Winform-右下角弹窗】实现右下角弹窗,提示信息
    【WinForm-无边框窗体】实现Panel移动窗体,没有边框的窗体
    【Winfrom-适配窗体】 WinForm窗体及其控件的自适应,控件随着窗体变化
    【Winfrom-无边框窗体】Winform如何拖动无边框窗体?
  • 原文地址:https://www.cnblogs.com/snsdzjlz320/p/5797743.html
Copyright © 2011-2022 走看看