5分钟带你了解RabbitMQ的(普通/镜像)集群

rabbitmq · 浏览次数 : 24

小编点评

前言 随着互联网技术的飞速发展,分布式系统在各行各业的应用越来越广泛。RabbitMQ作为一种流行的消息队列软件,其集群配置在分布式系统中扮演着重要角色。本文将深入探讨RabbitMQ的集群配置,了解各种集群模式的利弊,并帮助您快速理解RabbitMQ集群的运作方式,以及选择最适合您需求的模式。 一、普通集群 普通集群是RabbitMQ中最常见的集群模式,它充分利用了Erlang语言天生具备的集群能力。在这个集群模式中,各个节点共享相同的元数据,例如队列结构,但消息不会冗余存储,而是只存在于某一个节点中。当消费者需要消费消息时,如果请求的节点并不存储所需的数据,RabbitMQ会在节点之间临时传输消息,将数据从存储节点传输到消费节点。 然而,这种集群模式存在一定的消息可靠性问题。当某个节点宕机时,该节点上的数据将无法被消费,必须等待节点恢复后才能继续处理。这可能导致消费者端无法正确应答已经消费的消息,在服务恢复后可能导致消息被重复消费。此外,如果消息未经持久化,重启后消息将会丢失。另外,这种集群模式不支持高可用性。当某个节点服务故障时,需要手动重启该服务才能确保该节点上的消息能够正常消费。 二、镜像集群 镜像集群是RabbitMQ官方提供的HA(高可用)方案,它在普通集群模式的基础上进行了增强。在搭建普通集群之后,需要进行额外的配置和部署。其本质区别在于,这种模式会在镜像节点之间主动进行消息同步,而不是在客户端拉取消息时临时同步。 在这种模式下,集群内部会通过算法选举产生主节点(master)和从节点(slave)。一旦主节点失效,集群将自动选举出新的主节点,确保整个集群的高可用性。 优缺点 首先来看下普通集群共享元数据:各节点间共享队列结构等元数据,但缺点也很明显消息仅存在于某一个节点消息在消费时会在节点间临时传输,增加了传输延迟和复杂性节点宕机时,该节点上的消息无法被消费,且可能导致重复消费,需要手动重启宕机节点以恢复消息消费再看下镜像模式:主动消息同步:在镜像节点之间主动进行消息同步,确保每个节点上都存有完整的消息数据。消息的可靠性大大提高,即使单个节点宕机,也不会导致消息丢失。但是集群内部的网络带宽会被主动同步大量占用,可能导致网络拥塞,影响整个集群的性能。通过选举机制,当主节点故障时,自动选出新的主节点,保证服务的连续性和可用性。 因此,并没有一种万能解决方案,最终还是要根据各业务需求来确定集群方案。例如,在金融交易系统或实时数据处理系统中,建议采用高可用的镜像模式。但如果带宽有限制且没有实时性要求,那么使用默认的普通集群可能更合适。 三、总结 通过本文我们深入了解了RabbitMQ的集群模式及其优缺点。无论是普通集群还是镜像集群,都有其适用的场景和局限性。普通集群利用Erlang语言的集群能力,但消息可靠性和高可用性方面存在一定挑战;而镜像集群通过主动消息同步提高了消息的可靠性和高可用性,但可能会占用大量网络带宽。因此,在选择集群方案时,需要综合考虑业务需求、系统性能和资源限制等因素。唯有根据实际情况来灵活选择最适合的方案,以确保系统的稳定性和可靠性。

正文

前言

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

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

普通集群

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

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

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

image

镜像集群

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

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

image

优缺点

首先看下普通集群

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

再看下镜像模式:

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

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

总结

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

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

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

与5分钟带你了解RabbitMQ的(普通/镜像)集群相似的内容:

5分钟带你了解RabbitMQ的(普通/镜像)集群

通过本文我们深入了解了RabbitMQ的集群模式及其优缺点。无论是普通集群还是镜像集群,都有其适用的场景和局限性。普通集群利用Erlang语言的集群能力,但消息可靠性和高可用性方面存在一定挑战;而镜像集群通过主动消息同步提高了消息的可靠性和高可用性,但可能会占用大量网络带宽。因此,在选择集群方案时,...

5分钟教你搭建邮件服务器的实用指南

今天我写了一篇实用的文章,重点是教你如何免费搭建一个邮件服务器,这个服务器不仅可以用于发送邮件,还可以供我的待办机器人使用。一开始我试图找一些免费的 API 接口来实现这个功能,但遗憾的是,并没有找到合适的。对于程序员来说,能自己动手实现绝对是最好的选择,幸运的是,我有一台空闲的服务器可以利用。如果...

毕业季 | 程序员初入职场必备软件开发神器,华为云Astro带你开启新篇章

摘要:5分钟写出应用,10分钟开发大屏,新手程序员必学技能之华为云Astro,快来get。 本文分享自华为云社区《毕业季 | 程序员初入职场必备软件开发神器,华为云Astro带你开启新篇章》,作者:华为云社区精选 。 这一届初入IT职场的毕业生有多难? 既要在“最难”就业季里过关斩将,又要面对生成式

5种GaussDB ETCD服务异常实例分析处理

摘要:一文带你细数几种ETCD服务异常实例状态。 本文分享自华为云社区《【实例状态】GaussDB ETCD服务异常》,作者:酷哥 。 首先确认是否是虚拟机、网络故障 虚拟机故障导致ETCD服务异常告警 问题现象 管控面上报etcd服务异常告警,虚拟机发生重启,热迁移、冷迁移,HA等动作。 问题分析

5步带你入门GaussDB(DWS)的GDS导入导出

摘要:本篇文档为使用GDS导入示例的具体简单步骤和示例。 本文分享自华为云社区《带你快速入门GDS导入导出,玩转PB级数仓GaussDB(DWS)》,作者: yd_220527686。 1、创建导入目标表 CREATE TABLE tpcds_reasons ( r_reason_sk intege

5大特性,带你认识化繁为简的华为云CodeArts Deploy

摘要:2月27日,华为云发布持续部署服务CodeArts Deploy,通过模块化自由编排部署流程,实现软件的自动化部署,帮助企业软件产品的快速、高效、高质量交付。 本文分享自华为云社区《化繁为简高效部署 华为云发布部署服务CodeArts Deploy》,作者:华为云头条。 随着互联网、数字化的发

带你彻底掌握Bean的生命周期

摘要:我们将深入研究Spring Framework的核心部分——Spring Bean的生命周期。 本文分享自华为云社区《Spring高手之路5——彻底掌握Bean的生命周期》,作者: 砖业洋__ 。 1. 理解Bean的生命周期 1.1 生命周期的各个阶段 在Spring IOC容器中,Bean

【.NET项目分享】免费开源的静态博客生成工具EasyBlog,5分钟拥有自己的博客

EasyBlog 说明 本博客系统通过构建工具生成纯静态的博客网站,借助GitHub Pages,你可以在5分钟内免费拥有个人博客。 它具有以下特点 生成纯静态网站,访问速度极快 使用markdown格式来编写博客内容 基于git代码管理来存储你的博客 使用CI工具来自动化部署你的博客站点 效果展示

一文搞懂5种内存溢出案例,内含完整源码

本文分享自华为云社区《10分钟搞懂各种内存溢出案例!!(含完整源码,建议收藏)》,作者:冰 河。 作为程序员,多多少少都会遇到一些内存溢出的场景,如果你还没遇到,说明你工作的年限可能比较短,或者你根本就是个假程序员!哈哈,开个玩笑。今天,我们就以Java代码的方式来列举几个典型的内存溢出案例,希望大

带团队后的日常思考(十五)

一、日常问题 1)CDN 异常 5 月中旬,发现图像异常的上报量比平时多了 10 多倍,日常 300 多,现在 4000 多。 但是看不到异常的错误码,不能确定是域名问题还是服务问题。还特地查看了错误分布的时间段,但并没有看出说明规律。 本来以为是证书的问题,因为正好那几天证书到期了,但是证书更新后