docker搭建RabbitMQ分布式集群

mac2025-09-09  23

RabbitaMQ 官方地址](https://hub.docker.com/_/rabbitmq/) 大部分问题都可以在官方文档找到,有问题查看下官方文档。

环境准备:

192.168.11.134 docker1 192.168.11.156 docker2 192.168.11.157 docker3 1、关闭防火墙 2、关闭selinux

#特别注解(看清楚宿主机是宿主机,和启动的容器半毛钱关系也没有),因为踩坑所以特别注解下,后面操作怕混淆关系,RabbitMQ加入集群关系巨大

192.168.11.134 宿主机IP docker1 宿主机主机名

一、简单介绍搭建用到的几个东西: 1)主机名

官方有一段话是这样说的: RabbitMQ节点使用短域名或完全合格(FQDN) 域名相互寻址。因此,所有群集成员的主机名以及所有 可能使用命令行工具(例如rabbitmqctl)的机器都必须是可解析的。

容器启动可以使用 -h/ --hostname 指定启动的容器名字

2)Erlang Cookie(身份验证)

3)设置默认用户和密码

4)集群中的节点

二、创建hosts 以及数据存储挂载目录(三台机器) 1)创建数据挂载目录

mkdir /opt/rabbitmq

2)生成hosts 文件

vim /opt/rabbitmq/hosts 192.168.11.134 docker1 192.168.11.156 docker2 192.168.11.157 docker3

#特别注解(看清楚容器是容器,和宿主机半毛钱关系也没有)

192.168.11.134 容器IP docker1 容器主机名

这里需要解释下,到时候我们挂载进去 -v /opt/rabbitmq/hosts:/etc/hosts 挂载去启动容器,这样就可以将我们定义hosts挂载到容器中。 可以会好奇这样挂载进去有什么作用呢? 容器的IP又不是宿主机的IP, 这样一说是不是已经知道,对的!我们就是用docker 网络模式中的 host 模式启动容器!host模式就是容器复制宿主机的网络,这样就达到了容器里面可以域名相互寻址,又不会影响到宿主机。(百度docker host模式)

三、启动容器: 第一台机器:

docker run -itd --log-opt max-size=10m --log-opt max-file=4 --name rabbit1 --hostname docker1 -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=root -e RABBITMQ_ERLANG_COOKIE='secret cookie here' -v /opt/rabbitmq/hosts:/etc/hosts -v /opt/rabbitmq:/var/lib/rabbitmq:z --net host rabbitmq:3.6.15-management

第二台机器:

docker run -itd --log-opt max-size=10m --log-opt max-file=4 --name rabbit2 --hostname docker2 -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=root -e RABBITMQ_ERLANG_COOKIE='secret cookie here' -v /opt/rabbitmq/hosts:/etc/hosts -v /opt/rabbitmq:/var/lib/rabbitmq:z --net host rabbitmq:3.6.15-management

第三台机器:

docker run -itd --log-opt max-size=10m --log-opt max-file=4 --name rabbit3 --hostname docker3 -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=root -e RABBITMQ_ERLANG_COOKIE='secret cookie here' -v /opt/rabbitmq/hosts:/etc/hosts -v /opt/rabbitmq:/var/lib/rabbitmq:z --net host rabbitmq:3.6.15-management

四、搭建 rabbitmq 的一般模式集群

1)第一台机器docker1:

进入容器 docker exec -it rabbit1 /bin/bash查看rabbitmq集群状态(这步只是为为了方便取得rabbitmq的名称,便于加入集群中): rabbitmqctl cluster_status

2)第二台机器docker2:

进入容器: docker exec -it rabbit2 /bin/bash查看集群: rabbitmqctl cluster_status停止: rabbitmqctl stop_app重置: rabbitmqctl reset #注释: @ 后面的主机名字 加入集群—内存节点:rabbitmqctl join_cluster --ram rabbit@docker1启动服务:rabbitmqctl start_app #注解: 1、reset 命令会将当前节点内的集群元数据全部清空.同时告诉集群,这个节点要退出集群了 2、生产避免使用 --ram 内存节点, 如果需要最少保证有两个磁盘节点,一个disc节点

可能操作会失误照成节点加入集群失败:报错解决方案

3)第三台机器docker3:

进入容器 docker exec -it rabbit3 /bin/bash查看集群(测试启动是否成功OK接着下一步):rabbitmqctl cluster_status停止: rabbitmqctl stop_app重置: rabbitmqctl reset #注释: @ 后面的主机名字 加入集群—磁盘节点:rabbitmqctl join_cluster rabbit@docker1启动服务:rabbitmqctl start_app

五、检查集群是否搭建成功

六、搭建高可用性(镜像)队列 官方地址:https://www.rabbitmq.com/ha.html

策列一:任何两个节点

策列二:所有节点

策列三:指定节点

其实我也不知道这个玩意咋匹配的。。。 具体大家还是去官方文档查看吧! 我就是个菜鸡的运维

七、测试添加配置ha. 添加到所有节点的策列:

rabbitmqctl set_policy ha-all "^ha\." '{"ha-mode":"all"}'

web界面查看

删除策列

八、测试HTTP API是否可以正常连接:

简单的搭建就这些了,更多的请到官方文档查看

最新回复(0)