在Docker中搭建rabbit MQ集群 (Mac + OrbStack)

我以为用docker搭建一个rabbitMq集群会非常简单,但是结果却出乎意料,我花了差不多两个半天才搞定。这还是依赖了AI的协助,否则难度不敢想象。

我的环境是Mac上的OrbStack。用了Kimi + 文心一言 + ChatGPT + Claude,还是Kimi价值最大。

back and forth 的过程就不讲了,这里直接说一下正确步骤。

创建docker-compose文件

既然是集群,肯定要用到docker-compose了。

建一个文件夹,比如叫rabbit3.

在里面创建docker-compose.yml:

yml 复制代码
version: '3'
services:
  rabbitmq1:
    image: rabbitmq:3.6-management
    hostname: rabbitmq1
    environment:
      - RABBITMQ_ERLANG_COOKIE='secretcookie'
      - RABBITMQ_DEFAULT_USER=guest
      - RABBITMQ_DEFAULT_PASS=guest
      - AUTOCLUSTER_TYPE=docker
      - AUTOCLUSTER_DISCOVERY_NODE=rabbitmq1
    ports:
      - "5672:5672"
      - "15672:15672"
    volumes:
      - ./data/rabbitmq1:/var/lib/rabbitmq
    networks:
      - rabbitmq-cluster

  rabbitmq2:
    image: rabbitmq:3.6-management
    hostname: rabbitmq2
    environment:
      - RABBITMQ_ERLANG_COOKIE='secretcookie'
      - RABBITMQ_DEFAULT_USER=guest
      - RABBITMQ_DEFAULT_PASS=guest
      # - RABBITMQ_CLUSTER_FORMATION_PEER_DISCOVERY=docker
      - AUTOCLUSTER_TYPE=docker
      - AUTOCLUSTER_DISCOVERY_NODE=rabbitmq1
    volumes:
      - ./data/rabbitmq2:/var/lib/rabbitmq
    networks:
      - rabbitmq-cluster
    ports:
      - "15673:15672"
      - "5673:5672"
    depends_on:
      - rabbitmq1
    links:
      - rabbitmq1

  rabbitmq3:
    image: rabbitmq:3.6-management
    hostname: rabbitmq3
    environment:
      - RABBITMQ_ERLANG_COOKIE='secretcookie'
      - RABBITMQ_DEFAULT_USER=guest
      - RABBITMQ_DEFAULT_PASS=guest
      # - RABBITMQ_CLUSTER_FORMATION_PEER_DISCOVERY=docker
      - AUTOCLUSTER_TYPE=docker
      - AUTOCLUSTER_DISCOVERY_NODE=rabbitmq1
    volumes:
      - ./data/rabbitmq3:/var/lib/rabbitmq
    networks:
      - rabbitmq-cluster
    ports:
      - "15674:15672"
      - "5674:5672"
    depends_on:
      - rabbitmq1
    links:
      - rabbitmq1



networks:
  rabbitmq-cluster:
    external: true

最后那里是external: true是因为我自己把网络提前创建好了。如果没有的话就把最后一行删掉就行。

单独创建网络的命令是 docker network create rabbitmq-cluster

创建集群

先执行docker-compose up -d启动容器。启动以后访问本地的15672端口,用guest账户登陆。正常应该能看到一个节点在运行。

然后进入第一个节点的控制台,分别执行

bash 复制代码
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

进入第二个和第三个节点的控制台,执行

bash 复制代码
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbitmq1
rabbitmqctl start_app

完了以后控制台自动刷新应该能看到三个节点了

敢惹我?后悔也晚了

集群助手

很多资料说可以用其他途径实现,我尝试了一些,大部分没尝试。

比如文心一言说可以使用docker 镜像everestoss/rabbitmq-cluster-discovery来自动搭建集群。但是我怎么也搜不到这个镜像。

docker mirror

本来我配置了阿里的mirror,但是怎么拉也拉不下新镜像。知乎了半天找到一个https://registry.dockermirror.com,配到orbStack上替换了阿里的,速度很快。但是几个小时后也不能用了。什么情况?

控制台没法登陆

可能由于我之前测试了太多其他版本的rabbitMq,集群启动后 http://localhost:15672/ 竟然打不开。准确说是打开了啥也看不到,F12也看不到报错。最后还是靠GPT3.5说清空浏览器缓存可以了。

其他版本

我之前是下载了3.12的镜像的,但是rabbitmqctl用不了。后来试了3.13也是一样的问题。3.7和3.8的镜像创建了容器连启动都启动不了,说数据库schema不对。最后还是用了3.6。

卷数据不能留

每次创建容器之前,上一次的卷一定要删掉。我是映射到文件夹里的data目录的,开始没删发现会影响新容器。所以上面说的3.8和3.9的schema不对有可能就是这个原因。

相关推荐
AugustSkys3 小时前
从 Docker 到 Containerd:Kubernetes 时代容器运行时完全指南
docker·容器·kubernetes·containerd
莫陌尛.8 小时前
Docker MySQL 删表卡死、执行超时(MDL锁阻塞)问题复盘与根治方案
mysql·docker·容器
星辰徐哥12 小时前
本地视频预览别只自己看:把Remotion动效项目发给客户远程验收
docker·ai·node.js·html·音视频·react·remotion
fb_1234516 小时前
Docker入门-第3章-容器镜像深度解析
运维·docker·容器
IT摆渡者18 小时前
基于 Docker 部署 Nextcloud 私有云盘(外挂 Windows 共享)项目实践
运维·docker·容器
新时代牛马19 小时前
单机 docker run 管不住了?从编排需求、期望状态到调度/自愈闭环讲透
运维·docker·容器
binqian19 小时前
Docker Desktop(WSL2 后端)三层网络互通技术文档
网络·docker·容器
LuiChun20 小时前
与精神病患者的日常探讨20260913
docker
闲云野鹤在人间21 小时前
Docker入门|第1章 容器生态系统完整解析
运维·服务器·docker·容器·centos
KIDULT°1 天前
Docker 从 0 入门|吃透容器生态、架构与 Dockerfile 实战
docker·容器·架构