2024最全RabbitMQ集群方案汇总

之前在网上找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://xiahunao.cn/news/3280747.html

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

相关文章

[Linux安全运维] iptables包过滤

前言 防火墙是网络安全中非常重要的设备,是一种将内部网络和外部网络隔离开的技术。简单来说,防火墙技术就是访问控制技术,由规则和动作组成。 1. Linux 包过滤防火墙 1 .1 概述 iptables: 指的是管理Linux防火墙的命令程序&a…

Windows 下后台启动 jar 包,UTF-8 启动 jar 包_windows启动jar

转自:https://blog.csdn.net/2401_83817971/article/details/137514739 本文介绍了如何使用javaw.exe后台启动Javajar包,如何在Windows中管理和设置cmd编码,以及与Python开发相关的学习资源。包括UTF-8编码启动jar包的方法和Windows下关闭后台服务的技…

superset 不显示mysql的选项问题

superset不显示mysql的选项 数据库驱动未安装:确保你已经安装了Python的MySQL数据库驱动,比如mysqlclient。 pip install mysqlclient

vue一些npm i 时报错问题解决【JAVA前后端分离】

前端vue npm i 安装时出现 作为一个懂些前端得 JAVA开发自然是要粗暴解决这个问题了 问题解决 使用命令 npx -p npm6 npm i 即可编译 原因: ERESOLVE与npm版本有关,因为npm版本高对某些事情比npm6.x更严格。通常,最简单的解决方法是将--…

【机器学习基础】机器学习概述与实践基础

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科,通过算法和模型让计算机从数据中学习,进行模型训练和优化,做出预测、分类和决策支持。Python成为机器学习的首选语言,…

STC12C5A60S2单片机输出pwm的方法

所谓的pwm输出就是让单片机在某个管脚上按照时间输出特定频率和占空比的矩形方波。这里面有两个参数,一是频率,二是占空比。两者互不干涉。以STC12C5A60S2为例子,本51型单片机可以有两路pwm输出。以其中的一路为例说明; 首先说频…

Teltonika FMXXX系列定位器解析说明

1.产品外观 2.数据包说明 2.1.登录包 **模块第一次上线,先发送其对应的IMEI号,数据包如下:** 000F313233343536373839303132333435**数据包解析如下:** 000F --packet starts 313233343536373839303132333435 --IMEI 1234567890…

区块链软硬件协同,做产业数字化转型的“安全官” |《超话区块链》直播预告

今年的两会政府工作报告提出:“产业的数字化(行业数字化转型)是发展新质生产力的核心,是推动产业升级实现高质量发展的关键。”全面推进产业数字化,需要技术创新与产业应用深入协同;立足可持续发展的长远目…

泰迪智能科技入选广东省2024年第三批职业技能等级认定社会培训评价组织名单

7月17日,根据《关于公布广东省2023年社会培训评价组织新申请机构进入培育辅导期名单的通知》(粤人社函〔2023〕269号)、《关于公布广东省2023年社会培训评价组织(“产教评”链主培育单位)进入培育辅导期名单的通知》&a…

网络安全是什么?怎么入门网络安全?

一、网络安全的定义 网络安全,简单来说,就是保护网络系统中的硬件、软件以及其中的数据不因偶然或恶意的原因而遭到破坏、更改、泄露,保障系统连续可靠正常地运行,网络服务不中断。 随着信息技术的飞速发展,网络安全的…

docker compose 安装 kafka

一 前置准备 创建 /data/kafkadata /data/zookeeper-1用于保存kafka和zookeeper的配置文件 kafkadata中创建三个文件夹 /kafka1 /kafka2 /kafka3,用于存放三个kafka节点的配置文件 zookeeper-1文件夹中创建 /conf /data /logs /datalog四个文件夹,用于…

IoTDB 入门教程 实战篇④——C#示例(开源)

文章目录 一、前文二、新建C#项目三、NuGet安装四、示例源码五、查询数据六、参考 一、前文 IoTDB入门教程——导读 本文详细阐述了如何通过一个C#项目成功连接到IoTDB时序数据库,进而展示了如何向该数据库高效地写入数据以及执行精确的数据查询操作。 此示例旨在为…

Redis高可用之持久化,以及reids的性能管理

一、redis高可用: 在集群当中有一个非常重要的指标,提供正常服务的时间的百分比(365天)99.9% redis的高可用含义更加宽泛,正常服务是指标之一,数据容量的扩展,数据的安全性 在redis中实现高可…

多模态大模型(MM-LLMs)近期概述

《MM-LLMs: Recent Advances in MultiModal Large Language Models》 论文地址:https://arxiv.org/abs/2401.13601 GitHub地址:https://mm-llms.github.io/ 1.介绍 目的:MM-LLMs旨在减少计算费用并提高多模态预训练的效率, 因为从头开始训…

Data Augmentation数据增强

目录 数据增强是什么 为什么数据增强 数组增强分类 有监督数据增强 无监督数据增强 数据增强是什么 数据增强又称数据扩增,是一种通过应用合理且随机的变换(例如图像位移、旋转)来增加训练集多样性的技术。让有限的数据产生等价于更多数…

Jenkins集成JDK、git、gitee、maven逐步实现自动拉取,自动部署,自动启动

1. jenkins集成JDK 成功登录Jenkins后,选择Manage Jenkins,选择Tools 集成JDK 2. jenkins集成git 因为Jenkins自动从git远程仓库拉取代码 首先要在Jenkins所在的linux服务器上安装git yum install -y git然后,实行集成JDK的第一步 配置g…

C#:枚举及位标志周边知识详解(小白入门)

文章目录 枚举为什么要有枚举?枚举的性质设置默认类型和显式设置成员的值 位标志(重要)位标记是什么及作用位标志周边知识HasFlag判断是否有该功能枚举前面加Flags的好处 关于枚举的更多知识using static简化代码获取枚举成员的字面量 枚举 为什么要有枚举? 为了增加代码的…

FlowUs息流作为一款技术驱动的笔记和知识管理平台,其核心功能和技术优势为新媒体行业带来了革命性的工作效率提升

FlowUs息流作为一款技术驱动的笔记和知识管理平台,其核心功能和技术优势为新媒体行业带来了革命性的工作效率提升。以下是对其技术特色的深入解析: 本地化技术优化:FlowUs息流通过深入研究中文用户的操作习惯,实现了界面的本地化设…

【WRF安装第二期(Ubuntu)】搭建WRF编译所需系统-系统环境检验

WRF安装第二期:搭建WRF编译所需系统-系统环境检验 0 升级和安装基础环境1 系统环境检验(System Environment Tests)1.1 检验和安装基础包1.1.1 安装指令1.1.2 检验指令 1.2 WRF安装的目录结构1.2.1 WRF系统环境测试 1.3 测试编译器&#xff0…

Python文件加密库之cryptography使用详解

概要 在现代信息社会中,数据的安全性变得越来越重要。为了保护敏感信息,文件加密技术被广泛应用。Python的cryptography库提供了强大的加密功能,可以轻松实现文件加密和解密。本文将详细介绍如何使用cryptography库进行文件加密,包含具体的示例代码。 cryptography库简介 …