RabbitMQ 单机及集群部署

一、Linux单机部署

 

二、Linux集群部署

  简介:RabbitMQ集群的元数据(队列、交换机、绑定、vhost四种)信息在所有节点上是一致的,而存放消息的队列的完整数据则只会存在与它所创建的那个节点上,其他节点只知道这个队列和元信息及一个指向队列的节点指针,当客户端连接的是非队列数据所在节点,该节点会通过指针进行路由转发。

   1. 注意事项

    A. RabbitMQ节点cookie文件的值必须是一致的,因为节点通过cookie值来确定相互是否可通信,该路径为/var/lib/rabbitmq/.erlang.cookie或者$HOME/.erlang.cookie;

    B. 集群节点最低需要三个,符合奇数点部署,千万不要搭建两个节点的集群,因为两个节点失联时,集群不可用;

    C. 集群加入可以通过rabbitmq.conf配置文件或者rabbitmqctl命令来实现,还有另外服务发现机制实现;

    D. 通过rabbitmqctl stop_app关闭全部节点,第一个启动节点需要是最后一个关闭的节点,其他节点启动都会等待它启动成功,超时会报错;

    E. 集群中至少保证2到3个磁盘节点,其他可以是内存节点,因为磁盘节点挂了将不能添加元数据信息,内存节点可以提供更高的性能,而磁盘节点提供可靠性;

    F. RabbitMQ节点是指RabbitMQ应用程序和其所在的Erlang节点;

    G. 服务器断电关机后,依然需要重启插件,比如MQTT、Prometheus等;

 

三、Docker单机部署

  1. stack.yml配置文件

复制代码
复制代码
  # rabbitmq消息
    rabbitmq:
        image: rabbitmq:3.8-management
        ports:
            - 4369:4369
            - 5671:5671
            - 25672:25672
            - 5672:5672
            - 15672:15672
        environment:
            TZ: Asia/Shanghai
            RABBITMQ_DEFAULT_USER: guest
            RABBITMQ_DEFAULT_PASS: guest
复制代码
复制代码

  2. 执行stack.yml文件:docker stack deploy -c stack.yml rabbitmq;

  3. 访问管理界面:打开http://localhost:15672页面,输入正确的用户名和密码也无法登录时,可尝试Ctrl + F5强制刷新一下,因为可能与cookie有关系。

 

四、Linux Docker集群部署

  1. stack.yml配置文件

复制代码
# RabbitMQ消息队列集群
    rabbitmq-1:
        image: rabbitmq/rabbitmq:3.8-with-plugins-alpine
        hostname: rabbitmq-1
        deploy:
            mode: global
            placement:
                constraints: 
                    - node.labels.rabbitmq-1 == true
        networks:
            - rws-mp
        volumes:
            - /etc/localtime:/etc/localtime
            - rabbitmq:/etc/rabbitmq
            - rabbitmq-1-data:/var/lib/rabbitmq
        environment:
            RABBITMQ_ERLANG_COOKIE: rhxy-rabbitmq
    rabbitmq-2:
        image: rabbitmq/rabbitmq:3.8-with-plugins-alpine
        hostname: rabbitmq-2
        deploy:
            mode: global
            placement:
                constraints: 
                    - node.labels.rabbitmq-2 == true
        networks:
            - rws-mp
        volumes:
            - /etc/localtime:/etc/localtime
            - rabbitmq:/etc/rabbitmq
            - rabbitmq-2-data:/var/lib/rabbitmq
        environment:
            RABBITMQ_ERLANG_COOKIE: rhxy-rabbitmq
    rabbitmq-3:
        image: rabbitmq/rabbitmq:3.8-with-plugins-alpine
        hostname: rabbitmq-3
        deploy:
            mode: global
            placement:
                constraints: 
                    - node.labels.rabbitmq-3 == true
        networks:
            - rws-mp
        volumes:
            - /etc/localtime:/etc/localtime
            - rabbitmq:/etc/rabbitmq
            - rabbitmq-3-data:/var/lib/rabbitmq
        environment:
            RABBITMQ_ERLANG_COOKIE: rhxy-rabbitmq
复制代码

  2. 启动集群

    节点一:

      A. 进入rabbitmq容器:docker exec -it myrabbit1 bash

      B. rabbitmqctl stop_app

      C. rabbitmqctl reset

      D. rabbitmqctl start_app 

    节点二:

      A. docker exec -it myrabbit2 bash

      B. rabbitmqctl stop_app

      C. rabbitmqctl reset

      D. rabbitmqctl join_cluster --disc rabbit@rabbit1

      E. rabbitmqctl start_app

 

    节点三:

      A. docker exec -it myrabbit2 bash

      B. rabbitmqctl stop_app

      C. rabbitmqctl reset

      D. rabbitmqctl join_cluster --ram rabbit@rabbit1

      E. rabbitmqctl start_app

  集群脑裂导致网络分区问题可参考官网

 

可参考:RabbitMQ集群官网文档

 

posted @   如幻行云  阅读(370)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示