2024最全RabbitMQ集群方案汇总

简介: 本文梳理了RabbitMQ集群的几种方案,主要包括普通集群、镜像集群(高可用)、Quorum队列(仲裁队列)、Streams集群模式(高可用+负载均衡)和插件方式。重点介绍了每种方案的特点、优缺点及适用场景。搭建步骤包括安装Erlang和RabbitMQ、配置集群节点、修改hosts文件、配置Erlang Cookie、启动独立节点并创建集群,以及配置镜像队列以提高可用性和容错性。推荐使用Quorum队列与Streams模式,其中Quorum队列适合高可用集群,Streams模式则同时支持高可用和负载均衡。此外,还有Shovel和Federation插件可用于特定场景下的集群搭建。

之前在网上找rabbitmq集群方案有哪几种时,基本上看到的答案都不太一样,所以此文的主要目的是梳理一下rabbitmq集群方案,对rabbitmq集群方案的笔记并不是搭建的笔记。

总结了一些文章,rabbitmq集群大概有五种方案:普通集群、镜像集群(高可用)、Quorum(仲裁)队列、Streams集群模式(高可用+负载均衡)、插件方式。

添加图片注释,不超过 140 字(可选)

我们来看看rabbitmq集群搭建的步骤,主要包括以下几步:

  1. 准备工作:安装 Erlang和RabbitMQ  。
  2. 集群配置
  • 修改/etc/hosts文件以确保节点间可以互相解析。
  • 配置Erlang Cookie以确保节点间可以通信。
  • 启动独立节点并创建集群。
  1. 配置同步(原本叫配置镜像队列):为了提高集群的可用性和容错性,可以配置镜像队列来在集群中的多个节点上复制存储消息。

以上就是rabbitmq集群搭建的大致步骤,可以看到比较关键的地方就是搭建集群(官方叫集群形成Cluster Formation)与配置镜像队列。也就是官方文档中的

  • How clusters are formed(集群形成)
  • Queue and stream leader replica placement strategies(集群节点同步)

下面就来具体分析一下:


添加图片注释,不超过 140 字(可选)



一、集群形成


添加图片注释,不超过 140 字(可选)



  • 通过在配置文件中列出集群节点以声明方式
  • 以声明方式使用基于 DNS 的发现
  • 以 AWS (EC2) 实例发现(通过插件)的声明方式
  • 以声明方式使用 Kubernetes 发现(通过插件)
  • 声明性地使用基于 Consul 的发现(通过插件)
  • 以声明方式使用基于 etcd 的发现(通过插件)
  • 使用 rabbitmqctl 手动操作


最常用的应该还是使用 rabbitmqctl 手动操作的方式

二、集群方案

RabbitMQ提供了几种不同的节点同步模型,每种模型都有其特定的用途和权衡。让我们来详细探讨一下RabbitMQ中的主要节点同步模型:

2.1、普通模式

在普通集群中,队列的内容只存在于其声明的节点上。其他节点只存储元数据(如队列名称、绑定关系等)。当客户端连接到非队列所在节点并执行诸如消费消息的操作时,该节点会作为代理,将请求转发给实际持有队列的节点。

添加图片注释,不超过 140 字(可选)

如果生产者向集群中的Node3节点发送一条消息,此时集群中的其它节点是没有这条消息的,只有Node3才这条消息。

  • 优点:资源利用效率高,因为消息不会被复制到所有节点。
  • 缺点:如果持有队列的节点宕机,该队列将不可用,直到节点恢复。

2.2、镜像队列模式(Classic Queue Mirroring)

镜像队列是RabbitMQ实现高可用性的传统方式。队列可以在集群中的多个节点上拥有镜像(副本)。有一个主副本(master)和多个从副本(slave)。所有对队列的操作都首先在主副本上执行,然后异步复制到从副本。

添加图片注释,不超过 140 字(可选)

如果生产者向集群发送一条消息,此时集群中的其它节点都会有这条消息。

  • 优点:提高了可用性,因为如果主副本所在的节点失效,最老的从副本会被提升为新的主副本。
  • 缺点:
  • 增加了网络带宽和磁盘空间的使用,因为每个消息都被复制到所有镜像。
  • 写入吞吐量可能下降,因为每个操作都需要被复制。
  • 在网络分区的情况下可能导致脑裂或数据丢失。

Classic Queue Mirroring已被弃用

在RabbitMQ的早期版本中,经典队列镜像允许队列内容在集群中的多个节点上进行复制,以实现高可用性。然而,由于其性能和可扩展性的限制,它将在RabbitMQ 4.0版本中被弃用,并建议使用Quorum队列和Streams作为替代。


添加图片注释,不超过 140 字(可选)


翻译: 本指南介绍了已弃用且计划删除的功能:经典队列的镜像(队列内容复制)。应使用 Quorum queues and/or streams,而不是镜像经典队列。

Classic Queue Mirroring(经典队列镜像)是RabbitMQ中的一种机制,用于实现高可用性。它的工作原理可以通过以下几点来解释:

2.3、Quorum队列模式(仲裁队列)

Quorum队列是在RabbitMQ 3.8中引入的,旨在克服镜像队列的一些限制。基于Raft共识算法,提供更强的一致性保证。队列数据在奇数个节点(通常是3或5)之间复制。只要大多数节点(即quorum)可用,队列就能继续工作。

添加图片注释,不超过 140 字(可选)

Quorum队列与镜像队列类似,不过在性能与完整性做了权衡,只要集群中的大多数节点(即quorum)可用。另外集群的节点使用的是Leader和follower。

  • 优点:
  • 更好的故障处理:能更优雅地处理网络分区,减少数据丢失的风险。
  • 显式的故障转移:不像镜像队列中的隐式故障转移,Quorum队列中的leader选举是明确的。
  • 没有脑裂问题:由于使用了共识算法,即使在网络分区的情况下也能保证数据一致性。
  • 缺点:
  • 由于需要在多数节点上达成一致,可能比镜像队列稍慢一些。
  • 不支持一些高级特性,如优先级队列、消息TTL等。

2.4、流模式(Streams)

Streams是RabbitMQ 3.9+ 最新引入的一种新型数据结构,借鉴了Apache Kafka的一些理念。消息以追加日志的形式存储,支持多消费者订阅,每个消费者维护自己的消费位置。


添加图片注释,不超过 140 字(可选)


RabbitMQ 3.9引入了流特性,它是为高吞吐量场景优化的。流由领导者和副本Erlang进程组成,分布在RabbitMQ集群的节点上。发布应用程序可以连接到任何节点,消息会自动转发到领导者进程所在的节点。而消费应用程序必须连接到包含流成员的节点,以利用sendfile优化。

  • 优点:
  • 持久化开销小,非常适合需要长期存储大量消息的场景。
  • 支持消息重放,消费者可以从任意位置开始消费。
  • 集群复制基于Raft算法,提供了类似Quorum队列的一致性保证。
  • 缺点:
  • 作为新特性,可能还不够成熟,某些客户端库的支持可能有限。

2.5、插件

Shovel Plugin

Shovel Plugin 的主要目标是实现消息从一个 RabbitMQ 集群(或单个节点)到另一个 RabbitMQ 集群(或单个节点)的可靠传输。它通常用于在地理上分散的集群之间传递消息,或者在需要跨数据中心传递消息时使用。也有人把它叫成远程模式。

Federation Plugin

Federation Plugin 旨在允许 RabbitMQ 集群之间的动态消息共享。这意味着在不进行消息的物理传输的情况下,可以在多个 RabbitMQ 集群之间共享消息流,通常用于构建更松散耦合的集群架构。也有人把它叫成多活模式。


总结

  • 目前推荐使用的集群模式就是Quorum队列与Streams,大多数应该还是Quorum队列模式。
  • Quorum队列支持的是高可用集群,而Streams模式即支持高可用集群与支持负载均衡集群。当然Quorum队列模式也可以借助如HAproxy来支持负载均衡。
  • 另外除了以上说的方式外还有一些插件可以搭建集群如federation搭建多活集群。
相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
16天前
|
消息中间件 RocketMQ
2024最全RocketMQ集群方案汇总
在研究RocketMQ集群方案时,发现网上存在诸多不一致之处,如组件包含NameServer、Broker、Proxy等。通过查阅官方文档,了解到v4.x和v5.x版本的差异。v4.x部署模式包括单主、多主、多主多从(异步复制、同步双写),而v5.x新增Local与Cluster模式,主要区别在于Broker和Proxy是否同进程部署。Local模式适合平滑升级,Cluster模式适合高可用需求。不同模式下,集群部署方案大致相同,涵盖单主、多主、多主多从等模式,以满足不同的高可用性和性能需求。
80 0
|
3月前
|
消息中间件 存储 弹性计算
云消息队列 RabbitMQ 版方案评测
本文评估了阿里云《高弹性,低成本,云消息队列 RabbitMQ 实践》方案,从实践原理理解、部署体验、方案优势展现及业务场景匹配四个方面进行了深入分析。文中指出,该方案在解决消息积压、提高系统稳定性、支持弹性伸缩等方面表现优异,但也提出了在组件功能解释、实战案例提供等方面的改进建议,以期帮助用户更好地理解和应用该技术解决方案。
161 0
|
5月前
|
消息中间件 存储 负载均衡
|
5月前
|
消息中间件 存储 负载均衡
"RabbitMQ集群大揭秘!让你的消息传递系统秒变超级英雄,轻松应对亿级并发挑战!"
【8月更文挑战第24天】RabbitMQ是一款基于AMQP的开源消息中间件,以其高可靠性、扩展性和易用性闻名。面对高并发和大数据挑战时,可通过构建集群提升性能。本文深入探讨RabbitMQ集群配置、工作原理,并提供示例代码。集群由多个通过网络连接的节点组成,共享消息队列,确保高可用性和负载均衡。搭建集群需准备多台服务器,安装Erlang和RabbitMQ,并确保节点间通信顺畅。核心步骤包括配置.erlang.cookie文件、使用rabbitmqctl命令加入集群。消息发布至任一节点时,通过集群机制同步至其他节点;消费者可从任一节点获取消息。
57 2
|
5月前
|
存储 C# 关系型数据库
“云端融合:WPF应用无缝对接Azure与AWS——从Blob存储到RDS数据库,全面解析跨平台云服务集成的最佳实践”
【8月更文挑战第31天】本文探讨了如何将Windows Presentation Foundation(WPF)应用与Microsoft Azure和Amazon Web Services(AWS)两大主流云平台无缝集成。通过具体示例代码展示了如何利用Azure Blob Storage存储非结构化数据、Azure Cosmos DB进行分布式数据库操作;同时介绍了如何借助Amazon S3实现大规模数据存储及通过Amazon RDS简化数据库管理。这不仅提升了WPF应用的可扩展性和可用性,还降低了基础设施成本。
101 0
|
6月前
|
消息中间件 Prometheus 监控
消息队列 MQ使用问题之如何将旧集群的store目录迁移到新集群
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
6月前
|
消息中间件 RocketMQ
MetaQ/RocketMQ 原理问题之当消费集群规模较大时,处理分配不到队列的Consumer的问题如何解决
MetaQ/RocketMQ 原理问题之当消费集群规模较大时,处理分配不到队列的Consumer的问题如何解决
|
5月前
|
消息中间件 API 数据安全/隐私保护
就软件研发问题之RocketMQ ACL 2.0加强集群组件间访问控制的问题如何解决
就软件研发问题之RocketMQ ACL 2.0加强集群组件间访问控制的问题如何解决
|
5月前
|
消息中间件 固态存储 RocketMQ
RocketMQ消息堆积常见场景与处理方案
文章分析了在使用RocketMQ时消息堆积的常见场景,如消费者注册失败或消费速度慢于生产速度,并提供了相应的处理方案,包括提高消费并行度、批量消费、跳过非重要消息以及优化消费代码业务逻辑等。
|
6月前
|
消息中间件 负载均衡 算法
【RocketMQ系列十二】RocketMQ集群核心概念之主从复制&生产者负载均衡策略&消费者负载均衡策略
【RocketMQ系列十二】RocketMQ集群核心概念之主从复制&生产者负载均衡策略&消费者负载均衡策略
172 2