我以為用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
。
建立叢集
先執行docker-compose up -d
啟動容器。啟動以後訪問本地的15672埠,用guest賬戶登陸。正常應該能看到一個節點在執行。
然後進入第一個節點的控制檯,分別執行
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
進入第二個和第三個節點的控制檯,執行
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不對有可能就是這個原因。