RabbitMQ集群 - 普通集群搭建、宕机情况
发布日期:2025-05-04 06:37:17 浏览次数:9 分类:精选文章

本文共 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 集群,确保消息的安全存储和传输。

    上一篇:php如何正确的获得文件的后缀名
    下一篇:php如何定义的数位置,php如何实现不借助IDE快速定位行数或者方法定义的文件和位置...

    发表评论

    最新留言

    很好
    [***.229.124.182]2026年05月29日 16时38分53秒