• LVS + keepalived + tomcat负载均衡及高可用实现(初级)


    1、首先检测Linux服务器是否支持ipvs

      执行如下命令:modprobe -l|grep ipvs

      输出:

    kernel/net/netfilter/ipvs/ip_vs.ko
    kernel/net/netfilter/ipvs/ip_vs_rr.ko
    kernel/net/netfilter/ipvs/ip_vs_wrr.ko
    kernel/net/netfilter/ipvs/ip_vs_lc.ko
    kernel/net/netfilter/ipvs/ip_vs_wlc.ko
    kernel/net/netfilter/ipvs/ip_vs_lblc.ko
    kernel/net/netfilter/ipvs/ip_vs_lblcr.ko
    kernel/net/netfilter/ipvs/ip_vs_dh.ko
    kernel/net/netfilter/ipvs/ip_vs_sh.ko
    kernel/net/netfilter/ipvs/ip_vs_sed.ko
    kernel/net/netfilter/ipvs/ip_vs_nq.ko
    kernel/net/netfilter/ipvs/ip_vs_ftp.ko
    kernel/net/netfilter/ipvs/ip_vs_pe_sip.ko

    表示支持!

    否则需要手动下载安装ipvs

    2、检查是否已经安装所必须的包

      执行如下命令:

      rpm -q kernel-devel   
      rpm -q gcc   
      rpm -q openssl   
      rpm -q openssl-devel
      rpm -q popt

      rpm -q popt-static

       rpm -q kernel-headers

      输出:package ** is not installed  需要手动安装;

      yum命令是安装,更新,删除依赖包的命令;相当于一个软件包管理器;

      安装方法:yum install kernel-devel -y 

          yum install gcc -y

          ……

    3、安装ipvsadm

      首先确定安装的版本,安装的版本应该与Linux内核版本一致;

      通过:rpm -q kernel-devel  查看内核版本,根据内核版本,下载相对应的ipvsadm;

      我的内核版本:kernel-devel-2.6.32-642.3.1.el6.x86_64

      对应的ipvsadm版本:ipvsadm-1.26.tar.gz

    4、解压

      tar -zxvf ipvsadm-1.26.tar.gz

    5、建立软连接

      ln -s /usr/src/kernels/2.6.32-642.3.1.el6.x86_64 /usr/src/linux

    6、编译安装

      进入到ipvsadm-1.26下

      执行 make && make install

      报错可能是依赖的包缺失,需要安装:yum install -y libnl* popt*

      至此,安装ipvsadm成功  

    7、keepalive安装

      下载地址:http://www.keepalived.org/software/

      解压;

      进入到keepalive目录:cd keepalived-1.2.19

      执行  ./configure

      等待…………

      执行  make

      等待…………

      执行  make install

      安装完成。

     8、配置主从服务器

      进入如下目录: /usr/local/etc/keepalived/   打开keepalived.conf文件

     

     1 ! Configuration File for keepalived
     2 
     3 global_defs {
     4    notification_email {
     5      acassen@firewall.loc
     6      failover@firewall.loc
     7      sysadmin@firewall.loc
     8    }
     9    notification_email_from Alexandre.Cassen@firewall.loc
    10    smtp_server 127.0.0.1
    11    smtp_connect_timeout 30
    12    router_id LVS_DEVEL
    13 }
    14 
    15 vrrp_instance VI_1 {
    16     state MASTER
    17     interface eth0
    18     virtual_router_id 230 
    19     priority 100 
    20     advert_int 1
    21     authentication {
    22         auth_type PASS
    23         auth_pass 1111
    24     }
    25     virtual_ipaddress {
    26         192.168.91.230
    27     }
    28 }
    29 
    30 virtual_server 192.168.91.230 8080 {
    31     delay_loop 6
    32     lb_algo rr
    33     lb_kind DR
    34     nat_mask 255.255.255.0
    35     persistence_timeout 0 
    36     protocol TCP
    37 
    38     real_server 192.168.91.231 8080 {
    39         weight 1
    40         TCP_CHECK {
    41             connect_timeout 3
    42             nb_get_retry 3
    43             delay_before_retry 3
    44             connect_port 8080
    45         }
    46     }
    47     real_server 192.168.91.232 8080 {
    48         weight 1
    49         TCP_CHECK {
    50             connect_timeout 3
    51             nb_get_retry 3
    52             delay_before_retry 3
    53             connect_port 8080
    54         }
    55     }
    56 }
    主服务器
    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        interface eth0
        virtual_router_id 230 
        priority 99
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.91.230
        }
    }
    
    virtual_server 192.168.91.230 8080 {
        delay_loop 6
        lb_algo rr
        lb_kind DR
        nat_mask 255.255.255.0
        persistence_timeout 0 
        protocol TCP
    
        real_server 192.168.91.231 8080 {
            weight 1
            TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 8080
            }
        }
        real_server 192.168.91.232 8080 {
            weight 1
            TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 8080
            }
        }
    }
    备服务器

    9、配置LVS server客户端

      执行如下脚本即可:

    #!/bin/bash  
    # description: Config realserver  
    LVS_VIP=192.168.91.230  
    /etc/rc.d/init.d/functions  
    case "$1" in  
    start)  
           /sbin/ifconfig lo:0 $LVS_VIP netmask 255.255.255.255 broadcast $LVS_VIP  
           /sbin/route add -host $LVS_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)  
           /sbin/ifconfig lo:0 down  
           /sbin/route del $LVS_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  

    10、keepalived的启动

      service keepalived start  或者 keepalived -D -f /usr/local/etc/keepalived/keepalived.conf

      查看日志:tail -f /var/log/messages

      在默认情况下,Keepalived在启动时会查找/etc/Keepalived/Keepalived.conf配置文件

    小结:到此为止,当主服务器或者从服务器上的tomcat挂掉之后,不会对客户端产生影响;

    上述keepalived健康检测是协议检测,也就是说跟业务无关;

    遗留问题:

    1、  本机realserver宕掉后,不会切换到从服务器;(已解决,未配置LVS server客户端)

    2、  Kill掉keepalived后,另一个不会自动接管VIP(已解决  是防火墙的原因,关闭防火墙即可)

    3、  通过ip a命令,查看,两个机器同时占有VIP(已解决  是防火墙的原因,关闭防火墙即可)

      同时keepalived  kill掉之后,另一个会主动接管虚IP  killall keepalived   (杀掉keepalive进程 ,kill 与 all之间没有空格)

    一些常用命令:

      ip a 查看此时VIP是否启用

      正常情况,输出:

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 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 192.168.91.230/32 brd 192.168.91.230 scope global lo:0
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
        link/ether 00:23:ae:9e:0e:20 brd ff:ff:ff:ff:ff:ff
        inet 192.168.91.231/24 brd 192.168.91.255 scope global eth0
        inet 192.168.91.230/32 scope global eth0
        inet6 fe80::223:aeff:fe9e:e20/64 scope link 
           valid_lft forever preferred_lft forever

      VIP未被此机抢占,输出:

      

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 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 192.168.91.230/32 brd 192.168.91.230 scope global lo:0
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
        link/ether 00:23:ae:ae:e4:e8 brd ff:ff:ff:ff:ff:ff
        inet 192.168.91.232/24 brd 192.168.91.255 scope global eth0
        inet6 fe80::223:aeff:feae:e4e8/64 scope link 
           valid_lft forever preferred_lft forever

      查看转发路由、转发规则命令:ipvsadm -ln

    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  192.168.91.230:8080 rr
      -> 192.168.91.231:8080          Local   1      0          0         
      -> 192.168.91.232:8080          Route   1      0          0        

      

      

  • 相关阅读:
    轻节点如何验证交易的存在
    梯度爆炸/消失与初始化参数
    归一化能够加速训练的原因
    正则化可以防止过拟合的原因
    关于周志华《机器学习》中假设空间规模大小65的计算
    linux学习0001
    目标检测算法
    opencv安装与卸载
    前端学习02
    前端学习01
  • 原文地址:https://www.cnblogs.com/tengpan-cn/p/5776574.html
Copyright © 2020-2023  润新知