rabbitmq集群 + Haproxy 负载均衡+ Keepalived高可用

本文详细介绍了如何在Linux CentOS7环境下搭建RabbitMQ集群,并通过Haproxy实现负载均衡,以及利用Keepalived确保高可用性。配置包括主机名设置、Haproxy的安装与配置、Keepalived的安装与配置,以及通过虚拟IP实现故障切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我的上篇文章写rabbitmq搭建集群  ,本文章是是继续上篇文章的,本次是搭建负载均衡和高可用 

正文入题

    负载均衡 采用 Haproxy 如果是Nginx 请看(https://blog.youkuaiyun.com/qq_20448967/article/details/80956691)我这篇文章关于Nginx搭建 (!!!注意 后来重新用Nginx补上 请看文章最后),都是大同小异  

    解决高可用 采用是 KeepAlived 

    准备好两台机器 比如我是 10.0.0.195  10.0.0.194  系统采用是linux centos7  


开始搭建 
   
   首先配置搭建环境  配置 主机名 和其他机器能通讯

   192:命令
          vim /ect/hostname
              gavin194
      保存退出
      
      命令 
           vim /ect/hosts

             10.0.0.191 gavin91
             10.0.0.192 gavin192 
             10.0.0.193 gavin193
             10.0.0.193 gavin194
             10.0.0.193 gavin195

   195:命令
          vim /ect/hostname
             gavin195      

        保存退出
              
      命令 
          vim /ect/hosts

                 10.0.0.191 gavin91
                 10.0.0.192 gavin192 
                 10.0.0.193 gavin193
                 10.0.0.193 gavin194
                 10.0.0.193 gavin195
        保存退出
        
   重启机器 让主机名生效 


一  搭建 Haproxy

下载和安装 以下命令 两台机器都是需要同样操作 可以直接复制执行即可 
   
     wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.5.tar.gz  ##这个官网好被禁了 需要翻墙  点击我百度云盘 https://pan.baidu.com/s/1kxkBnQiTv0fnUHzcA3y5WA

     ##解压
     tar -zxvf haproxy-1.6.5.tar.gz -C /usr/local
     ## 进入目录 
     cd /usr/local/haproxy-1.6.5
     ##编译
     make TARGET=linux31 PREFIX=/usr/local/haproxy
     ##安装
     make install PREFIX=/usr/local/haproxy
    
     ##创建目录 
     mkdir /etc/haproxy
     ## 进入目录
     
     cd  /etc/

     ##授权

     groupadd -r -g 149 haproxy

     useradd -g haproxy -r -s /sbin/nologin -u 149 haproxy

     #然后创建配置文件
     touch /etc/haproxy/haproxy.cfg

     ##配置文件

     vim /etc/haproxy/haproxy.cfg
     
     ##配置文件全部内容  这个机器的配置是194
       #logging options
        global
            log 127.0.0.1 local0 info
            maxconn 5120
            chroot /usr/local/haproxy
            uid 99
            gid 99
            daemon
            quiet
            nbproc 20
            pidfile /var/run/haproxy.pid

        defaults
            log global
            #使用4层代理模式,”mode http”为7层代理模式
            mode tcp
            #如果将模式设置为tcp,则将tcplog更改为httplog 
            option tcplog
            option dontlognull
            retries 3
            option redispatch
            maxconn 2000
            contimeout 5s
            ##客户端空闲超时时间为 60秒 则HA 发起重连机制
            clitimeout 60s
            ##服务器端链接超时时间为 15秒 则HA 发起重连机制
            srvtimeout 15s    
           #前端IP为消费者和生产者
        listen rabbitmq_cluster
            bind 0.0.0.0:5672
            #配置TCP模式
            mode tcp
            #策略轮询
            balance roundrobin
            #rabbitmq集群节点配置 #inter 每隔三秒对mq集群做健康检查, 2次正确证明服务器可用,2次失败证明服务器不可用,并且配置主备机制
            server gavin191 10.0.0.191:5672 check inter 3000 rise 2 fall 2
            server gavin192 10.0.0.192:5672 check inter 3000 rise 2 fall 2
            server gavin193 10.0.0.193:5672 check inter 3000 rise 2 fall 2
        #配置haproxy web监控,查看统计信息
        listen stats
            bind 10.0.0.194:8100  ###配置本机的地址
            mode http
            option httplog
            stats enable
            #设置haproxy监控地址为http://10.0.0.194:8100/haproxy
            stats uri /haproxy
            stats refresh 5s

   保存退出 

  接下来是 195 机器的配置    

    vim /etc/haproxy/haproxy.cfg

    ##全部内容是 
      #logging options
        global
            log 127.0.0.1 local0 info
            maxconn 5120
            chroot /usr/local/haproxy
            uid 99
            gid 99
            daemon
            quiet
            nbproc 20
            pidfile /var/run/haproxy.pid

        defaults
            log global
            #使用4层代理模式,”mode http”为7层代理模式
            mode tcp
            #如果将模式设置为tcp,则将tcplog更改为httplog 
            option tcplog
            option dontlognull
            retries 3
            option redispatch
            maxconn 2000
            contimeout 5s
            ##客户端空闲超时时间为 60秒 则HA 发起重连机制
            clitimeout 60s
            ##服务器端链接超时时间为 15秒 则HA 发起重连机制
            srvtimeout 15s    
           #前端IP为消费者和生产者

        listen rabbitmq_cluster
            bind 0.0.0.0:5672
            #配置TCP模式
            mode tcp
            #简单的轮询
            balance roundrobin
            #rabbitmq集群节点配置 #inter 每隔三秒对mq集群做健康检查, 2次正确证明服务器可用,2次失败证明服务器不可用,并且配置主备机制
            server gavin191 10.0.0.191:5672 check inter 3000 rise 2 fall 2
            server gavin192 10.0.0.192:5672 check inter 3000 rise 2 fall 2
            server gavin193 10.0.0.193:5672 check inter 3000 rise 2 fall 2
        #配置haproxy web监控,查看统计信息
        listen stats
            bind 10.0.0.195:8100  ###配置本机的地址
            mode http
            option httplog
            stats enable
            #设置haproxy监控地址为http://10.0.0.195:8100/haproxy
            stats uri /haproxy
            stats refresh 5s

    保存退出 


  启动haproxy 

    命令 
       /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg

  访问haproxy 打开浏览器
    http://10.0.0.194:8100/haproxy
    http://10.0.0.195:8100/haproxy
 
  如果访问不到 那可能是防火墙的问题

     命令  systemctl status firewalld  其他版本的系统就百度一下吧 或者开启对应的端口也行
  
  到这已经完成了 负载均衡了 算成功了一半

二 搭建 Keepalived

    下载两台机器同操作 
       命令 
          wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz

    解压 编译  安装

      命令 
         tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/
     
         cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived

         make && make install

    安装后做一些修改 将keepalived安装成Linux系统服务     

    首先创建文件夹 将keepalived配置文件进行复制
       命令 
         mkdir /etc/keepalived

         cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

         cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
         
         cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    建立软连接,    
        ln -s /usr/local/sbin/keepalived /usr/sbin/
        
        ## 执行下面命令可能会遇到文件已存在错误
        ln -s /usr/local/keepalived/sbin/keepalived /sbin/

    如果出现     文件已存在错误  删除
    进入 这个目录下 
         rm -f /usr/sbin/keepalived
     
   Keepalived配置 分别在194 和195 各配置 

   首先配置 194 为主机 

     命令 
        vim /etc/keepalived/keepalived.conf

        ## 这是全部内容 

        ! Configuration File for keepalived

            global_defs {
               router_id gavin194  ##标识节点的字符串,通常为hostname

            }

            vrrp_script chk_haproxy {
                script "/etc/keepalived/haproxy_check.sh"  ##执行脚本位置
                interval 2  ##检测时间间隔
                weight -20  ##如果条件成立则权重减20
            }

            vrrp_instance VI_1 {
                state MASTER    ## 主节点为MASTER,备份节点为BACKUP
                interface enp0s3 ## 绑定虚拟IP的网络接口(网卡),与本机IP地址所在的网络接口相同(我这里是enp0s3)
                virtual_router_id 90  ## 虚拟路由ID号(主备节点一定要相同)
                mcast_src_ip 10.0.0.194  ## 本机ip地址
                priority 100  ##优先级配置(0-254的值)
                nopreempt
                advert_int 1  ## 组播信息发送间隔,俩个节点必须配置一致,默认1s
            authentication {  ## 认证匹配 和 备份节点一样
                    auth_type PASS
                    auth_pass gavin
                }

                track_script {
                    chk_haproxy
                }

                virtual_ipaddress {
                    10.0.0.94  ## 虚拟ip,可以指定多个
                }
            }

    然后配置 195 

        vim /etc/keepalived/keepalived.conf

      
        ## 这是全部内容 

        ! Configuration File for keepalived

        global_defs {
           router_id gavin195  ##标识节点的字符串,通常为hostname

        }

        vrrp_script chk_haproxy {
            script "/etc/keepalived/haproxy_check.sh"  ##执行脚本位置
            interval 2  ##检测时间间隔
            weight -20  ##如果条件成立则权重减20
        }

        vrrp_instance VI_1 {
            state BACKUP  ## 主节点为MASTER,备份节点为BACKUP
            interface enp0s3 ## 绑定虚拟IP的网络接口(网卡),与本机IP地址所在的网络接口相同(我这里是enp0s3)
            virtual_router_id 90  ## 虚拟路由ID号(主备节点一定要相同)
            mcast_src_ip 10.0.0.195  ## 本机ip地址
            priority 90  ##优先级配置(0-254的值)
            nopreempt
            advert_int 1  ## 组播信息发送间隔,俩个节点必须配置一致,默认1s
        authentication {  ## 认证匹配
                auth_type PASS
                auth_pass gavin
            }

            track_script {
                chk_haproxy
            }

            virtual_ipaddress {
                10.0.0.94  ## 虚拟ip,可以指定多个
            }
        }


   
   然后配置脚本 添加文件位置为/etc/keepalived/haproxy_check.sh 分别为 194和195各一份
  
     命令
  
        vim /etc/keepalived/haproxy_check.sh
  
        ###这一下所有的内容 ,意思就是 不停监控 如果发现有 haproxy 有死掉就重启 如果haproxy 起不来 都死掉 就直接关闭 keepalived

        #!/bin/bash
        COUNT=`ps -C haproxy --no-header |wc -l`
        if [ $COUNT -eq 0 ];then
            /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
            sleep 2
            if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
                killall keepalived
            fi
        fi

  保存退出


   然后授权 
    
     命令 
       
       chmod +x /etc/keepalived/haproxy_check.sh


 然后启动 keepalived
   
    命令 
       service keepalived start    

  
  如果启动报错 如下 

  [root@gavin194 sbin]# service keepalived start 
    Starting keepalived (via systemctl):  Job for keepalived.service failed. See 'systemctl status keepalived.service' and 'journalctl -xn' for details.
                                                               [失败]
    [root@gavin194 sbin]# systemctl status keepalived.service 
    keepalived.service - SYSV: Start and stop Keepalived
       Loaded: loaded (/etc/rc.d/init.d/keepalived)
       Active: failed (Result: exit-code) since 三 2018-12-29 15:02:23 CST; 8s ago
      Process: 16720 ExecStart=/etc/rc.d/init.d/keepalived start (code=exited, status=1/FAILURE)


    12月 29 15:02:23 edu-proxy-01 systemd[1]: Starting SYSV: Start and stop Keepalived...
    12月 29 15:02:23 edu-proxy-01 keepalived[16720]: Starting keepalived: Usage: /sbin/keepalived {start|stop|reload|restart|condrestart|status}
    12月 29 15:02:23 edu-proxy-01 keepalived[16720]: [失败]
    12月 29 15:02:23 edu-proxy-01 systemd[1]: keepalived.service: control process exited, code=exited status=1
    12月 29 15:02:23 edu-proxy-01 systemd[1]: Failed to start SYSV: Start and stop Keepalived.
    12月 29 15:02:23 edu-proxy-01 systemd[1]: Unit keepalived.service entered failed state.


  这是时候之前没有拷贝那份的 keepalived-s 就用了  解决

    命令 
    
    rm -f /usr/sbin/keepalived 

    cp /usr/local/keepalived/sbin/keepalived  /usr/sbin/


   然后再启动

       service keepalived start

   停止
      service keepalived stop     

   查看 
     service keepalived  status 

   重启
    service keepalived   restart


   这时也可以用 ip a 查看  

   在194 查看 这时候 可以看到虚拟ip  如果停止了 194 的话  在195  命令 ip a 也可以查看虚拟 ip   : 10.0.0.94


   然后客户端连接rabbitmq  的ip 是 从虚拟ip 

   如 10.0.0.94:5672 

   以上就是rabbitmq集群 加 负载均衡 和 Haproxy的高可用  如果想用Nginx做反向代理 请看这遍文章 《补充rabbitmq镜像队列集群在Nginx的负载均衡的配置》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值