【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

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

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

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

相关推荐
千百元几秒前
centos查线程数
linux·运维·centos
技术杠精1 小时前
Docker Swarm之Java 应用部署与平滑更新
java·docker·容器
三口吃掉你11 小时前
Docker安装Elasticsearch、kibana、IK分词器
elasticsearch·docker·kibana·ik分词器
fly五行12 小时前
Windows 系统下使用 Docker 安装 Milvus 向量数据库
windows·docker·milvus
爱宇阳12 小时前
离线环境下运行 Docker 容器编排指南
docker·容器·eureka
Java陈序员13 小时前
免费开源!一款操作 MySQL 和 MariaDB 的 Web 界面工具!
mysql·docker·php·mariadb
梁正雄14 小时前
9、dockerfile
docker·dockerfile·dockerfile基础用法
panplan.top14 小时前
Tornado + Motor 微服务架构(Docker + 测试 + Kubernetes)
linux·python·docker·微服务·k8s·tornado
豆是浪个14 小时前
Linux(Centos 7.6)命令详解:rpm
linux·运维·centos
-指短琴长-14 小时前
Docker基础【Ubuntu安装/Windows安装】
windows·ubuntu·docker