前言

让我们深入探讨RabbitMQ的集群配置,了解各种集群模式的利弊。本次讨论的重点是帮助您快速理解RabbitMQ集群的运作方式,以及选择最适合您需求的模式。好的,话不多说。在RabbitMQ中,即使只有一个节点,该节点的服务也会被作为一个集群来处理。这意味着单节点系统也遵循集群架构的规范,确保一致性和可扩展性。

而多节点的集群有两种方式:普通集群和镜像集群(也称主从集群)。

普通集群

这种模式充分利用了Erlang语言天生具备的集群能力。在这个集群模式中,各个节点共享相同的元数据,例如队列结构,但消息不会冗余存储,而是只存在于某一个节点中。当消费者需要消费消息时,如果请求的节点并不存储所需的数据,RabbitMQ会在节点之间临时传输消息,将数据从存储节点传输到消费节点。

显然,这种集群模式存在一定的消息可靠性问题。当某个节点宕机时,该节点上的数据将无法被消费,必须等待节点恢复后才能继续处理。这可能导致消费者端无法正确应答已经消费的消息,在服务恢复后可能导致消息被重复消费。此外,如果消息未经持久化,重启后消息将会丢失。

另外,这种集群模式不支持高可用性。当某个节点服务故障时,需要手动重启该服务才能确保该节点上的消息能够正常消费。因此,这种模式只适合一些对消息安全性要求不高的场景。在使用这种模式时,消费者应尽量连接到每一个节点,以减少消息在集群中的传输。

镜像集群

这种模式是RabbitMQ官方HA(高可用)方案,在普通集群模式的基础上进行了增强。在搭建普通集群之后,需要进行额外的配置和部署。其本质区别在于,这种模式会在镜像节点之间主动进行消息同步,而不是在客户端拉取消息时临时同步。

在这种模式下,集群内部会通过算法选举产生主节点(master)和从节点(slave)。一旦主节点失效,集群将自动选举出新的主节点,确保整个集群的高可用性。

优缺点

首先看下普通集群

  • 共享元数据:各节点间共享队列结构等元数据,但缺点也很明显消息仅存在于某一个节点
  • 消息在消费时会在节点间临时传输,增加了传输延迟和复杂性
  • 节点宕机时,该节点上的消息无法被消费,且可能导致重复消费,需要手动重启宕机节点以恢复消息消费

再看下镜像模式:

  • 主动消息同步:在镜像节点之间主动进行消息同步,确保每个节点上都存有完整的消息数据。消息的可靠性大大提高,即使单个节点宕机,也不会导致消息丢失。但是集群内部的网络带宽会被主动同步大量占用,可能导致网络拥塞,影响整个集群的性能。
  • 通过选举机制,当主节点故障时,自动选出新的主节点,保证服务的连续性和可用性。

因此,并没有一种万能解决方案,最终还是要根据各业务需求来确定集群方案。例如,在金融交易系统或实时数据处理系统中,建议采用高可用的镜像模式。但如果带宽有限制且没有实时性要求,那么使用默认的普通集群可能更合适。

总结

通过本文我们深入了解了RabbitMQ的集群模式及其优缺点。无论是普通集群还是镜像集群,都有其适用的场景和局限性。

普通集群利用Erlang语言的集群能力,但消息可靠性和高可用性方面存在一定挑战;而镜像集群通过主动消息同步提高了消息的可靠性和高可用性,但可能会占用大量网络带宽。

因此,在选择集群方案时,需要综合考虑业务需求、系统性能和资源限制等因素。唯有根据实际情况来灵活选择最适合的方案,以确保系统的稳定性和可靠性。

5分钟带你了解RabbitMQ的(普通/镜像)集群的更多相关文章

  1. RabbitMQ (十五) 镜像集群 + HAProxy1.7.8 负载均衡

    RabbitMQ 默认的集群模式,也就是普通模式,最大的问题就在于存储队列完整数据的节点一旦宕机, 如果是非持久化队列,则消息丢失;如果是持久化队列+持久化消息,则必须等该节点恢复. 所以后来 Rab ...

  2. RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列

    系列文章: RabbitMQ从零到集群高可用(.NetCore5.0) - RabbitMQ简介和六种工作模式详解 RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列 ...

  3. 用Docker搭建RabbitMq的普通集群和镜像集群

    普通集群:多个节点组成的普通集群,消息随机发送到其中一个节点的队列上,其他节点仅保留元数据,各个节点仅有相同的元数据,即队列结构.消费者消费消息时,会从各个节点拉取消息,如果保存消息的节点故障,则无法 ...

  4. 搭建 RabbitMQ Server 高可用集群

    阅读目录: 准备工作 搭建 RabbitMQ Server 单机版 RabbitMQ Server 高可用集群相关概念 搭建 RabbitMQ Server 高可用集群 搭建 HAProxy 负载均衡 ...

  5. 搭建 RabbitMQ Server 高可用集群【转】

    阅读目录: 准备工作 搭建 RabbitMQ Server 单机版 RabbitMQ Server 高可用集群相关概念 搭建 RabbitMQ Server 高可用集群 搭建 HAProxy 负载均衡 ...

  6. (转)CentOs7.3 搭建 RabbitMQ 3.6 Cluster 集群服务与使用

    RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python.Ruby..NET.Java.JMS.C.PHP.ActionScript.XMPP.STO ...

  7. Just 5分钟!使用k3s部署轻量Kubernetes集群快速教程

    大小仅有40MB的k3s为想要节省开销进行开发和测试的企业提供了一个很好的选择.本文将用一种极为简洁的方式,教你在5分钟之内使用k3s部署轻量Kubernetes集群. Kubernetes已经改变了 ...

  8. RabbitMQ 的高可用集群

    RabbitMQ 的高可用性 RabbitMQ 是比较有代表性的,因为是基于主从(非分布式)做高可用的 RabbitMQ 有三种模式:单机模式.普通集群模式.镜像集群模式. 单机模式 单机模式,生产几 ...

  9. 带你自行搭建虚拟机和Redis集群环境,值得收藏!

    前言: 我们看到分析 Redis 使用或原理的文章不少,但是完整搭建一套独立的 redis 集群环境的介绍,并不是很多或者说还不够详细. 那么,本文会手把手带着大家搭建一套 Redis 集群环境,Re ...

  10. RabbitMQ入门教程(十五):普通集群和镜像集群

    原文:RabbitMQ入门教程(十五):普通集群和镜像集群 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.c ...

随机推荐

  1. 为什么Spring仍然会是云原生时代最佳平台之一?

    简介: 基于Java语言的Spring生态,还能否适应新的开发方式,比如Cloud Native.Serverless.Faas等,它还会是云原生时代的最佳平台的选择吗?本文将从5个角度来为你分析一下 ...

  2. 唯品会:在 Flink 容器化与平台化上的建设实践

    简介: 唯品会 Flink 的容器化实践应用,Flink SQL 平台化建设,以及在实时数仓和实验平台上的应用案例. 转自dbaplus社群公众号作者:王康,唯品会数据平台高级开发工程师 自 2017 ...

  3. Cloudera CDP 企业数据云测试开通指导

    ​简介:基于阿里云部署的 Cloudera CDP 企业数据云平台已经进入公测阶段,本文详细介绍了相关试用/试用流程. 基于阿里云部署的 Cloudera CDP 企业数据云平台已经进入公测阶段,如对 ...

  4. LlamaIndex 常见问题解答(FAQ)

    提示:如果您尚未完成,请安装 LlamaIndex 并完成起步教程.遇到不熟悉的术语时,请参考高层次概念部分. 在这个章节中,我们将从您为起步示例编写的代码开始,展示您可能希望针对不同应用场景对其进行 ...

  5. 001_Cadence软件的安装与介绍

    001_Cadence软件的安装与介绍 软件版本16.6,软件下载:搜索PCB联盟; 安装步骤: 1)   把5个分卷的压缩包解压到同一文件夹; 2)   双击Setup.exe开始安装,先安装Lic ...

  6. C语言程序设计-笔记7-指针

    C语言程序设计-笔记7-指针 例8-1  利用指针模拟密码开锁游戏. #include<stdio.h> int main(void) { int x=5342;          //变 ...

  7. 一文搞懂drag&drop浏览器拖放功能的实现

    拖放功能,即将一个元素从一个区域,通过拖拽,放置到另一个区域.常见的应用是将文件或图片从一个区域,拖放到另一个区域.中文常常把这表述成拖拽,实际上拖拽的描述并不准确,应该叫拖放,因为drag事件和dr ...

  8. createRange表示文档中的一个范围——用于js判断文字添加省略号情况

    document.createRange() 是 JavaScript 中的一个方法,用于创建一个 Range 对象,表示文档中的一个范围.Range 对象通常用于选择文档中的一部分内容,然后对其进行 ...

  9. java启动参考

    启动参数 mvn clean package -Dmaven.test.skip=true -Ptest - java - -server - -Xms2G - -Xmx2G - -Xss256K - ...

  10. docker之docker-compose

    docker-compose就是个二进制的工具,它可以单机编排,批量管理多个容器 [root@mcwk8s01 harbor]# file /usr/local/bin/docker-compose ...