Docker中搭建RabbitMQ集群

这篇具有很好参考价值的文章主要介绍了Docker中搭建RabbitMQ集群。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


1、启动三个RabbitMQ容器

服务器IP 端口 hostname 管理界面地址
192.168.13.100 5673 rabbitmq-node1 192.168.13.100:15673
192.168.13.100 5674 rabbitmq-node2 192.168.13.100:15674
192.168.13.100 5675 rabbitmq-node3 192.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是否启动成功

docker安装rabbitmq集群,RabbitMQ,docker,java-rabbitmq,rabbitmq,docker

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

2、为容器设置节点

2.1、设置Erlang Cookie

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

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

docker安装rabbitmq集群,RabbitMQ,docker,java-rabbitmq,rabbitmq,docker

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

docker安装rabbitmq集群,RabbitMQ,docker,java-rabbitmq,rabbitmq,docker

docker安装rabbitmq集群,RabbitMQ,docker,java-rabbitmq,rabbitmq,docker

复制完成后重新启动 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:

docker安装rabbitmq集群,RabbitMQ,docker,java-rabbitmq,rabbitmq,docker
至此,RabbitMQ集群搭建完毕。

3、配置镜像队列

3.1、配置镜像的原因

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

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

3.2、搭建步骤

  1. 启动三台集群节点

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

docker安装rabbitmq集群,RabbitMQ,docker,java-rabbitmq,rabbitmq,docker

说明:

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

docker安装rabbitmq集群,RabbitMQ,docker,java-rabbitmq,rabbitmq,docker

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

    docker安装rabbitmq集群,RabbitMQ,docker,java-rabbitmq,rabbitmq,docker

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

    docker安装rabbitmq集群,RabbitMQ,docker,java-rabbitmq,rabbitmq,docker

  3. 就算整个集群只剩下一台机器了 依然能消费队列里面的消息 说明队列里面的消息被镜像队列传递到相应机器里面文章来源地址https://www.toymoban.com/news/detail-684986.html

到了这里,关于Docker中搭建RabbitMQ集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker高级——Docker部署RabbitMQ(单机,集群,仲裁队列)

    我们在Centos7虚拟机中使用Docker来安装。 方式一:在线拉取 方式二:从本地加载 在课前资料已经提供了镜像包: 上传到虚拟机中后,使用命令加载镜像即可: 执行下面的命令来运行MQ容器: 接下来,我们看看如何安装RabbitMQ的集群。 在RabbitMQ的官方文档中,讲述了两种集群

    2024年02月16日
    浏览(42)
  • docker-compose部署rabbitmq集群

    1、集群分类 RabbitMQ的是基于Erlang语言编写,而Erlang又是一个面向并发的语言,天然支持集群模式。 RabbitMQ的集群以下分类: 标准集群:是一种分布式集群,将队列分散到集群的各个节点,从而提高整个集群的并发能力。 镜像集群:是一种主从集群,标准集群的基础上,添加

    2024年02月16日
    浏览(44)
  • 6.Docker搭建RabbitMQ

    1、端口开放 如果在云服务上部署需在安全组开通一下端口:15672、5672、25672、61613、1883。 15672(UI页面通信口)、5672(client端通信口)、25672(server间内部通信口)、61613(stomp 消息传输)、1883(MQTT消息队列遥测传输)。 2、安装镜像 docker pull rabbitmq 3、查询镜像 docker images 4、启动MQ安装

    2024年02月07日
    浏览(43)
  • 用docker-compose部署Rabbitmq三节点集群部署方案

    主机名 IP node1 10.4.2.10 node2 10.4.2.59 node3 10.4.2.134 (1) 在/root目录下先创建一个rabitmq目录用于存放文件 mkdir  rabitmq (2)修改主机名和域名解析hosts文件 (1)修改主机名 hostnamectl set-hostname  node1    hostnamectl set-hostname  node2 hostnamectl set-hostname  node3 node1  node2   node3 分别对应

    2024年02月04日
    浏览(55)
  • RabbitMQ详解(二):Docker安装RabbitMQ

    在Docker上安装部署RabbitMQ方便快捷,不需要额外安装Erlang环境,所以写该篇文章先来介绍如何在Docker上部署RabbitMQ。 (1)、在docker hub 中查找rabbitmq镜像 带有“mangement”的版本,包含web管理页面 (2)、从docker hub 中拉取rabbitmq镜像 (3)、查看拉取的rabbitmq镜像 (4)、运行 rabbitmq服务端

    2023年04月19日
    浏览(39)
  • 使用Docker Swarm部署RabbitMQ+HAProxy高可用集群(三节点-镜像模式)

    当前规划中,只启动一个HAProxy服务,主要用来做RabbitMQ节点的负载均衡和代理,但是HAProxy可能会出现单点故障,后续需要启动多个HAProxy节点,然后结合Keepalived来进行 设置虚拟IP 做故障转移 节点名称 节点主机名 IP地址 角色 运行服务 cluster01 cluster01 192.168.12.48 Docker Swarm Mana

    2024年02月14日
    浏览(44)
  • Linux环境下,通过Docker搭建及配置RabbitMQ

    😊 @ 作者: 一恍过去 💖 @ 主页: https://blog.csdn.net/zhuocailing3390 🎊 @ 社区: Java技术栈交流 🎉 @ 主题: Linux环境下,通过Docker搭建及配置RabbitMQ ⏱️ @ 创作时间: 2022年07月17日 RabbitMQ是一个开源的消息队列中间件,用于在应用程序之间进行可靠的消息传递。它实现了高级消

    2024年02月15日
    浏览(40)
  • Rabbitmq入门与应用(一)-rabbitmq安装(docker版)

    @Rabbitmq入门与应用-rabbitmq安装(docker版) 什么是RabbitMQ? RabbitMQ is a message broker: it accepts and forwards messages. You can think about it as a post office: when you put the mail that you want posting in a post box, you can be sure that the letter carrier will eventually deliver the mail to your recipient. In this analogy, RabbitMQ is a p

    2024年02月20日
    浏览(44)
  • (二)RabbitMQ【安装Erlang、安装RabbitMQ 、账户管理、管控台、Docker安装 】

    Lison dreamlison@163.com , v1.0.0 , 2023.06.22 RabbitMQ是使用Erlang语言编写的,所以在安装RabbitMQ前需要先安装Erlang环境 1、安装Erlang所需的依赖 2、添加存储库条目 3、安装Erlang 4、查看Erlang是否安装成功 1、为了外部能够正常访问RabbitMQ服务,先关闭防火墙 2、RabbitMQ是通过主机名进行访问

    2024年02月15日
    浏览(51)
  • Docker安装RabbitMQ镜像

    步骤1: 拉取镜像 步骤2: 运行 -e:设置环境变量: RABBITMQ_DEFAULT_USER:指定web管理平台的用户名 RABBITMQ_DEFAULT_PASS:指定web管理平台的用户名 如果不指定,则默认使用guest/guest(默认guest无法远程登陆,只能localhost:15672登陆) 小插曲: 以管理员身份运行一下命令,然后再执行

    2024年02月14日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包