Docker搭建RabbitMQ集群

394 阅读3分钟

Docker搭建RabbitMQ集群

集群搭建方式:使用docker搭建的集群,在三台服务器上,每台服务器都映射了四个端口,4369,5672,15672,25672,服务器中的docker容器名称分别为myrabbitmq1,myrabbitmq2,myrabbitmq3,容器中的主机名称分别为rabbit1,rabbit2,rabbit3,挂载出来的文件并没有用到。

rabbitmq版本: 3.8.1-alpine

docker版本:20.10.7

集群ip:

172.21.29.140 myrabbitmq1所在服务器

172.21.29.139 myrabbitmq2所在服务器

172.21.29.138 myrabbitmq3所在服务器

可视化界面的端口 15672

三台服务器中的rabbitmq需要拥有相同的.erlang.cookie才能够联通。

首先是搭建rabbitmq普通集群

1.首先是拉取rabbitmq的docker镜像,三台服务器都需要拉取。

 docker pull rabbitmq:3.8.1-alpine

2.执行启动命令,命令中包含容器内的主机名,容器名称,开机自启,容器中端口域名映射,数据挂载,端口映射等信息

这里需要注意的是,启动主rabbit和启动从rabbit的启动命令稍有区别,因为从rabbit启动后需要在配置文件中配置和主rabbit相同的.erlang.cookie字符串,从容器才能够加入到主rabbit的集群当中。

主rabbit(172.21.29.140)的启动命令如下:

 docker run -d --hostname rabbit1 --name myrabbit1 --restart=always --add-host="rabbit1":172.21.29.140 --add-host="rabbit2":172.21.29.139 --add-host="rabbit3":172.21.29.138  -v /home/rabbitmq/data:/var/lib/rabbitmq  -p 15672:15672 -p 5672:5672 -p 4369:4369 -p 25672:25672 rabbitmq:3.8.1-alpine

主rabbit启动好了之后,需要进入主rabbit的容器当中去查看.erlang.cookie的字符串值,路径为/var/lib/rabbitmq/.erlang.cookie,使用cat命令查看,这个字符串会在后面的从rabbit中的启动命令当中使用到

主rabbit进入容器中可以查看一下集群的状态,主rabbit无需过多配置。

 $ docker exec -it myrabbitmq1 bin/bash
 # 查看集群信息
 $ rabbitmqctl cluster_status

两个从rabbit(172.21.29.139 172.21.29.138)的启动命令如下:注意这里.erlang.cookie需要替换为自己主rabbit上的

 docker run -d --hostname rabbit2 --name myrabbit2 --restart=always --add-host="rabbit1":172.21.29.140 --add-host="rabbit2":172.21.29.139 --add-host="rabbit3":172.21.29.138  -v /home/rabbitmq/data:/var/lib/rabbitmq -e .erlang.cookie=KNCXIZKFFLTNERDPMDJV -p 15672:15672 -p 5672:5672 -p 4369:4369 -p 25672:25672 rabbitmq:3.8.1-alpine
 ​
 docker run -d --hostname rabbit3 --name myrabbit3 --restart=always --add-host="rabbit1":172.21.29.140 --add-host="rabbit2":172.21.29.139 --add-host="rabbit3":172.21.29.138  -v /home/rabbitmq/data:/var/lib/rabbitmq -e .erlang.cookie=KNCXIZKFFLTNERDPMDJV -p 15672:15672 -p 5672:5672 -p 4369:4369 -p 25672:25672 rabbitmq:3.8.1-alpine

从rabbit需要先停掉rabbit服务,再将其加入到集群当中,再启动服务。进入到容器中执行命令如下:

 $ docker exec -it myrabbitmq2 bin/bash
 $ rabbitmqctl stop_app
 $ rabbitmqctl reset
 #加入集群
 $ rabbitmqctl join_cluster rabbit@rabbit1
 $ rabbitmqctl start_app
 # 查看集群信息
 $ rabbitmqctl cluster_status
 $ docker exec -it myrabbitmq3 bin/bash
 $ rabbitmqctl stop_app
 $ rabbitmqctl reset
 #加入集群
 $ rabbitmqctl join_cluster rabbit@rabbit1
 $ rabbitmqctl start_app
 # 查看集群信息
 $ rabbitmqctl cluster_status

需要进入到三个rabbit容器当中,下载可视化工具,指令如下: 不激活可视化工具将导致通过ip:端口无法访问rabbitmq的可视化界面

 rabbitmq-plugins enable rabbitmq_management

至此普通集群搭建完成

image-20220923083554341.png

搭建镜像集群(高可用)

搭建镜像集群是在普通集群已经搭建好的情况下进行的,所以到这里的前提是你已经搭建好了普通集群

需要做的任务也很简单:

进入到集群中任意一个rabbit容器当中执行如下命令:

 rabbitmqctl set_policy ha-all "^rabbitmq" '{"ha-mode":"all","ha-sync-mode":"automatic"}'

至此高可用镜像集群搭建完成

附录

主要参考博客:

(103条消息) rabbitmq详解hmb↑的博客-CSDN博客rabbitmq

(103条消息) Docker + RabbitmQ 集群版(多台机器)sanduo112的博客-CSDN博客docker rabbitmq集群 多主机

(103条消息) docker rabbitmq_docker快速部署rabbitmq多机集群_weixin_39735166的博客-CSDN博客

(103条消息) docker run 命令详解(新手入门必备)运维@小兵的博客-CSDN博客docker run

CentOS8 搭建RabbitMQ普通集群 (baidu.com)

(103条消息) Rabbitmq可视化UI界面访问不了_zmm0420的博客-CSDN博客