9. RabbitMQ高可用集群

9.1. RabbitMQ集群架构模式

  1. 主备模式

    用来实现RabbitMQ的高可用集群,一般是在并发和数据不是特别多的时候使用,当主节点挂掉以后会从备份节点中选择一个节点出来作为主节点对外提供服务。
    在这里插入图片描述

  2. 远程模式

    主要用来实现双活,简称为Shovel模式,所谓的Shovel模式就是让我们可以把消息复制到不同的数据中心,让两个跨地域的集群互联。
    在这里插入图片描述

  3. 镜像队列模式

    镜像队列也被称为Mirror队列,主要是用来保证mq消息的可靠性的,他通过消息复制的方式能够保证我们的消息100%不丢失,同时该集群模式也是企业中使用最多的模式。
    在这里插入图片描述

  4. 多活模式

    多活模式主要是用来实现异地数据复制,Shovel模式其实也可以实现,但是他的配置及其繁琐同时还要受到版本的限制,所以如果做异地多活我们更加推荐使用多活模式,使用多活模式我们需要借助federation插件来实现集群与集群之间或者节点与节点之前的消息复制,该模式被广泛应用于饿了么、美团、滴滴等企业。
    在这里插入图片描述

  5. 集群模式总结

    主备模式下主节点提供读写,从节点不提供读写服务,只是负责提供备份服务,备份节点的主要功能是在主节点宕机时,完成自动切换 从–>主,同时因为主备模式下始终只有一个对外提供服务那么对于高并发的情况下该模式并不合适.

    远程模式可以让我们实现异地多活的mq,但是现在已经有了更好的异地多活解决方案,所以在实际的项目中已经不推荐使用了

    镜像队列模式可以让我们的消息100%不丢失,同时可以结合HAProxy来实现高并发的业务场景所以在项目中使用得最多

9.2. 镜像队列集群搭建

  1. 集群节点规划

    ip地址用途主机名
    192.168.13.101mq 主节点server1
    192.168.13.102mq 从节点server2
    192.168.13.103mq 从节点server3
    192.168.13.104HAProxy KeepAliveserver4
    192.168.13.105HAProxy KeepAliveserver5

特别注意: 每个同学的ip可能都是不一样的,各个学员根据自己的ip进行规划,同时特别注意主机名称,因为我们后面的命令中会使用到所以需要提前设置好。

需要配置主机名的映射:

vi /etc/hosts
在这里插入图片描述
2. 复制主节点的.erlang.cookie文件到其他所有的从节点

主节点:

```shell
#停止mq的运行  |  systemctl stop rabbitmq-server
/etc/init.d/rabbitmq-server stop
#机器之间通信借助于erlang进行消息传输,所以要求集群中所有节点必须有相同的erlang.cookie
#将主节点的文件同步到到192.168.13.102和192.168.13.103中
scp /var/lib/rabbitmq/.erlang.cookie 192.168.13.102:/var/lib/rabbitmq 
scp /var/lib/rabbitmq/.erlang.cookie 192.168.13.103:/var/lib/rabbitmq
然后去了102与103上修改权限:分别执行如下
chmod 400 /var/lib/rabbitmq/.erlang.cookie
```
  1. 将从节点添加到主节点的集群中

    # 如果每个节点还没有启动的  先启动 :  systemctl start rabbitmq-server
    server2:rabbitmqctl stop_app
    #server2节点添加到server1所在集群,--ram 指定消息以内存的方式存储,如果不指定默认为磁盘存储
    server2:rabbitmqctl join_cluster --ram rabbit@server1 
    server2:rabbitmqctl start_app
    server3配置同上
    
  2. 查看集群的状态

    rabbitmqctl cluster_status
    

在这里插入图片描述
5. 访问集群中的任何一个节点的控制台查看集群情况
在这里插入图片描述

  1. 设置镜像队列策略

    # 将所有队列设置为镜像队列,即队列会被复制到各个节点:  主节点执行
    rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
    
  2. 在管控台创建一个队列然后发送一条消息查看其他节点是否接收到

在这里插入图片描述

  1. 修改集群信息

    #在任何一个节点上执行该命令修改集群的名字
    rabbitmqctl set_cluster_name rabbitmq_cd_itcast 
    #在非server2的节点上执行可以移除server2节点
    rabbitmqctl forget_cluster_node rabbit@server2 
    # 修改了信息以后可以查看修改是否成功
    rabbitmqctl cluster_status
    
  2. 总结

    到此为止我们的镜像队列的集群就搭建完成了,主要注意.erlang.cookie文件的同步和集群命令的书写

9.3. HAProxy 实现镜像队列的负载均衡

  1. HAProxy 简介

    HAProxy是一款提供高可用性、负载均衡以及基于TCP和HTTP应用的代理软件,HAProxy是完全免费的、借助HAProxy可以快速并且可靠的提供基于TCP和HTTP应用的代理解决方案。

    HAProxy适用于那些负载较大的web站点,这些站点通常又需要会话保持或七层处理。

    HAProxy可以支持数以万计的并发连接,并且HAProxy的运行模式使得它可以很简单安全的整合进架构中,同时可以保护web服务器不被暴露到网络上。

  2. HAProxy 的规划(搭建2台是为后面做HAProxy高可用做准备)

    ip用途主机名
    192.168.13.104HAProxyserver4
    192.168.13.105HAProxyserver5
  3. HAProxy 的安装

    #下载依赖包 - 如果已安装可以跳过
    yum install gcc vim wget
    # 下载haproxy
    wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.5.tar.gz
    #解压
    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
    #赋权
    groupadd -r -g 149 haproxy
    useradd -g haproxy -r -s /sbin/nologin -u 149 haproxy
    #创建haproxy配置文件
    touch /etc/haproxy/haproxy.cfg
    
  4. HAProxy 的配置

104机器ha配置

#logging options
global
    log 127.0.0.1 local0 info
    maxconn 5120
    # ha的安装地址
    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
    #if you set mode to tcp,then you nust change tcplog into httplog
    option tcplog
    option dontlognull
    retries 3
    option redispatch
    maxconn 2000
    contimeout 5s
     ##客户端空闲超时时间为 30秒 则HA 发起重连机制
     clitimeout 30s
     ##服务器端链接超时时间为 15秒 则HA 发起重连机制
     srvtimeout 15s 
#front-end IP for consumers and producters
​
listen rabbitmq_cluster
    bind 192.168.13.104:5672
    #配置TCP模式
    mode tcp
    #balance url_param userid
    #balance url_param session_id check_post 64
    #balance hdr(User-Agent)
    #balance hdr(host)
    #balance hdr(Host) use_domain_only
    #balance rdp-cookie
    #balance leastconn
    #balance source //ip
    #简单的轮询
    balance roundrobin
    #rabbitmq集群节点配置 #inter 每隔五秒对mq集群做健康检查, 2次正确证明服务器可用,2次失败证明服务器不可用,并且配置主备机制
        server server1 192.168.13.101:5672 check inter 5000 rise 2 fall 2
        server server2 192.168.13.102:5672 check inter 5000 rise 2 fall 2
        server server3 192.168.13.103:5672 check inter 5000 rise 2 fall 2
#配置haproxy web监控,查看统计信息
listen stats
    bind 192.168.13.104:8100 # 注意此处的ip地址,我们配置了2台机器
    mode http
    option httplog
    stats enable
    #设置haproxy监控地址为http://192.168.13.104:8100/rabbitmq-stats
    stats uri /rabbitmq-stats
    stats refresh 5s

105机器ha配置

#logging options
global
    log 127.0.0.1 local0 info
    maxconn 5120
    # ha的安装地址
    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
    #if you set mode to tcp,then you nust change tcplog into httplog
    option tcplog
    option dontlognull
    retries 3
    option redispatch
    maxconn 2000
    contimeout 5s
     ##客户端空闲超时时间为 30秒 则HA 发起重连机制
     clitimeout 30s
     ##服务器端链接超时时间为 15秒 则HA 发起重连机制
     srvtimeout 15s 
#front-end IP for consumers and producters
​
listen rabbitmq_cluster
    bind 192.168.13.105:5672
    #配置TCP模式
    mode tcp
    #balance url_param userid
    #balance url_param session_id check_post 64
    #balance hdr(User-Agent)
    #balance hdr(host)
    #balance hdr(Host) use_domain_only
    #balance rdp-cookie
    #balance leastconn
    #balance source //ip
    #简单的轮询
    balance roundrobin
    #rabbitmq集群节点配置 #inter 每隔五秒对mq集群做健康检查, 2次正确证明服务器可用,2次失败证明服务器不可用,并且配置主备机制
        server server1 192.168.13.101:5672 check inter 5000 rise 2 fall 2
        server server2 192.168.13.102:5672 check inter 5000 rise 2 fall 2
        server server3 192.168.13.103:5672 check inter 5000 rise 2 fall 2
#配置haproxy web监控,查看统计信息
listen stats
    bind 192.168.13.105:8100 # 注意此处的ip地址,我们配置了2台机器
    mode http
    option httplog
    stats enable
    #设置haproxy监控地址为http://192.168.13.105:8100/rabbitmq-stats
    stats uri /rabbitmq-stats
    stats refresh 5s
  1. 启动HAproxy

    /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
    #查看haproxy进程状态
    ps -ef | grep haproxy
    
  2. 访问HAproxy( 如果不能访问看下防火墙是否关闭)

在这里插入图片描述

关闭集群中的某一个节点:

在这里插入图片描述

再次查看HAProxy的管理控制台:

在这里插入图片描述

  1. 编写程序测试负载均衡

    • 生产者一端申明交换机和队列,并完成绑定

      <rabbit:queue id="itemQueue" name="item_queue" auto-declare="true"/>
      <rabbit:topic-exchange id="itemTopicExchange" name="item_topic_exchange" auto-declare="true">
              <rabbit:bindings>
                  <rabbit:binding pattern="item.#" queue="itemQueue"/>
              </rabbit:bindings>
      </rabbit:topic-exchange>
      
    • application.yml配置文件(重要)

      #Rabbitmq的配置
      spring:
        rabbitmq:
          host: 192.168.13.104   #这个是HA服务器地址
          port: 5672
          virtual-host: /
          username: guest
       password: guest
      
    • 在生产者一端编写测试方法发送消息

      @Test
      public void testHA(){
          for (int i=0; i<2; i++) //效果不明显可以加大发送的数据,发送的时候一定要盯着HA
          {
              rabbitTemplate.convertAndSend("item_topic_exchange",
                                            "item.insert", 
                                            "商品新增,路由Key为item.insert" +i);
          }
      }
      
    • 测试结果(连续发送了2条消息一条被server1接收一条被server2接收,)

    在这里插入图片描述

9.4. KeepAlived 搭建高可用的HAProxy集群

  1. KeepAlived 简介

    Keepalived,它是一个高性能的服务器高可用或热备解决方案,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx、Haproxy等反向代理的负载均衡服务器配合实现web服务端的高可用。Keepalived以VRRP协议为实现基础,用VRRP协议来实现高可用性(HA).VRRP(Virtual Router Redundancy Protocol)协议是用于实现路由器冗余的协议,VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个)。

  2. KeepAlived 的安装

    #安装所需软件包
    yum install -y openssl openssl-devel
    #下载安装包
    wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz
    #解压、编译、安装
    tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/
    cd /usr/local/keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived
    make && make install
    # 将keepalived安装成Linux系统服务,因为没有使用keepalived的默认安装路径(默认路径:/usr/local),安装完成之后,需要做一些修改工作
    #首先创建文件夹,将keepalived配置文件进行复制:
    mkdir /etc/keepalived
    cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
    #然后复制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 -f /usr/local/sbin/keepalived /usr/sbin/
    ln -s -f /usr/local/keepalived/sbin/keepalived /sbin/
    #可以设置开机启动:chkconfig keepalived on,到此我们安装完毕!
    chkconfig keepalived on
    
  3. KeepAlived 的配置

    vim /etc/keepalived/keepalived.conf
    ###############具体配置
    ! Configuration File for keepalived
    global_defs {
       router_id server4  ##标识节点的字符串,通常为本机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 ens33 ## 绑定虚拟IP的网络接口(网卡可以使用ifconfig查看)
        virtual_router_id 110  ## 虚拟路由ID号(主备节点一定要相同)-该配置非常重要
        mcast_src_ip 192.168.13.104 ## 本机ip地址
        priority 100  ##优先级配置(0-254的值),一般主节点的权重大于备份节点
        nopreempt
        advert_int 1  ## 组播信息发送间隔,俩个节点必须配置一致,默认1s
    authentication {  ## 认证匹配
            auth_type PASS
            auth_pass 123456
        }
        track_script {
            chk_haproxy
        }
        virtual_ipaddress {
            192.168.13.110  ## 虚拟ip,可以指定多个,以后连接mq就使用该虚拟ip进行连接
        }
    }
    
  4. 编写执行脚本(一定要赋权否则不能执行)

    #添加文件位置为/etc/keepalived/haproxy_check.sh
    #!/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
    
  5. 执行脚本赋权

    chmod +x /etc/keepalived/haproxy_check.sh
    
  6. 启动keepalived

    #启动两台机器的keepalived
    service keepalived start | stop | status | restart
    #查看状态
    ps -ef | grep haproxy
    ps -ef | grep keepalived
    
  7. 查看keepalived启动状态

    1. 查看keepalived启动状态
      在这里插入图片描述
      server5是备份节点,没有虚拟IP的。
      在这里插入图片描述

    2. 停止server4节点的keepalived查看我们的虚拟ip是否漂移到了server5
      server4停止,ip地址就没有了;
      在这里插入图片描述
      查看server5可以发现ip地址分配到该服务器:
      在这里插入图片描述

    3. 编写程序连接虚拟ip查看我们的mq是否成功

      • 修改application.yml文件

        #Rabbitmq的配置
        spring:
          rabbitmq:
            host: 192.168.13.110
            port: 5672
            virtual-host: /
            username: guest
         password: guest
        
      • 启动测试

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值