赞
踩
之前在网上找rabbitmq集群方案有哪几种时,基本上看到的答案都不太一样,所以此文的主要目的是梳理一下rabbitmq集群方案,对rabbitmq集群方案的笔记并不是搭建的笔记。
总结了一些文章,rabbitmq集群大概有五种方案:普通集群、镜像集群(高可用)、Quorum(仲裁)队列、Streams集群模式(高可用+负载均衡)、插件方式。
我们来看看rabbitmq集群搭建的步骤,主要包括以下几步:
/etc/hosts
文件以确保节点间可以互相解析。以上就是rabbitmq集群搭建的大致步骤,可以看到比较关键的地方就是搭建集群(官方叫集群形成Cluster Formation)与配置镜像队列。也就是官方文档中的
下面就来具体分析一下:
最常用的应该还是使用 rabbitmqctl 手动操作的方式
RabbitMQ提供了几种不同的节点同步模型,每种模型都有其特定的用途和权衡。让我们来详细探讨一下RabbitMQ中的主要节点同步模型:
在普通集群中,队列的内容只存在于其声明的节点上。其他节点只存储元数据(如队列名称、绑定关系等)。当客户端连接到非队列所在节点并执行诸如消费消息的操作时,该节点会作为代理,将请求转发给实际持有队列的节点。
如果生产者向集群中的Node3节点发送一条消息,此时集群中的其它节点是没有这条消息的,只有Node3才这条消息。
镜像队列是RabbitMQ实现高可用性的传统方式。队列可以在集群中的多个节点上拥有镜像(副本)。有一个主副本(master)和多个从副本(slave)。所有对队列的操作都首先在主副本上执行,然后异步复制到从副本。
如果生产者向集群发送一条消息,此时集群中的其它节点都会有这条消息。
Classic Queue Mirroring已被弃用
在RabbitMQ的早期版本中,经典队列镜像允许队列内容在集群中的多个节点上进行复制,以实现高可用性。然而,由于其性能和可扩展性的限制,它将在RabbitMQ 4.0版本中被弃用,并建议使用Quorum队列和Streams作为替代。
翻译:
本指南介绍了已弃用且计划删除的功能:经典队列的镜像(队列内容复制)。应使用 Quorum queues and/or streams,而不是镜像经典队列。
Classic Queue Mirroring(经典队列镜像)是RabbitMQ中的一种机制,用于实现高可用性。它的工作原理可以通过以下几点来解释:
Quorum队列是在RabbitMQ 3.8中引入的,旨在克服镜像队列的一些限制。基于Raft共识算法,提供更强的一致性保证。队列数据在奇数个节点(通常是3或5)之间复制。只要大多数节点(即quorum)可用,队列就能继续工作。
Quorum队列与镜像队列类似,不过在性能与完整性做了权衡,只要集群中的大多数节点(即quorum)可用。另外集群的节点使用的是Leader和follower。
Streams是RabbitMQ 3.9+ 最新引入的一种新型数据结构,借鉴了Apache Kafka的一些理念。消息以追加日志的形式存储,支持多消费者订阅,每个消费者维护自己的消费位置。
RabbitMQ 3.9引入了流特性,它是为高吞吐量场景优化的。流由领导者和副本Erlang进程组成,分布在RabbitMQ集群的节点上。发布应用程序可以连接到任何节点,消息会自动转发到领导者进程所在的节点。而消费应用程序必须连接到包含流成员的节点,以利用sendfile优化。
Shovel Plugin 的主要目标是实现消息从一个 RabbitMQ 集群(或单个节点)到另一个 RabbitMQ 集群(或单个节点)的可靠传输。它通常用于在地理上分散的集群之间传递消息,或者在需要跨数据中心传递消息时使用。也有人把它叫成远程模式。
Federation Plugin 旨在允许 RabbitMQ 集群之间的动态消息共享。这意味着在不进行消息的物理传输的情况下,可以在多个 RabbitMQ 集群之间共享消息流,通常用于构建更松散耦合的集群架构。也有人把它叫成多活模式。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。