【RabbitMQ】RabbitMQ集群搭建(Docker版本)

个人主页金鳞踏雨

个人简介 :大家好,我是金鳞,一个初出茅庐的Java小白

目前状况:22届普通本科毕业生,几经波折了,现在任职于一家国内大型知名日化公司,从事Java开发工作

我的博客:这里是CSDN,是我学习技术,总结知识的地方。希望和各位大佬交流,共同进步 ~

RabbitMQ版本,通常与他的大的功能是有关系的。3.8.x版本 主要是围绕Quorum Queue 功能,而3.9.x版本 主要是围绕Streams功能。目前还有3.10.x版本,还在rc阶段。我们这次选择3.9.15版本。

RabbitMQ是基于Erlang 语言开发,所以安装前需要安装Erlang语言环境。需要注意下的是RabbitMQ与ErLang是有版本对应关系的。3.9.15版本 的RabbitMQ只支持23.2以上到24.3版本的Erlang。

一、使用Docker搭建RabbitMQ(单机)

使用docker安装RabbitMQ,最大的好处,我认为是不需要额外安装 erlang

1. 拉取镜像

bash 复制代码
docker pull rabbitmq:3.9.15-management

2. 启动

bash 复制代码
docker run -d --name rabbitmq-tuling -p 5672:5672 -p 15672:15672 \
-v /opt/docker/rabbitmq/data:/var/lib/rabbitmq --hostname myRabbitHsotName \
-e RdockerABBITMQ_DEFAULT_VHOST=myRabbitHsotName \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=888888 \
--restart=always \
rabbitmq:3.9.15-management

上述参数解析:

  1. docker run:启动一个新的Docker容器。
  2. -d:以后台(守护进程)模式运行容器。
  3. --name rabbitmq-tuling:为容器指定一个名称(rabbitmq-tuling)。
  4. -p 5672:5672 -p 15672:15672:将容器内部的5672端口映射到主机的5672端口,并将容器内部的15672端口映射到主机的15672端口。5672端口是RabbitMQ默认的AMQP端口,15672端口是RabbitMQ管理控制台的端口。
  5. -v /opt/docker/rabbitmq/data:/var/lib/rabbitmq:将主机的/opt/docker/rabbitmq/data目录挂载到容器内部的/var/lib/rabbitmq目录。这样做的目的是将RabbitMQ的数据持久化保存在主机的指定位置,以便在容器重启或删除后数据不会丢失。
  6. --hostname myRabbitHsotName:设置RabbitMQ容器的主机名为myRabbitHsotName。
  7. -e RABBITMQ_DEFAULT_USER=admin:设置RabbitMQ的默认用户名为admin。
  8. -e RABBITMQ_DEFAULT_PASS=888888:设置RabbitMQ的默认密码为888888。
  9. --restart=always:配置容器在退出时总是自动重启。
  10. rabbitmq:3.9.15-management:指定要使用的Docker镜像。rabbitmq:3.9.15-management是包含RabbitMQ 3.9.15和管理插件的镜像版本。

3. 允许外部 webui 访问

选择带有"mangement"的版本,可跳过这一步。

注意:该命令可以进入容器内部

bash 复制代码
docker exec -it rabbitmq-tuling bash

开启 rabbitmq_management 插件(可以省略)

bash 复制代码
rabbitmq-plugins enable rabbitmq_management

4. 给用户设置权限

创建账号

bash 复制代码
rabbitmqctl add_user guest guest

设置用户角色

bash 复制代码
rabbitmqctl set_user_tags guest administrator

设置用户权限

bash 复制代码
rabbitmqctl set_permissions -p "/" guest ".*" ".*" ".*"

设置完成后可以查看当前用户和角色(需要开启服务)

bash 复制代码
rabbitmqctl list_users

访问:localhost:15672

二、使用Docker搭建RabbitMQ(集群)

1.创建 Docker 网络

复制代码
docker network create rabbitmq_network

# 查看所有的docker网络环境
docker network ls

#删除
docker network rm rabbitmq_network

2.创建、启动rabbitmq节点

复制代码
# rabbitmq01
docker run -d --hostname rabbitmq01 --name rabbitmqCluster01 -p 15673:15672 -p 5673:5672 --network --restart=always rabbitmq_network rabbitmq:3.9.15-management

# rabbitmq02
docker run -d --hostname rabbitmq02 --name rabbitmqCluster02 -p 15674:15672 -p 5674:5672 --network --restart=always rabbitmq_network rabbitmq:3.9.15-management

# rabbitmq03
docker run -d --hostname rabbitmq03 --name rabbitmqCluster03 -p 15675:15672 -p 5675:5672 --network --restart=always rabbitmq_network rabbitmq:3.9.15-management

容器自启动

复制代码
docker update 【容器ID】 --restart=always

# 批量
docker update --restart=always 【容器ID1】 【容器ID2】 【容器ID3】

3.同步cookie(Erlang Cookie)

否则集群是启动不起来的!!!

复制代码
# 查询目标机上的cookie
docker exec rabbitmqCluster01 cat /var/lib/rabbitmq/.erlang.cookie
# 输出 - > FOJULMNXIGMOHHVAZGWW

# 依次修改rabbitmqCluster02、rabbitmqCluster03
docker exec rabbitmqCluster02 sh -c "echo 'BSSGXNUEBNNHPDUJXZJB' > /var/lib/rabbitmq/.erlang.cookie"

docker exec rabbitmqCluster03 sh -c "echo 'BSSGXNUEBNNHPDUJXZJB' > /var/lib/rabbitmq/.erlang.cookie"

重启所有节点

否则修改的cookie是无法生效的!

复制代码
docker restart rabbitmqCluster01 rabbitmqCluster02 rabbitmqCluster03

4.进度docker容器内部【第二、第三】

bash 复制代码
#进入第二个容器
docker exec -it rabbitmqCluster02 bash
rabbitmqctl stop_app
rabbitmqctl reset

#加入集群
rabbitmqctl join_cluster rabbit@rabbitmq01
rabbitmqctl start_app
exit
bash 复制代码
#进入第三个容器
docker exec -it rabbitmqCluster03 bash
rabbitmqctl stop_app
rabbitmqctl reset

#加入集群
rabbitmqctl join_cluster rabbit@rabbitmq01
rabbitmqctl start_app
exit

访问:localhost:15673

文章到这里就结束了,如果有什么疑问的地方,可以在评论区指出~

希望能和大佬们一起努力,诸君顶峰相见

再次感谢各位小伙伴儿们的支持!!!

相关推荐
曦云沐3 分钟前
一键部署ROS2开发环境!Docker run命令详解与实战
docker·容器·ros2
H Journey16 分钟前
Docker swarm 集群搭建实战
运维·docker·容器
江湖有缘1 小时前
Docker环境下使用RustScan端口扫描工具教程
运维·docker·容器
70asunflower1 小时前
镜像仓库(Image Registries)详解
linux·docker·容器
青树寒鸦1 小时前
wsl的docker备份redis和迁移
redis·docker·容器
岩屿1 小时前
Ubuntu下安装Docker并部署.NET API(二)
运维·docker·容器·.net
hopsky2 小时前
限制 Docker Desktop 的资源使用
运维·docker·容器
春日见2 小时前
docker崩溃,闪退,与vscode断开连接
vscode·docker·容器
Suchadar2 小时前
Docker搭建Web测试靶场
运维·docker·容器
swaveye90602 小时前
轻量服务器CentOS 7.9 64位 设置允许防火墙/HTTP/HTTPS访问
运维·服务器·centos