2024最全RabbitMQ集群方案汇总

news2024/12/28 19:22:47

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

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

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

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

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

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

下面就来具体分析一下:

一、集群形成

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

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

二、集群方案

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

2.1、普通模式

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

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

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

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

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

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

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

Classic Queue Mirroring已被弃用

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

翻译:

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

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

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

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

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

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

2.4、流模式(Streams)

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

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搭建多活集群。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1962909.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文搞懂网络IO和java中的IO模型

目录 1.绪论 2.IO分类 3.用户空间和内核空间 4.同步阻塞IO 5.同步非阻塞IO 6.IO多路复用 6.1 基本原理 6.2 linux对IO多路复用的实现方式 6.3.1 select 1.实现原理 2.缺点 6.3.2 poll 1.实现原理 6.3.3 epoll 1.epoll数据结构 2.epoll的函数 3.epoll的优点 4…

【实践出真知】使用Docusaurus将md文档组织起来就是一个网站(写API文档,写教程、写日记、写博客的有福了)

文章目录 前言一、Docusaurus 是什么?二、一键生成网站框架并预览1. 系统需求2. 脚手架项目网站(一键生成网站框架)3. 生成的目录内容4. 网站运行与展示 总结 前言 前段时间,学习Flet,访问到Flet中文网,被…

魔方财务新版QRuser用户中心主题

本主题支持魔方财务3.5.7版本!可自由切换魔方财务3.5.7版本与其他版本。本主题基于官方default开发,主要面向企业,三端自适应,支持并完美适配多语言。界面精美,简洁清新,主题内新增多处bootstrap-select的调…

软考系统架构师-计算机网络基础

目录 3.1 网络的基本概念 3.2 通信技术 3.3 网络技术 3.4 组网技术 1.网络设备及其工作层级 2.网络协议 (1)应用层协议。 (2)传输层协议。 (3)网络层协议。 3.交换机 4&#xff0e…

Speckly:基于Speckle文档的RAG智能问答机器人

前言 Speckly 是一个基于 检索增强生成 (RAG) 技术的智能问答机器人,它能像一位经验丰富的工程师,理解你的问题,并从 Speckle 文档中精准地找到答案。更厉害的是,它甚至可以帮你生成代码片段! 🚀 本文将详…

linux:基本权限

1、权限与用户之间的关系 在Linux系统中,针对文件定义了三种身份,分别是属主(owner)、属组(group)、其他人(others),每一种身份又对应三种权限,分别是可读(readable)、可写(writable)、可执行(excutable)。 2、如何修改一个文件的…

快团团等社区团购类小区物资团购怎么按商品批量退款?

疫情期间,小区物资团的配送需要达到一定的起送件数,对于一些没有达到起送件数的商品,如何快速地批量退款呢?按照下列操作,只需四步,就可以对某一商品批量退款。 第1步:进入团购页面&#xff0c…

JavaScript(二)变量

一、两种注释方式 // 这是当行注释/* 这是多行注释 这是多行注释 */二、变量是什么 变量就是一个可以存放“数值”的容器,这个“数值”可以是数字、字符串、函数等。 变量不是数值本身,它是一个用于存储数值的容器,你可以把变量想象成一个个…

解决断点问题导致项目没有完全启动bug

场景: 项目启动正常,启动日志也正常打印,但是无法判断是否启动完毕,访问接口也进不了服务 原因: 启动前调试项目打断点时 不晓得打到了某个层面的断点 具体是哪忘了,导致项目没有完全启动,启…

WIFI7:引领智能驾驶新未来

近年来,智能驾驶技术飞速发展,从最初的初级的辅助驾驶逐步迈向高度自动驾驶,这一变化历程深刻依赖的是高效、稳定且前沿的无线通信技术的支撑。WIFI7,作为无线通信领域的最新里程碑,凭借其前所未有的性能提升与功能拓展…

一级指针和一维数组

文章目录 🍊自我介绍🍊一级指针和一维数组🍊a , &a[0]和&a之间的关系 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞关注评论收藏(一键四连)哦~ 🍊自我介绍 Hello,大家好…

Tugraph的安装部署

文章目录 一、安装Docker二、拉取TuGraph镜像三、访问web端 一、安装Docker http://t.csdnimg.cn/djJYX 二、拉取TuGraph镜像 https://hub.docker.com/search?qtugraph 拉取的时间会有些长 docker pull tugraph/tugraph-compile-ubuntu18.04如docker镜像拉取失败&#xff…

IDEA管理远程仓库Git

1、模拟项目 新建一个文件夹,用来这次演示 用IDEA来打开文件夹 2、创建仓库 在IDEA中给该文件夹创建本地仓库和远程仓库 在菜单栏找到VCS选择Share project on Gitee 在弹窗中输入描述信息 接下来会出现以下弹窗 点击ADD后,在gitee上会创建远程仓库 …

敏捷产品经理实训:助力产品负责人掌握敏捷方法,提升产品开发效率

在当今快节奏的市场环境中,产品经理和产品负责人需要快速响应市场变化,推动产品创新,以满足用户不断变化的需求。敏捷产品经理实训课程专为产品经理和产品负责人设计,旨在帮助他们掌握敏捷方法,提高团队协作和产品开发…

python dash框架

Dash 是一个用于创建数据分析型 web 应用的 Python 框架。它由 Plotly 团队开发,并且可以用来构建交互式的 web 应用程序,这些应用能够包含图表、表格、地图等多种数据可视化组件。 Dash 的特点: 易于使用:Dash 使用 Python 语法…

二叉树的介绍及其顺序结构的实现

Hello, 亲爱的小伙伴们,你们的作者菌又回来了,之前我们学习了链表、顺序表、栈等常见的数据结构,今天我们将紧跟之前的脚步,继续学习二叉树。 好,咱们废话不多说,开始我们今天的正题。 1.树 1.1树的概念和…

Vue3+.NET6前后端分离式管理后台实战(三十二)

1,Vue3.NET6前后端分离式管理后台实战(三十二)

Java上门做饭平台系统小程序源码

🍽️解锁新生活方式!揭秘“上门做饭平台系统”的五大魅力🌟 🏠【懒人福音,美食直达家门】 在这个快节奏的时代,谁不想下班后直接享受热腾腾的家常美味呢?上门做饭平台系统就是你的私人厨师团队…

java基础概念07-switch语句

一、switch定义 二、基本语法 switch (expression) { case value1: // 当expression的值等于value1时执行的代码 break; // 可选 case value2: // 当expression的值等于value2时执行的代码 break; // 可选 // 你可以有任意数量的case语句 default: // 可选 // 当没有…