Docker中搭建RabbitMQ集群

news/2024/11/29 13:33:18/

Docker中搭建RabbitMQ集群

    • 1、启动三个RabbitMQ容器
    • 2、为容器设置节点
      • 2.1、设置Erlang Cookie
      • 2.2、设置节点1
      • 2.3、设置节点2
      • 2.4、设置节点3
      • 2.5、预览结果
    • 3、配置镜像队列
      • 3.1、配置镜像的原因
      • 3.2、搭建步骤


1、启动三个RabbitMQ容器

服务器IP端口hostname管理界面地址
192.168.13.1005673rabbitmq-node1192.168.13.100:15673
192.168.13.1005674rabbitmq-node2192.168.13.100:15674
192.168.13.1005675rabbitmq-node3192.168.13.100:15675
  1. 新版本已经不建议通过环境变量设置 Erlang Cookie 了,建议在 home 目录下新建 .erlang.cookie 文件,在 每个节点的 .erlang.cookie 写入一致的字符串,注意 .erlang.cookie 文件的权限应该为 400。

  2. 所以为了便于修改ErlangCookie,启动容器时要做好容器数据卷的映射。

  3. 因为/var/lib/rabbitmq 是 RabbitMQ home 目录和 data 目录,所以需要映射到宿主机

启动第一个容器:


docker run -d --hostname rabbitmq-node1 --name rabbitmq-node1 -p15673:15672 -p5673:5672 --privileged=true -v /app/RabbitMQ/rabbitmq-node1:/var/lib/rabbitmq rabbitmq:latest

启动第二个容器:


docker run -d --hostname rabbitmq-node2 --name rabbitmq-node2 -p15674:15672 -p5674:5672 --link rabbitmq-node1:rabbitmq-node1 --privileged=true -v /app/RabbitMQ/rabbitmq-node2:/var/lib/rabbitmq rabbitmq:latest

启动第三个容器:


docker run -d --hostname rabbitmq-node3 --name rabbitmq-node3 -p15675:15672 -p5675:5672 --link rabbitmq-node1:rabbitmq-node1 --link rabbitmq-node2:rabbitmq-node2 --privileged=true -v /app/RabbitMQ/rabbitmq-node3:/var/lib/rabbitmq rabbitmq:latest

启动完成之后,使用 docker ps命令查看RabbitMQ是否启动成功

在这里插入图片描述

RabbitMQ容器启动成功后,我们需要在容器中开启Web端的管理插件,具体启动教程在我的《docker中安装并启动rabbitMQ》中有详细的步骤,这里不再赘述。

2、为容器设置节点

2.1、设置Erlang Cookie

因为Erlang节点间通过认证Erlang cookie的方式来允许互相通信,所以RABBITMQ_ERLANG_COOKIE必须设置为同一个值。

RabbitMQ容器映射在宿主机上的文件:

在这里插入图片描述

首先进入宿主机的 /app/RabbitMQ/rabbitmq-node1(这里是rabbitmq-node1容器映射到宿主机的目录)目录下,使用 vim 命令打开 .erlang.cookie 文件,将Cookie值复制到另外两个容器的 .erlang.cookie 文件中。

在这里插入图片描述

在这里插入图片描述

复制完成后重新启动 rabbitmq-node1rabbitmq-node2 容器,确保宿主机中修改后的 erlang cookie 的值能够被映射到这两个容器中。

2.2、设置节点1

docker exec -it rabbitmq-node1 bash
rabbitmqctl stop_app
# (rabbitmqctl stop 会将Erlang 虚拟机关闭,rabbitmqctl stop_app 只关闭 RabbitMQ 服务)
rabbitmqctl reset
rabbitmqctl start_app(只启动应用服务)
exit

2.3、设置节点2

docker exec -it rabbitmq-node2 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbitmq-node1
rabbitmqctl start_app(只启动应用服务)
exit

2.4、设置节点3

docker exec -it rabbitmq-node3 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbitmq-node1
rabbitmqctl start_app(只启动应用服务)
exit

2.5、预览结果

节点设置完成之后,在浏览器访问192.168.13.100:15673、192.168.13.100:15674和192.168.13.100:15675中任意一个来查看RabbitMQ Management:

在这里插入图片描述
至此,RabbitMQ集群搭建完毕。

3、配置镜像队列

3.1、配置镜像的原因

如果 RabbitMQ 集群中只有一个 Broker 节点,那么该节点的失效将导致整体服务的临时性不可用,并 且也可能会导致消息的丢失。可以将所有消息都设置为持久化,并且对应队列的durable属性也设置为true,但 是这样仍然无法避免由于缓存导致的问题:因为消息在发送之后和被写入磁盘井执行刷盘动作之间存在一 个短暂却会产生问题的时间窗。通过 publisherconfirm(发布确认) 机制能够确保客户端知道哪些消息己经存入磁盘,尽 管如此,一般不希望遇到因单点故障导致的服务不可用。

引入镜像队列(Mirror Queue)的机制,可以将队列镜像到集群中的其他 Broker 节点之上,如果集群中 的一个节点失效了,队列能自动地切换到镜像中的另一个节点上以保证服务的可用性。

3.2、搭建步骤

  1. 启动三台集群节点

  2. 随便找一个节点添加 policy(策略)

在这里插入图片描述

说明:

  • Name:新建的策略的名字(按照自己的需求进行设置即可)
  • Pattern:会按照设置的规则进行镜像设置(例如本例中设置为 ^mirror,则会为开头是 mirror 的队列进行镜像备份)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wtcyV529-1687606030431)(RabbitMQ.assets/image-20230624165903183.png)]

  1. 在 rabbitmq-node1 上创建一个队列发送一条消息,队列存在镜像队列

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XwCTEr0w-1687606030432)(RabbitMQ.assets/image-20230624170028904.png)]

  2. 停掉 rabbitmq-node1 之后发现 rabbitmq-node2 成为镜像队列

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JKSog5vt-1687606030432)(RabbitMQ.assets/image-20230624191815607.png)]

  3. 就算整个集群只剩下一台机器了 依然能消费队列里面的消息 说明队列里面的消息被镜像队列传递到相应机器里面


http://www.ppmy.cn/news/554877.html

相关文章

查找空调面板型号及使用说明书

公司中央空调的控制面板,Honeywell品牌设计简约,没有看到关机按钮,面板上也没有具体型号,使用说明书都不好查。 想关机,周围没人知道,按select选择选项时,发现有zband diff等字样。 google 搜…

ShardingSphere-JDBC-若依框架集成(SpringBoot)

前言 ShardingSphere基础知识、ShardingSphere-JDBC如何集成进若依框架中 使用的是若依框架(SpringBoot)前后端版本、动态数据源,可自行切换,默认数据源为达梦8 文章目录 前言基础知识简介产品功能 使用方案一方案二方案三 注意点…

海尔商用空调20HP焓差冷水测试系统

Haier 20HP焓差冷水测试系统 1 简述 本测试室利用空气焓差法测定空调机组的制冷、制热量、名义工况下功率消耗、能效比(EER值)、运行电流、室内风量是较常用的,亦为标准所认可的一种方法。这种方法满足国标GB/T7725-1996“房间空气调节器…

海尔云谷创新中心A座能耗监测系统的应用

李婧婧 安科瑞电气股份有限公司 13651946738 摘要:公共建筑是节能大户和节能重点,做好公共建筑节能工作,对促进和带动全社会节能工作,实现节能减排目标,落实“转方式、调结构”重大战略具有重要意义。本文介绍海尔…

Spark7-9

7. Spark中的一些重要概念 7.1 Application 使用SparkSubmit提交的个计算应用,一个Application中可以触发多次Action,触发一次Action产生一个Job,一个Application中可以有一到多个Job 7.2 Job Driver向Executor提交的作业,触发…

如果你曾经拥有python,那么现在你应该拥抱Julia吗?

看完本文,您就会有较成熟的想法。 Julia和Python的区别是什么?为什么Julia适合用于大规模计算和超级计算机模拟? 你一定听说过Julia和Python这两个编程语言。虽然它们都可以用于从简单的机器学习应用程序到巨大的超级计算机模拟的所有方面&am…

C#利用PrintDocument定制打印单据

C#利用PrintDocument定制打印单据 https://www.cnblogs.com/hsiang/p/6921817.html

css写打印单据样式

最近有一个需求要写打印单据的样式 记得在上上家公司也同样写过类似需求,当时用的px效果还凑合吧,记得是要用行内样式,否则不生效 这次是直接公司有写了模板,新增模板,看到用的是mm单位(毫米)…