【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

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

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

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

相关推荐
黄尚圈圈12 分钟前
快速理解mQ(三)——RabbitMQ 各种交换机的区别与应用
分布式·rabbitmq
LYK_HAHA23 分钟前
centos常用知识和命令
linux·运维·centos
老齐谈电商27 分钟前
开源电商erp系统启航电商ERP系统centos Docker部署
docker·开源·centos
-$_$-2 小时前
【黑马点评】 使用RabbitMQ实现消息队列——1.Docker与RabbitMQ环境安装
分布式·docker·rabbitmq
芯的一天2 小时前
windows下DockerDesktop命令行方式指定目录安装
windows·docker
帅气的人1233 小时前
使用 docker-compose 启动 es 集群 + kibana
elasticsearch·docker
獨枭3 小时前
Ubuntu 通过 Docker 搭建 GitLab
ubuntu·docker·gitlab
害羞的白菜4 小时前
Nginx基础详解5(nginx集群、四七层的负载均衡、Jmeter工具的使用、实验验证集群的性能与单节点的性能)
linux·运维·笔记·jmeter·nginx·centos·负载均衡
zixingcai4 小时前
dockertop提示Failed to fetch extensions
docker
雪域迷影13 小时前
PostgreSQL Docker Error – 5432: 地址已被占用
数据库·docker·postgresql