RabbitMQ集群相关配置

本文详细介绍了如何配置RabbitMQ镜像队列实现集群的高可用性。从创建镜像集群、设置节点、添加策略等方面展开,强调了镜像队列在保证服务不间断的同时可能带来的性能影响。此外,还讲解了SpringBoot应用中配置RabbitMQ集群的方法,并提供了相关命令和管理页面操作步骤。
摘要由CSDN通过智能技术生成

RabbitMQ配置镜像队列,实现各节点队列同步

SHTL 博客:https://www.shtlls.ltd

镜像集群模式

概念:
把队列做成镜像队列,让各队列存在于多个节点中,属于 RabbitMQ 的高可用性方案。镜像模式和普通模式的不同在于,queue和 message 会在集群各节点之间同步,而不是在 consumer 获取数据时临时拉取。

特点:
(1)实现了高可用性。部分节点挂掉后,不会影响 rabbitmq 的使用。
(2)降低了系统性能。镜像队列数量过多,大量的消息同步也会加大网络带宽开销。
(3)适合对可用性要求较高的业务场景。

RabbitMQ普通集群部署

首先按照普通集群部署,然后通过设置,使之成为 镜像集群模式。

  1. 拉取镜像

    docker pull rabbitmq:management
    
  2. 运行容器

    docker run -d --hostname rabbit_host1 --name rabbitmq1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitmq_cookie' rabbitmq:latest
    
    docker run -d --hostname rabbit_host2 --name rabbitmq2 -p 5673:5672 --link rabbitmq1:rabbit_host1 -e RABBITMQ_ERLANG_COOKIE='rabbitmq_cookie' rabbitmq:latest
    
    docker run -d --hostname rabbit_host3 --name rabbitmq3 -p 5674:5672 --link rabbitmq1:rabbit_host1 --link rabbitmq2:rabbit_host2 -e RABBITMQ_ERLANG_COOKIE='rabbitmq_cookie' rabbitmq:latest
    

    主要参数说明:

    -p 15672:15672 management 界面管理访问端口
    -p 5672:5672 amqp 访问端口
    --link 容器之间连接
    Erlang Cookie 值必须相同,也就是一个集群内 RABBITMQ_ERLANG_COOKIE 参数的值必须相同。因为 RabbitMQ 是用Erlang实现的,Erlang Cookie 相当于不同节点之间通讯的密钥,Erlang节点通过交换 Erlang Cookie 获得认证。
    
  3. 加入节点到集群

    设置节点一 主节点

    docker exec -it {CONTAINER ID} bash
    rabbitmq-plugins enable rabbitmq_management		// 安装可视化组件,否则,无法通过浏览器访问
    rabbitmqctl stop_app
    rabbitmqctl reset
    rabbitmqctl start_app
    exit
    

    设置节点二,加入到集群

    docker exec -it {CONTAINER ID} bash
    rabbitmqctl stop_app
    rabbitmqctl reset
    rabbitmqctl join_cluster --ram rabbit@rabbit_host1
    rabbitmqctl start_app
    exit
    

    设置节点三,加入到集群

    docker exec -it {CONTAINER ID} bash
    rabbitmqctl stop_app
    rabbitmqctl reset
    rabbitmqctl join_cluster --ram rabbit@rabbit_host1
    rabbitmqctl start_app
    exit
    

    主要参数说明:

    --ram 表示设置为内存节点,忽略此参数默认为磁盘节点。该配置启动了3个节点,1个磁盘节点和2个内存节点。
    
    设置好之后,使用 http://ip:15672 进行访问,默认账号密码:guest/guest
    

    注意

    docker exec -it {CONTAINER ID} bash
    cd /etc/rabbitmq/conf.d/
    echo management_agent.disable_metrics_collector = false > management_agent.disable_metrics_collector.conf
    exit
    docker restart {CONTAINER ID}
    

    每一个节点都需要做的修改,否则,绿色的部分都不会显示,都会变黄

    image-20210723100133996

    由上图可见:共有三个节点,
    	rabbit@rabbit_host1: 磁盘节点(disc)
    	rabbit@rabbit_host2:  内存节点(RAM)
    	rabbit@rabbit_host3: 内存节点(RAM)
    

    RabbitMQ镜像集群部署

    1. 策略policy概念

    使用RabbitMQ镜像功能,需要基于RabbitMQ策略来实现,策略policy是用来控制和修改群集范围的某个vhost队列行为和Exchange行为。策略policy就是要设置哪些Exchange或者queue的数据需要复制、同步,以及如何复制同步。

    为了使队列成为镜像队列,需要创建一个策略来匹配队列,设置策略有两个键“ha-mode和 ha-params(可选)”。ha-params根据ha-mode设置不同的值,下表说明这些key的选项。

image-20210722174732202

  1. 添加策略

    登录rabbitmq管理页面 ——> Admin ——> Policies ——> Add / update a policy

image-20210722174809811

name:随便取,策略名称
Pattern:^ 匹配符,只有一个^代表匹配所有
Definition:ha-mode=all 为匹配类型,分为3种模式:all(表示所有的queue)

或者使用命令:
\#rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
  1. 查看效果

    此策略会同步所在同一VHost中的交换器和队列数据。设置好policy之后,使用 http://ip:15672 再次进行访问,可以看到队列镜像同步。

image-20210722174919751

SpringBoot配置RabbitMQ集群

  1. 配置RabbitMQ单机
spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: username
    password: password

或者使用addresses

spring:
  rabbitmq:
    addresses:ip1:port1
    username: username
    password: password
  1. 配置RabbitMQ集群

    addresses节点用逗号分隔

spring:
  rabbitmq:
    addresses:ip1:port1,ip2:port2,ip3:port3
    username: username
    password: password
  1. 配置RabbitMQ集群

    addresses节点用逗号分隔

spring:
  rabbitmq:
    addresses:ip1:port1,ip2:port2,ip3:port3
    username: username
    password: password
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值