【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. 拉取镜像

docker pull rabbitmq:3.9.15-management

2. 启动

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”的版本,可跳过这一步。

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

docker exec -it rabbitmq-tuling bash

 开启 rabbitmq_management 插件(可以省略)

rabbitmq-plugins enable rabbitmq_management

4. 给用户设置权限

创建账号

rabbitmqctl add_user guest guest

设置用户角色

rabbitmqctl set_user_tags guest administrator

设置用户权限

rabbitmqctl set_permissions -p "/" guest ".*" ".*" ".*"

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

rabbitmqctl list_users

访问:localhost:15672

【RabbitMQ】RabbitMQ集群搭建(Docker版本)_第1张图片

二、使用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容器内部【第二、第三】

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

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

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

访问:localhost:15673 

【RabbitMQ】RabbitMQ集群搭建(Docker版本)_第2张图片

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

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

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

你可能感兴趣的:(RabbitMQ从入门到进阶,rabbitmq,centos,docker,java-rabbitmq,消息队列)