RabbitMQ之镜像模式及Haproxy的安装使用

本文详细介绍了如何在Centos7上搭建RabbitMQ集群并启用镜像队列策略,确保队列的高可用性。同时,通过安装和配置HAProxy,实现了RabbitMQ节点间的负载均衡,提升系统的稳定性和效率。

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

接上一篇:Centos7 RabbitMQ集群版安装

前言:上一篇搭建的仅仅是普通集群,虽然交换机、绑定关系、对列等可以复制到集群的其他节点,但是队列内容不会复制,如果队列宕机将会导致队列无法使用,不能保证队列的高可用性。

详情参考:http://next.rabbitmq.com/ha.html

集群模式:

      对于queue来说,message data只存在于集群中的一个节点上,而message metadata则存在于集群中的所有节点。当message进入A节点的queue后,consumer从B节点拉去时,rabbitmq会临时在A、B之间进行消息传输,把A中的message data取出来发送给链接在B上的consumer。这样就存在A这个瓶颈,无论链接A还是B,出口总是在A。还有如果A节点故障后,在B节点无法取到A节点中还未消费的消息,如果做了消息持久化,则A节点恢复后,仍然可以被消费,但是如果没做消息持久化,即使A恢复了,消息也丢失了。

镜像模式:

      该模式和集群模式的区别在于,message data会在镜像节点间主动同步,而不是在consumer取数据时临时拉取,当然由于在节点间主动同步数据,副作用也很明显,降低系统性能,一但大量消息进入,则同步的消息非常多。

RabbitMQ的集群节点包括内存节点、磁盘节点。顾名思义内存节点就是将所有数据放在内存,磁盘节点将数据放在磁盘。如果在投递消息时,打开了消息的持久化,那么即使是内存节点,数据还是安全的放在磁盘。

1.设置镜像队列策略

  1. 在任意一个节点上执行
  2. rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
  3. 将所有队列设置为镜像队列,队列会被复制到各个节点,状态保持一致
  4. 在rabbitmq的web控制台上可以看到
  5. 输入rabbitmqctl查看帮助
  6. set_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] <name> <pattern>  <definition>   //设置策略
  7. clear_policy [-p <vhost>] <name>    //清除策略
  8. list_policies [-p <vhost>]   //策略列表
  9. rabbitmqctl详情查看:https://blog.youkuaiyun.com/mlym521/article/details/81990265
  10. [-p <vhost>]: 可选参数,针对指定vhost下的queue进行设置

    [--priority <priority>]:可选参数,policy的优先级

    [--apply-to <apply-to>]:应用到 exchanges或者queue或者 all

    <name>: policy的名称

    <pattern>: 对列(queue)或者转换器(exchange)的正则匹配模式

    <definition>:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode

        ha-mode:指明镜像队列的模式,有效值为 all/exactly/nodes

            all:表示在集群中所有的节点上进行镜像

            exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定

            nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定

        ha-params:ha-mode模式需要用到的参数

        ha-sync-mode:进行队列中消息的同步方式,有效值为automatic和manual

  11. 具体用法参考:http://www.cnblogs.com/zhengchunyuan/p/9253722.html

2.Haproxy的安装

  1. 上传haproxy-1.7.8.tar.gz包到服务器上
  2. tar -zxvf  haproxy-1.7.8.tar.gz -C /usr/local
  3. 将源码解压之后,需要运行make来将HAProxy编译为可执行程序。在执行make之前需要先选择目标平台,通常对于UNIX系的操作系统可以选择TARGET=generic
  4. make TARGET=generic //编译
  5. export PATH=$PATH:/usr/local/haproxy-1.7.8  //配置环境变量
  6. source /etc/profile //source一下就OK了

  7. mkdir conf   //在haproxy-1.7.8目录下创键conf目录

  8. 配置haproxy.cfg

  9. haproxy -f ./conf/haproxy.cfg -d   //启动haproxy  -d表示debug模式

  10. 该图显示我的rabbitmq第二个节点没有启动DOWN,启动之后显示UP

  11. 两个rabbitmq节点启动完成之后

  12. 重新启动haproxy显示为

  13. 访问haproxy的web端,绑定端口为8100

  14. 通过haproxy访问rabbitmq的web管理控制台,绑定端口为8004

  15. 客户端连接haproy就OK了,这里haproxy绑定的端口为5671

  16. haproxy.cfg配置文件配置

  17. #全局配置
    global
            #日志输出配置,所有日志都记录在本机,通过local0输出
            log 127.0.0.1 local0 info
            #最大连接数
            maxconn 4096
            #改变当前的工作目录
            chroot /usr/local/haproxy-1.7.8
            #以指定的UID运行haproxy进程
            uid 99
            #以指定的GID运行haproxy进程
            gid 99
            #以守护进程方式运行haproxy #debug #quiet
            daemon
            #debug
            #当前进程pid文件
            pidfile /usr/local/haproxy-1.7.8/haproxy.pid
     
    #默认配置
    defaults
            #应用全局的日志配置
            log global
            #默认的模式mode{tcp|http|health}
            #tcp是4层,http是7层,health只返回OK
            mode tcp
            #日志类别tcplog
            option tcplog
            #不记录健康检查日志信息
            option dontlognull
            #3次失败则认为服务不可用
            retries 3
            #每个进程可用的最大连接数
            maxconn 2000
            #连接超时
            timeout connect 5s
            #客户端超时
            timeout client 120s
            #服务端超时
            timeout server 120s
     
    #绑定配置
    listen rabbitmq_cluster
    	bind 0.0.0.0:5671
            #配置TCP模式
            mode tcp
            #简单的轮询 负载均衡算法(#banlance roundrobin 轮询,balance source 保存session值,支持static-rr,leastconn,first,uri等参数)
            balance roundrobin 
            #RabbitMQ集群节点配置
            server rmq_node1 192.168.184.129:5672 check inter 5000 rise 2 fall 3 weight 1
            server rmq_node2 192.168.184.131:5672 check inter 5000 rise 2 fall 3 weight 1
     
    ###############我把RabbitMQ的管理界面也放在HAProxy后面了#################
    listen rabbitmq_admin
        bind 0.0.0.0:8004
        server rmq_node1 192.168.184.129:15672
        server rmq_node2 192.168.184.131:15672
    
    #haproxy监控页面地址
    listen monitor
    	bind 0.0.0.0:8100
            mode http
            option httplog
            stats enable
            stats uri /stats
            stats refresh 5s

     

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值