ETJava Beta | Java    注册   登录
  • 搜索:
  • 在Docker中搭建rabbit MQ集群 (Mac + OrbStack)

    发表于      阅读(1)     博客类别:Crawler     转自:https://www.cnblogs.com/somefuture/p/18285895
    如有侵权 请联系我们删除  (页面底部联系我们)  

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