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

大卫小东(Sheldon)發表於2024-07-05

我以為用docker搭建一個rabbitMq叢集會非常簡單,但是結果卻出乎意料,我花了差不多兩個半天才搞定。這還是依賴了AI的協助,否則難度不敢想象。

我的環境是Mac上的OrbStack。用了Kimi + 文心一言 + ChatGPT + Claude,還是Kimi價值最大。

back and forth 的過程就不講了,這裡直接說一下正確步驟。

建立docker-compose檔案

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

建一個資料夾,比如叫rabbit3.
在裡面建立docker-compose.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

建立叢集

image

先執行docker-compose up -d啟動容器。啟動以後訪問本地的15672埠,用guest賬戶登陸。正常應該能看到一個節點在執行。
image
然後進入第一個節點的控制檯,分別執行

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

進入第二個和第三個節點的控制檯,執行

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbitmq1
rabbitmqctl start_app

完了以後控制檯自動重新整理應該能看到三個節點了
image

敢惹我?後悔也晚了

叢集助手

很多資料說可以用其他途徑實現,我嘗試了一些,大部分沒嘗試。
比如文心一言說可以使用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不對有可能就是這個原因。

相關文章