我以为用docker搭建一个rabbitMq集群会非常简单,但是结果却出乎意料,我花了差不多两个半天才搞定。这还是依赖了AI的协助,否则难度不敢想象。
我的环境是Mac上的OrbStack。用了Kimi + 文心一言 + ChatGPT + Claude,还是Kimi价值最大。
back and forth 的过程就不讲了,这里直接说一下正确步骤。
既然是集群,肯定要用到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
来自动搭建集群。但是我怎么也搜不到这个镜像。
本来我配置了阿里的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不对有可能就是这个原因。