美文网首页
第八章----RabbitMQ+HAProxy+Keepaliv

第八章----RabbitMQ+HAProxy+Keepaliv

作者: 枫子夜 | 来源:发表于2020-04-25 15:35 被阅读0次

    1. HAProxy

    RabbitMQ的集群和镜像队列实现了高吞吐量和高可用,现在我们来用HAProxy实现负载均衡功能。

    HAProxy是一个使用C语言编写的自由及开放源代码软件,提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy支持从4层至7层的网络交换,即覆盖所有的TCP协议。根据官方数据,其最高极限支持10G的并发。

    • 下载地址
      HAproxy官网需要翻墙才能访问,这里已经为大家下载好了当前最新版本:HAProxy-2.1.4 密码:21pz

    • 上传并解压

    rz
    tar -zxf haproxy-2.1.4.tar.gz
    
    • 安装依赖
    yum install -y openssl openssl-devel systemd-devel.x86_64
    
    • 进入haproxy目录编译安装
    cd haproxy-2.1.4/
    # USE_OPENSSL=1 :开启https,USE_SYSTEMD=1:指定为systemd模式,PREFIX=/usr/local/haproxy:指定安装目录
    make TARGET=linux-glibc  PREFIX=/usr/local/haproxy USE_OPENSSL=1 USE_SYSTEMD=1 USE_PCRE=1  USE_ZLIB=1 PREFIX=/usr/local/haproxy && make install 
    
    • 编辑启动脚本(修改成自己的安装路径)
    vim /usr/lib/systemd/system/haproxy.service
    
    [Unit]
    Description=HAProxy Load Balancer
    After=network.target
    
    [Service]
    ExecStartPre=/usr/local/sbin/haproxy -f /etc/haproxy/haproxy.cfg   -c -q
    ExecStart=/usr/local/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg  -p /run/haproxy.pid
    ExecReload=/bin/kill -USR2 $MAINPID
    
    [Install]
    WantedBy=multi-user.target
    
    • 开启haproxy日志
    vim /etc/rsyslog.conf
    
    $ModLoad imudp
    $UDPServerRun 514
    #添加
    local0.*         /var/log/haproxy.log
    
    # 编辑rsyslog
    vim /etc/sysconfig/rsyslog
    
    SYSLOGD_OPTIONS="-r -m 0 -c 2"
    
    • 添加启动用户
    useradd -r haproxy
    usermod -G haproxy haproxy
    
    • 创建配置文件及启动目录
    mkdir -p /var/lib/haproxy
    touch /var/lib/haproxy/stats
    mkdir /etc/haproxy
    
    vim /etc/haproxy/haproxy.cfg
    
    global
        log 127.0.0.1   local0 info
        chroot      /var/lib/haproxy
        pidfile     /var/run/haproxy.pid
        maxconn     1020   # See also: ulimit -n
        user        haproxy
        group       haproxy
        daemon
        # turn on stats unix socket
        stats socket /var/lib/haproxy/stats.sock mode 600 level admin
        stats timeout 2m
    defaults
        mode    tcp
        log     global
        option  dontlognull
        option  redispatch
        timeout http-request      10s
        retries                   3
        timeout queue             45s
        timeout connect           10s
        timeout client            1m
        timeout server            1m
        timeout http-keep-alive   10s
        timeout check             10s
        maxconn                   1020
    listen stats
        mode http
        bind 0.0.0.0:8100
        stats enable
        stats uri     /stats
        stats realm   Haproxy\ Statistics
        stats auth    fzb:123456
        stats admin if TRUE
    
    #绑定配置
    listen rabbitmq_cluster
        bind 0.0.0.0:5670
        #配置TCP模式
        mode tcp
        #加权轮询
        balance roundrobin
        #RabbitMQ集群节点配置
        server rabbit1 127.0.0.1:5672 check inter 5000 rise 2 fall 3 weight 1
        server rabbit2 127.0.0.1:5673 check inter 5000 rise 2 fall 3 weight 1
        server rabbit3 127.0.0.1:5674 check inter 5000 rise 2 fall 3 weight 1
    
    • 重启服务和日志
    systemctl restart haproxy
    systemctl restart rsyslog
    
    • 设置开机启动
    systemctl enable haproxy
    
    • 访问控制台输入配置的用户名密码(这里我只配置了一个rabbit应用)
    HAProxy控制台

    2. Keepalived

    HAProxy只提供了对RabbitMQ的负载均衡,假设HAProxy宕机了呢,系统将不能向外提供服务,这里我们就需要引入Keepalived健康检查工具,它能够通过自身健康检查、资源接管功能做高可用(双机热备),实现故障转移。

    Keepalived采用VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议),以软件的形式实现服务器热备功能。

    通常情况下是将两台Linux服务器组成一个热备组(Master和Backup),同一时间热备组内只有一台主服务器Master提供服务,同时Master会虚拟出一个公用的虚拟IP地址,简称VIP。这个VIP只存在在Master上并对外提供服务。

    如果Keepalived检测到Master宕机或者服务故障,备份服务器Backup会自动接管VIP称为Master,Keepalived并将原Master从热备组中移除。当原Master恢复后,会自动加入到热备组,默认再抢占称为Master,起到故障转移的功能。

    rz
    tar -zxf keepalived-2.0.20.tar.gz
    
    • 安装依赖
    yum install -y gcc openssl-devel popt-devel
    yum -y install libnl libnl-devel
    yum install -y libnfnetlink-devel
    
    • 编译安装
    cd keepalived-2.0.20
    ./configure --prefix=/usr/local/keepalived
    make && make install
    
    • 修改配置文件位置
    cp keepalived/etc/init.d/keepalived /etc/init.d/
    mkdir /etc/keepalived
    cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
    cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
    
    • 启动命令并设置开机自启
    systemctl start keepalived
    systemctl enable keepalived
    

    3. 搭建高可用架构

    架构图

    如图所示,两台Keepalived服务器之间通过VRRP进行交互,对外部虚拟出一个VIP为192.168.1.100。Keepalived与HAProxy部署在同一台机器上,两个Keepalived服务实例匹配两个HAProxy服务实例,这样通过Keeaplived实现HAProxy的双机热备。

    正常情况下调用路径为实线标示的路径,当master挂掉或者master下haproxy挂掉,会自动切换到backup上也就是虚线路径。

    • 修改master配置文件
    vim /etc/keepalived/keepalived.conf
    
    
    #Keepalived配置文件
    global_defs {
            router_id NodeA                 #路由ID, 主备的ID不能相同
    }
     
    #自定义监控脚本
    vrrp_script chk_haproxy {
            script "/etc/keepalived/check_haproxy.sh"
            interval 5
            weight 2
    }
     
    vrrp_instance VI_1 {
            state MASTER #Keepalived的角色。Master表示主服务器,从服务器设置为BACKUP
            interface eth0          #指定监测网卡
            virtual_router_id 1
            priority 100            #优先级,BACKUP机器上的优先级要小于这个值
            advert_int 1            #设置主备之间的检查时间,单位为s
            authentication {        #定义验证类型和密码
                    auth_type PASS
                    auth_pass root123
            }
            track_script {
                    chk_haproxy
            }
            virtual_ipaddress {     #VIP地址,可以设置多个:
                    192.168.1.100
            }
    }
    
    • 配置backup配置文件
    vim /etc/keepalived/keepalived.conf
    
    #Keepalived配置文件
    global_defs {
            router_id NodeB                 #路由ID, 主备的ID不能相同
    }
     
    #自定义监控脚本
    vrrp_script chk_haproxy {
            script "/etc/keepalived/check_haproxy.sh"
            interval 5
            weight 2
    }
     
    vrrp_instance VI_1 {
            state BACKUP #Keepalived的角色
            interface eth0          #指定监测网卡
            virtual_router_id 1
            priority 50            #优先级
            advert_int 1            #设置主备之间的检查时间,单位为s
            authentication {        #定义验证类型和密码
                    auth_type PASS
                    auth_pass root123
            }
            track_script {
                    chk_haproxy
            }
            virtual_ipaddress {     #VIP地址,可以设置多个:
                    192.168.1.100
              }
    }
    
    • 为了防止HAProxy服务挂了,但是Keepalived却还在正常工作而没有切换到Backup上,所以这里需要编写一个脚本来检测HAProxy服务的状态。当HAProxy服务挂掉之后该脚本会自动重启HAProxy的服务,如果不成功则关闭Keepalived服务,如此便可以切换到Backup继续工作。
    vim /etc/keepalived/check_haproxy.sh
    
    #!/bin/bash
    if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
        /etc/init.d/keepalived stop
    fi
    
    • 添加权限 并重启
    chmod +x /etc/keepalived/chkHaproxy.sh
    
    systemctl restart keepalived
    
    • 客户端用192.168.1.100 IP地址调用即可

    春暖花开,想去爬山...

    相关文章

      网友评论

          本文标题:第八章----RabbitMQ+HAProxy+Keepaliv

          本文链接:https://www.haomeiwen.com/subject/xapfwhtx.html