当前位置: 首页 > web >正文

docker启动的rabbitmq搭建并集群和高可用

Docker 搭建 RabbitMQ 集群步骤

以下是使用 Docker 快速搭建 RabbitMQ 集群的详细步骤,包含配置文件、网络设置和集群组建过程。

1. 创建自定义网络

首先创建一个 Docker 网络,使容器间可以通过名称互相访问:

docker network create rabbitmq-cluster

2. 准备配置文件

创建一个配置目录(例如 ~/rabbitmq-config),并在其中创建以下文件:

rabbitmq.conf(所有节点共用)
loopback_users.guest = false
listeners.tcp.default = 5672
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq1
cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq2
cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq3
cluster_partition_handling = autoheal
management.tcp.port = 15672
.erlang.cookie(所有节点共用,需保证相同)
echo "YOUR_SECRET_COOKIE" > ~/rabbitmq-config/.erlang.cookie
chmod 400 ~/rabbitmq-config/.erlang.cookie  # 重要:权限必须为 400

3. 启动第一个节点(rabbitmq1)

docker run -d --name rabbitmq1 \--net rabbitmq-cluster \-p 5672:5672 \-p 15672:15672 \-v ~/rabbitmq-config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \-v ~/rabbitmq-config/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \-e RABBITMQ_NODENAME=rabbit@rabbitmq1 \rabbitmq:3.11-management

4. 启动第二个节点(rabbitmq2)

docker run -d --name rabbitmq2 \--net rabbitmq-cluster \-p 5673:5672 \-p 15673:15672 \-v ~/rabbitmq-config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \-v ~/rabbitmq-config/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \-e RABBITMQ_NODENAME=rabbit@rabbitmq2 \rabbitmq:3.11-management

5. 启动第三个节点(rabbitmq3)

docker run -d --name rabbitmq3 \--net rabbitmq-cluster \-p 5674:5672 \-p 15674:15672 \-v ~/rabbitmq-config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \-v ~/rabbitmq-config/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \-e RABBITMQ_NODENAME=rabbit@rabbitmq3 \rabbitmq:3.11-management

6. 组建集群

进入第二个节点容器并加入集群:

docker exec -it rabbitmq2 bash# 在容器内执行
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbitmq1
rabbitmqctl start_app
exit

类似地,对第三个节点执行相同操作:

docker exec -it rabbitmq3 bash# 在容器内执行
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbitmq1
rabbitmqctl start_app
exit

7. 验证集群状态

可以通过以下方式验证集群是否成功组建:

方法1:通过命令行
docker exec -it rabbitmq1 rabbitmqctl cluster_status
方法2:通过管理界面

访问任一节点的管理界面(例如:http://localhost:15672),使用默认用户名 guest 和密码 guest 登录,查看 Admin → Nodes 页面。

8. 启用镜像队列(可选)

为保证消息高可用,可以配置镜像队列:

docker exec -it rabbitmq1 rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'

9. 客户端连接

客户端可以连接到任意节点:

  • amqp://localhost:5672(rabbitmq1)
  • amqp://localhost:5673(rabbitmq2)
  • amqp://localhost:5674(rabbitmq3)

注意事项

  1. Cookie 文件权限.erlang.cookie 文件权限必须为 400,否则节点间无法通信

  2. 节点命名:使用 Docker 网络中的容器名称(如 rabbit@rabbitmq1

  3. 端口映射:生产环境建议使用负载均衡器(如 Nginx、HAProxy)统一暴露端口

  4. 持久化存储:生产环境应挂载数据卷,避免容器重启导致数据丢失

  5. 集群脑裂:配置 cluster_partition_handling = autoheal 避免网络分区时的脑裂问题

通过以上步骤,你可以快速搭建一个三节点的 RabbitMQ 集群,支持高可用性和横向扩展。

http://www.xdnf.cn/news/14702.html

相关文章:

  • 算法与数据结构:动态规划DP
  • 【时时三省】(C语言基础)指针变量例子
  • Kafka 源码剖析:消息存储与协议实现(二)
  • Perplexity AI:对话式搜索引擎的革新者与未来认知操作系统
  • C++ - 标准库之 <string> npos(npos 概述、npos 的作用)
  • ICML 2025 | 时空数据(Spatial-Temporal)论文总结
  • 【数据结构】七种常见排序算法
  • 商品中心—10.商品B端搜索系统的说明文档
  • 详解Redis数据库和缓存不一致的情况及解决方案
  • WEB3合约开发以太坊中货币单位科普
  • react day.js使用及经典场景
  • 【代码解析】opencv 安卓 SDK sample - 1 - HDR image
  • SQL 分页方法全解析:从基础到高级应用
  • 深入解析ID3算法:信息熵驱动的决策树构建基石
  • 【Qt开发】网络运用
  • 项目中后端如何处理异常?
  • JAVA锁机制:对象锁与类锁
  • 一、什么是生成式人工智能
  • GPT-1 与 BERT 架构
  • MySQL之InnoDB存储引擎深度解析
  • 软件工程期末试卷填空题版带答案(共40道)
  • 【环境配置】在Ubuntu Server上安装5090 PyTorch环境
  • CVE-2024-6387漏洞、CVE-2025-26465漏洞、CVE-2025-26466漏洞 一口气全解决
  • 题解:P11501 [ROIR 2019] 探险队(Day 2)
  • 【软考高级系统架构论文】论无服务器架构及其应用
  • 在 `setup` 函数中使用 Vuex
  • 通过 Lambda + API Gateway + 外部 API 实现。
  • Django数据库迁移
  • LLM:重构数字世界的“智能操作系统”
  • Java面试题025:一文深入了解数据库Redis(1)