博客
关于我
RabbitMQ集群 - 普通集群搭建、宕机情况
阅读量:798 次
发布时间:2023-03-01

本文共 1838 字,大约阅读时间需要 6 分钟。

RabbitMQ 普通集群搭建与使用

普通集群概述

在 RabbitMQ 的普通集群模式中,所有节点具有完全的一致性,元数据(如交换机、队列、绑定等)在所有节点上保持一致。以下是该模式的核心特点:

  • 元数据一致性:只要有任意一个节点新增交换机、队列或绑定,其他节点会自动复制这些元数据。

  • 消息存储特点:队列中的消息只保存在创建它的节点上。其他节点仅保存队列的元数据和指针(指向消息来源节点)。

  • 消息传输机制

    • 如果生产者向包含多个节点的队列发送消息,RabbitMQ 会将消息转发给对应节点。
    • 消息的最终存储位置取决于生产者的连接目标节点。
  • 集群搭建

    数据准备

  • 启动容器

    • 使用 Docker 启动 RabbitMQ 容器:
      docker run -d --name mq --restart=always \
      -e RABBITMQ_DEFAULT_USER=root \
      -e RABBITMQ_DEFAULT_PASS=1111 \
      -p 15672:15672 \
      -p 5672:5672 \
      rabbitmq:3.8-management
  • 配置共享密钥

    • RabbitMQ 基于 Erlang 实现,节点间通信依赖于共享密钥(.erlang.cookie)。
    • 可自定义密钥值并挂载到各节点。
  • 配置文件

    • 创建 ~/.erlang.cookie 并设置密钥值:
      echo "FQXBTQJMJLRUGFPIECYG" > ~/.erlang.cookie
      chmod 600 ~/.erlang.cookie
    • 创建 rabbitmq.conf 并配置集群参数:
      touch rabbitmq.conf

      配置示例:

      listener.tcp.default = 5672
      cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
      cluster_formation.classic_config.nodes.1 = rabbit@mq1
      cluster_formation.classic_config.nodes.2 = rabbit@mq2
      cluster_formation.classic_config.nodes.3 = rabbit@mq3
  • 节点文件结构

    • 创建三个节点目录:
      mkdir -p ~/mq_cluster/mq1 ~/mq_cluster/mq2 ~/mq_cluster/mq3
    • 将配置文件复制到各节点:
      cp rabbitmq.conf ~/mq_cluster/mq1 ~/mq_cluster/mq2 ~/mq_cluster/mq3
      cp ~/.erlang.cookie ~/mq_cluster/mq1 ~/mq_cluster/mq2 ~/mq_cluster/mq3
  • 启动节点

    • 启动三个节点并挂载配置文件:
      docker run -d --net mq-net \
      -v ~/mq_cluster/mq1/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
      -v ~/mq_cluster/mq1/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \
      -e RABBITMQ_DEFAULT_USER=root \
      -e RABBITMQ_DEFAULT_PASS=1111 \
      --name mq1 --hostname mq1 -p 5672:5672 -p 15672:15672 rabbitmq:3.8-management

      类似地启动 mq2 和 mq3。

  • 验证集群

    • 在 mq1 控制台创建队列,确认 mq2 和 mq3 也显示该队列。
  • 宕机情况

    在节点宕机时,消息丢失的情况如下:

  • 非持久化队列

    • 队列数据仅存在于创建它的节点。
    • 如果 mq1 宕机,mq2 无法访问 mq1 的消息。
  • 持久化队列

    • 消息持久化时,消息存储在磁盘上。
    • mq1 恢复后,其他节点可通过指针重新获取消息。
  • 注意事项

    • 非持久化队列在 mq1 恢复前不可重建。
    • mq1 恢复后,其他节点可创建与 mq1 相同的队列。
  • 通过以上步骤,可以实现一个高可用性的 RabbitMQ 集群,确保消息的安全存储和传输。

    转载地址:http://witfk.baihongyu.com/

    你可能感兴趣的文章
    ok6410内存初始化
    查看>>
    OpenMMLab | 【全网首发】Llama 3 微调项目实践与教程(XTuner 版)
    查看>>
    Openresty框架入门详解
    查看>>
    openshift搭建Istio企业级实战
    查看>>
    ORACEL学习--理解over()函数
    查看>>
    Oracle 递归
    查看>>
    oracle--用户,权限,角色的管理
    查看>>
    Oracle11G基本操作
    查看>>
    Oracle11g静默安装dbca,netca报错处理--直接跟换操作系统
    查看>>
    Oracle——08PL/SQL简介,基本程序结构和语句
    查看>>
    oracle下的OVER(PARTITION BY)函数介绍
    查看>>
    Oracle中DATE数据相减问题
    查看>>
    oracle中sql的case语句运用--根据不同条件去排序!
    查看>>
    oracle中关于日期问题的汇总!
    查看>>
    Oracle中常用的语句
    查看>>
    org.apache.poi.hssf.util.Region
    查看>>
    org/hibernate/validator/internal/engine
    查看>>
    orm总结
    查看>>
    paddle的两阶段基础算法基础
    查看>>
    SpringBoot中重写addCorsMapping解决跨域以及提示list them explicitly or consider using “allowedOriginPatterns“ in
    查看>>