docker搭建rabbitmq集群——镜像模式

1 篇文章 0 订阅
1 篇文章 0 订阅

RabbitMQ是一套开源(MPL)的消息队列服务软件,是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成

RabbitMQ的5大核心概念:Connection(连接)、Channel(信道)、Exchange(交换机)、Queue(队列)、Virtual host(虚拟主机)。

普通模式的集群

普通模式的集群是不会将创建的队列复制到其他节点,虽然我们在其它节点能够看到这个节点;这是由于其它节点只会保存一份这个队列的元数据,展示给我们看的,真实的队列还是存在创建这个队列的节点中的;如果这个时候我们把创建队列的的节点关闭,那么这个队列其实就不可用了; 为了解决这个问题,rabbitmq还提供了另外一种集群模式:镜像模式

镜像模式

镜像模式是rabbit提供的一种可添加的策略模式,如果创建的队列和创建的策略能够匹配上,则会把队列同步复制到其他节点中,而不再只是复制元数据;

这里使用docker来搭建rabbitmq集群的镜像模式,首先准备好docker环境,下载好镜像

创建网卡

docker network create rabbitmq_net
#安装三个rabbitmq组件,一主两从

docker run -d --name=rabbitmq_master -p 5672:5672 -p 15672:15672 -e RABBITMQ_NODENAME=rabbitmq_master -e RABBITMQ_ERLANG_COOKIE='1111111' -h rabbitmq_master --net=rabbitmq_net -v /data/rabbitmq-1/rabbitmq_master/data:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=CiA7rk7L_6gIKnaX  rabbitmq:3.8.27-management
docker run -d --name=rabbitmq_slave1 -p 5673:5672 -p 15673:15672 -e RABBITMQ_NODENAME=rabbitmq_slave1 -e RABBITMQ_ERLANG_COOKIE='1111111' -h rabbitmq_slave1 --net=rabbitmq_net -v /data/rabbitmq-1/rabbitmq_slave1/data:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=CiA7rk7L_6gIKnaX  rabbitmq:3.8.27-management
docker run -d --name=rabbitmq_slave2 -p 5674:5672 -p 15674:15672 -e RABBITMQ_NODENAME=rabbitmq_slave2 -e RABBITMQ_ERLANG_COOKIE='1111111' -h rabbitmq_slave2 --net=rabbitmq_net -v /data/rabbitmq-1/rabbitmq_slave2/data:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=CiA7rk7L_6gIKnaX  rabbitmq:3.8.27-management
开启三个组件的管理端插件
docker exec -it rabbitmq_master /bin/bash
rabbitmq-plugins enable rabbitmq_management
exit
docker exec -it rabbitmq_slave1 /bin/bash
rabbitmq-plugins enable rabbitmq_management
exit
docker exec -it rabbitmq_slave2 /bin/bash
rabbitmq-plugins enable rabbitmq_management
exit

浏览器分别访问以下地址,用户名和密码都是admin
http://localhost:15672/#/ http://localhost:15673/#/ http://localhost:15674/#/ 如果成功登入,则代表组件安装成功,但是这时候还不是集群模式,我们需要手动加入到集群

salve1加入集群
docker exec -it rabbitmq_slave1 /bin/bash
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbitmq_master@rabbitmq_master
rabbitmqctl start_app
exit
salve2加入集群
docker exec -it rabbitmq_slave2 /bin/bash
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbitmq_master@rabbitmq_master
rabbitmqctl start_app
exit

开启镜像队列

docker exec -it rabbitmq_slave1 /bin/bash
rabbitmqctl set_policy my_ha "^" '{"ha-mode":"all"}'
exit

到这里,rabbitmq集群镜像模式就安装成功了

docker一键安装rabbitmq集群镜像模式脚本:

start_rabbitmq.sh

#创建网卡
docker network create rabbitmq_net
#安装三个rabbitmq组件,一主两从
docker run -d --name=rabbitmq_master -p 5672:5672 -p 15672:15672 -e RABBITMQ_NODENAME=rabbitmq_master -e RABBITMQ_ERLANG_COOKIE='1111111' -h rabbitmq_master --net=rabbitmq_net -v /data/rabbitmq-1/rabbitmq_master/data:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=CiA7rk7L_6gIKnaX  rabbitmq:3.8.27-management
docker run -d --name=rabbitmq_slave1 -p 5673:5672 -p 15673:15672 -e RABBITMQ_NODENAME=rabbitmq_slave1 -e RABBITMQ_ERLANG_COOKIE='1111111' -h rabbitmq_slave1 --net=rabbitmq_net -v /data/rabbitmq-1/rabbitmq_slave1/data:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=CiA7rk7L_6gIKnaX  rabbitmq:3.8.27-management
docker run -d --name=rabbitmq_slave2 -p 5674:5672 -p 15674:15672 -e RABBITMQ_NODENAME=rabbitmq_slave2 -e RABBITMQ_ERLANG_COOKIE='1111111' -h rabbitmq_slave2 --net=rabbitmq_net -v /data/rabbitmq-1/rabbitmq_slave2/data:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=CiA7rk7L_6gIKnaX  rabbitmq:3.8.27-management
#开启三个组件的管理端插件
docker exec -it rabbitmq_master rabbitmq-plugins enable rabbitmq_management
docker exec -it rabbitmq_slave1 rabbitmq-plugins enable rabbitmq_management
docker exec -it rabbitmq_slave2 rabbitmq-plugins enable rabbitmq_management
#salve1加入集群
docker exec -it rabbitmq_slave1 rabbitmqctl stop_app
docker exec -it rabbitmq_slave1 rabbitmqctl join_cluster rabbitmq_master@rabbitmq_master
docker exec -it rabbitmq_slave1 rabbitmqctl start_app
#salve2加入集群
docker exec -it rabbitmq_slave2 rabbitmqctl stop_app
docker exec -it rabbitmq_slave2 rabbitmqctl join_cluster rabbitmq_master@rabbitmq_master
docker exec -it rabbitmq_slave2 rabbitmqctl start_app
#开启镜像队列
docker exec -it rabbitmq_slave1 rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,以下是用 Docker 搭建 RabbitMQ 集群的步骤: 1. 首先,确保已经安装了 DockerDocker Compose。 2. 在本地创建一个新的文件夹,用于存储 RabbitMQ 的配置文件和数据。 3. 在该文件夹中创建一个名为 docker-compose.yml 的文件,并将以下内容复制到该文件中: ``` version: '3' services: rabbitmq-node1: image: rabbitmq:3.8-management-alpine hostname: rabbitmq-node1 environment: RABBITMQ_ERLANG_COOKIE: "secret_cookie" RABBITMQ_DEFAULT_USER: "admin" RABBITMQ_DEFAULT_PASS: "admin" ports: - "5672:5672" - "15672:15672" volumes: - ./data/node1:/var/lib/rabbitmq - ./config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf networks: rabbitmq-network: aliases: - rabbitmq-node1 rabbitmq-node2: image: rabbitmq:3.8-management-alpine hostname: rabbitmq-node2 environment: RABBITMQ_ERLANG_COOKIE: "secret_cookie" RABBITMQ_DEFAULT_USER: "admin" RABBITMQ_DEFAULT_PASS: "admin" volumes: - ./data/node2:/var/lib/rabbitmq - ./config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf networks: rabbitmq-network: aliases: - rabbitmq-node2 rabbitmq-node3: image: rabbitmq:3.8-management-alpine hostname: rabbitmq-node3 environment: RABBITMQ_ERLANG_COOKIE: "secret_cookie" RABBITMQ_DEFAULT_USER: "admin" RABBITMQ_DEFAULT_PASS: "admin" volumes: - ./data/node3:/var/lib/rabbitmq - ./config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf networks: rabbitmq-network: aliases: - rabbitmq-node3 networks: rabbitmq-network: driver: bridge ``` 该文件定义了一个 RabbitMQ 集群,由三个节点组成。每个节点都有一个名称、一个主机名、一个环境变量(Erlang cookie、默认用户名和密码)、端口映射、数据卷和网络别名。该文件还定义了一个网络,用于连接三个节点。 4. 在该文件夹中创建一个名为 config 的文件夹,并在其中创建一个名为 rabbitmq.conf 的文件。将以下内容复制到该文件中: ``` cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-node1 cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-node2 cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq-node3 ``` 该文件定义了 RabbitMQ 集群的配置,包括节点发现方式和节点列表。 5. 在该文件夹中创建一个名为 data 的文件夹,用于存储 RabbitMQ 节点的数据。 6. 在终端中导航到该文件夹,并运行以下命令: ``` 回复:搭建rabbitmq集群需要使用Docker,可以参考Docker官方文档:https://docs.docker.com/engine/examples/rabbitmq/。好的,以下是如何使用Docker搭建RabbitMQ集群的步骤: 1. 首先,确保您已经在本地安装了Docker,并且已经在命令行中登录到了Docker。 2. 在命令行中输入以下命令,以在Docker中下载和运行RabbitMQ镜像: ``` docker run -d --name rabbitmq-node1 -p 5672:5672 -p 15672:15672 rabbitmq:3.8-management ``` 这将下载最新版本的RabbitMQ,并将其运行在Docker容器中。这里我们指定了两个端口,一个用于AMQP通信(5672),另一个用于Web管理界面(15672)。 3. 等待RabbitMQ容器启动后,您可以使用以下命令在另一个容器中运行第二个RabbitMQ节点: ``` docker run -d --name rabbitmq-node2 -p 5673:5672 -p 15673:15672 --link rabbitmq-node1:rabbit1 rabbitmq:3.8-management ``` 这将启动第二个RabbitMQ容器,并将其链接到第一个容器,以便它们可以互相通信。请注意,我们使用了不同的端口(5673和15673),以便避免与第一个节点的端口冲突。 4. 接下来,您可以使用以下命令启动第三个节点: ``` docker run -d --name rabbitmq-node3 -p 5674:5672 -p 15674:15672 --link rabbitmq-node1:rabbit1 --link rabbitmq-node2:rabbit2 rabbitmq:3.8-management ``` 同样,我们指定了不同的端口,并将此容器链接到前两个容器,以创建一个RabbitMQ集群。 5. 等待第三个节点启动后,您可以使用以下命令检查集群状态: ``` docker exec -it rabbitmq-node1 rabbitmqctl cluster_status ``` 这将显示集群中所有节点的状态。 恭喜!您已经成功地在Docker中部署了一个RabbitMQ集群

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妳好,y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值