• LVS+Keppalived实现高可用负载均衡


    三、LVS Keppalived的安装

    3.1、环境描述

    LVS server1 (Master):10.0.0.202 虚拟IP为:10.0.0.210

    LVS server2 ( Slave ) :10.0.0.203虚拟IP为:10.0.0.210

    WEB server1: 10.0.0.201  网关为:10.0.0.254

    WEB server2; 10.0.0.204  网关为:10.0.0.254

    注意:所有集群服务器时间要一致

    3.2、安装LVS

    注意此动作。否则MAKE直接报错。

    如果没有/2.6.32-279.el6.x86_64 这个目录,请安装内核开发包   

    # yum -y install kernel-devel

    # ln -s /usr/src/kernels/2.6.32-279.el6.x86_64/ /usr/src/linux(根据自己实际的内核,千万不能复制粘贴,千万!!!!)

    # tar -xvf ipvsadm-1.24.tar.gz

    # cd ipvsadm-1.24

    #make && make install

    # ipvsadm –L

    3.3、安装Keepalived

    # tar –xvf keepalived-1.2.12.tar.gz

    #./configure --sysconf=/etc/ --with-kernel-dir=/usr/src/kernels/2.6.32-279.el6.x86_64/

    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/

    ERRR:

      !!! OpenSSL is not properly installed on your system. !!!

      !!! Can not include OpenSSL headers files.            !!!

    解决:yum install -y openssl openssl-devel

    3.3、主(master)配置Keepalived配置文件

    ! Configuration File for keepalived
    global_defs {  #全局定义
       notification_email { #定义邮件
          alvin@126.com  #定义邮件地址
       }
       notification_email_from alvin@126.com #定义邮件地址
       smtp_server mail.126.com #邮件服务器
       smtp_connect_timeout 30 #邮件超时时间
       router_id LVS_DEVEL #route_id标识
    
    }
    vrrp_instance VI_1 { #定义VRR组,
        state MASTER  #定义为MASTER主
        interface eth1 #对外访问的网络接口
        virtual_router_id 100 #虚拟路由标识。注意主从要一致
        priority 100 #主从优先级,主的优先级要高于从。注意
        advert_int 1 #:广播周期秒数
        authentication {
            auth_type PASS
            auth_pass 2209
        }
        virtual_ipaddress {
            10.0.0.210 #:虚拟VIP地址,真实环境这里应该是公网IP
     }
    }
    virtual_server 10.0.0.210 80 { #:虚拟VIP地址 与 端口,DR架构WEB端口要和虚拟端口监听一致。否则将无法访问
        delay_loop 6 #健康检查时间间隔,单位是秒
        lb_algo rr   #调用算法为RR
        lb_kind DR   #调用架构模式为DR
        persistence_timeout 0 #:同一IP 50秒内的请求都发到同个real server
        protocol TCP  #使用TCP协议
        real_server 10.0.0.201 80 {#:真实WEB服务器地址与端口
         weight 1 #:转发伐值,越高调用的越多
            TCP_CHECK {
            connect_timeout 10   #:连接超时为10秒
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80  #连接端口为80,要和上面的保持一致
    }
        }
    
        real_server 10.0.0.204 80 {
            weight 1
            TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
    
            }
     
         }
    
    }
    

    3.4、从(Slave)配置Keepalived配置文件

    主从配置区别:

     state BACKUP   #状态改成BACKUP
     priority 90     #优先级要低于主
     interface eth1  #网络接口注意和本机对应,

    其它的配置文件内容和主的一样

    3.5、配置WEBserver,所有的WEB脚本都一样

    # vim realserver.sh

    如下:

    #!/bin/bash
    # Written by NetSeek
    # description: Config realserver lo and apply noarp
    WEB_VIP="10.0.0.210"        #:修改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
     

    3.5、启动WEB server的脚本

    # ./ realserver.sh start

    # ip add list

    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.0.210/32 brd 10.0.0.210 scope global lo:0  是否有VIP

        inet6 ::1/128 scope host

    3.6、启动LVS

    在LVS主从服务器上启动LVS

    # /etc/init.d/keepalived start

    在MASTER服务器上会看到VIP,当MASTER挂了之后。VIP将自动切换到SLAVE(从)

    # /etc/init.d/keepalived start

    eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

        link/ether 00:0c:29:8c:4c:ec brd ff:ff:ff:ff:ff:ff

        inet 10.0.0.202/16 brd 10.0.255.255 scope global eth1

        inet 10.0.0.210/32 scope global eth1 是否有VIP有则OK

        inet6 fe80::20c:29ff:fe8c:4cec/64 scope link

        valid_lft forever preferred_lft forever

    3.7、访问测试

    是否可以看到WEBIP

    # 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.0.210:http rr

      -> 10.0.0.204:http              Route   1      0          0        

      -> 10.0.0.201:http              Route   1      0          0     

    然后通过浏览器访问:http://10.0.0.210 看看是否可以访问?

    配置文件里面设置了。同一IP,50秒内定为一台WEBserver保证数据的完整连接。

    如果80端口无非是用。请更该为81试试。?〉〉

  • 相关阅读:
    微服务下的持续集成-Jenkins自动化部署GitHub项目
    JDK新特性-Lambda表达式的神操作
    ActiveMQ详细入门教程系列(一)
    程序员必须了解的知识点——你搞懂mysql索引机制了吗?
    面试之后,扼腕叹息。
    哎,这让人抠脑壳的 LFU。
    延迟消息的五种实现方案
    Java实现Kafka生产者和消费者的示例
    Pytorch训练时显存分配过程探究
    Python命令行参数定义及注意事项
  • 原文地址:https://www.cnblogs.com/losbyday/p/5859284.html
Copyright © 2020-2023  润新知