在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不对有可能就是这个原因。

相关推荐
林鸿群29 分钟前
Docker运行MSSQL2022
运维·docker·容器
A-刘晨阳43 分钟前
ELFK 8.12.2 部署 -- docker部署方式⚽
linux·运维·elk·docker·容器
清华kenny1 小时前
docker部署redis/mongodb/
redis·mongodb·docker
繁星日月2 小时前
利用docker搭建漏洞环境,使用SSRF+Redis写入centos以及ubuntu的公钥,实现免密登录
redis·安全·ubuntu·docker·容器·centos·渗透
Roc-xb4 小时前
Failed to get D-Bus connection: Operation not permitted
docker·wsl·centos7
Python私教12 小时前
docker部署onlyoffice,开启JWT权限校验Token
运维·docker·容器
mry615 小时前
Docker 容器网络及其配置说明
docker·容器
微风◝17 小时前
三、docker配置阿里云镜像仓库并配置docker代理
阿里云·docker·容器
躺平攻城狮18 小时前
docker中实现多机redis主从集群
redis·docker·容器
dazhong201221 小时前
Docker 入门篇(十 一)-- 网络配置总结
网络·docker·容器