RabbitMQ中的集群架构介绍

news/2025/2/22 3:41:17/

文章目录

  • 前言
  • 一、普通集群(副本集群)
    • 1.架构图
  • 二、镜像集群
    • 1.架构图


前言

在之前我们是以单节点的形式来运行mq。在真正的生产实践中,mq主要用来完成两个应用系统间的通信,如果在某一时刻mq宕机了,会导致系统瘫痪,就是无法进行通信。

所谓集群架构,就是由多个mq服务节点共同去对消息传递进行服务。如果其中某一个节点宕机的话,不影响整个系统的正常使用。

RabbitMQ提供了两种集群:

  1. 普通集群(副本集群)
  2. 镜像集群

提示:以下是本篇文章正文内容,下面案例可供参考

一、普通集群(副本集群)

All data/state required for the operation of a RabbitMQ broker is replicated across all nodes. An exception to this are message queues, which by default reside on one node, though they are visible and reachable from all nodes. To replicate queues across nodes in a cluster --摘自官网

默认情况下:RabbitMQ代理操作所需的所有数据/状态都将跨所有节点复制。这方面的一个例外是消息队列,默认情况下,消息队列位于一个节点上,尽管它们可以从所有节点看到和访问

1.架构图

队列才是真正我们存消息的

在rabbitmq集群中,有三个节点,如下图,一个蓝色的,两个橙色的,这三个节点构成了一个集群,在普通集群中,会有一个主节点master节点主节点和两个slave节点从节点,日后,主节点上的所有数据,exchang包括所有的虚拟主机啊用户啊都可以复制到slave节点上,但是有个意外,就是主节点的队列是无法同步到slave节点上的。也就是说默认情况下,消息队列位于一个节点上,指的节点就是master节点。
一旦搭建这个集群之后,虽然我们可以从slave节点上看到相应的master节点创建的队列以及数据,但是实际上这个队列仅仅在master中存储。所以在slave节点上是能看到队列,但是对队列的操作是有限制的。所以这个集群也管他叫主从复制集群,主从模式,准确点来讲,可以叫主备模式。
所谓主备模式,主节点是用来真正和生产者打交道的,而slave节点仅仅是用来同步主节点的相应数据,同步除队列之外其他数据。当从某一时刻,主节点宕机掉后,slave也无法自动去切换成master节点。因为只有一个节点存储队列信息。那从节点仅仅只是起到了备份的作用,只有在某一时刻,master节点恢复之后,从slave节点拿取把它的原始数据恢复。
其实主备架构最大的优点,解决了在某一时刻,master节点宕机时,出现消息队列丢失的问题

核心解决问题: 当集群中某一时刻master节点宕机,可以对Queue中信息,进行备份

说白了,就是贮备,就是slave勤勤俭俭的备份,没有办法在故障时,出现一个自动故障转移,这是不行的。

这里有点需要大家注意的是:
由于slave它起到了一个master的备份,但备份的仅仅是交换机,但当然slave可以看到队列,所以消费者可以直接去对接master,同时也可以对接slave(尽管它们可以从所有节点看到和访问)

消费者绑定队列,队列只在master,为啥slave可以对接消费者?
所有队列的原数据slave都会有一份,但这队列的真实里面消息在master。
如果消费者监听的是两个slave,怎么可以拿到消息呢,是因为如果消费者绑定了slave,消费者去订阅消息队列时,它这个slave会去跟master去调,然后由master发给slave,再给消费者这样的一个过程。

在这里插入图片描述

RabbitMQ的主备架构,跟之前接触的主备架构不一样,主备架构中,主节点用来提供对外工作,从节点不做任何操作,仅仅用来同步数据。
RabbitMQ的主备架构的主节点也是对外工作,但它的从节点说同步数据还不太准确,因为它不能同步队列里的相关信息,它可以在一定程度上可以减少消费者对主节点的压力,消费者可以订阅从节点,也可以订阅主节点。但是没有办法做到跟之前主备架构一样,所以可以管它这个模式叫副本。但实际开发中,基本来讲,很少用这个模式,基本上用的是高可用的模式,指的就是镜像模式。

为什么不咋用,还讲副本集群,直接讲镜像集群?
因为镜像集群是基于副本集群的基础之上,所以需要学习。

二、镜像集群

This guide covers mirroring (queue contents replication) of classic queues --摘自官网
By default, contents of a queue within a RabbitMQ cluster are located on a single node (the node on which the queue was declared). This is in contrast to exchanges and bindings, which can always be considered to be on all nodes. Queues can optionally be made mirrored across multiple nodes. --摘自官网

镜像队列机制就是将队列在三个节点之间设置主从关系,消息会在三个节点之间进行自动同步,且如果其中一个节点不可用,并不会导致消息丢失或服务不可用的情况,提升MQ集群的整体高可用性。

所谓镜像集群,可以真正做到保证消息百分之百不丢失,同时它还可以做到主节点在一某时刻失败它会自动的去做转换,自动的去做故障转移,保证系统的高可用。

在镜像集群里面,它引入了镜像的概念,就是日后它可以通过镜像去同步镜像里面包含的队列的数据,通过这种方式,就能保证master宕机时,由于我通过镜像的同步,slave也有queue信息,所以可以进行失败自动切换

1.架构图

在这里插入图片描述


http://www.ppmy.cn/news/825.html

相关文章

操作系统02_进程管理_同步互斥信号量_PV操作_死锁---软考高级系统架构师007

存储管理可以分为固定存储管理和分页存储管理。 现在固定存储管理已经不用也不考,但要知道因为固定存储管理指的是整存整取 也就是把一整个程序,比如说10G的游戏全部都存到内存里 这样的话是非常占用内存的,这个固定存储管理现在已经不用了。 然后这里我们主要看分页存储管: …

全国职业院校技能大赛 - ruijie网络模块 - 样卷三解析

目录 一.说明 二.项目背景 三.项目规划和设计 四.网络项目实施

基于51单片机农业大棚温控系统

资料编号:197 大棚种植温控系统概述: 本文介绍的是一个由单片机构成的温度控制系统,主要用来提供测温的解决方案,同时还能实时监控温度变化趋势,以及报警功能。它利用STC89C52RC单片机,DS18B20&#xff0c…

掌握docker这几招,你也能搞云计算了

Docker的好处 容器技术出现十多年了,已经在测试和生产环境得到普遍应用。几个好处: 便携性、隔离性封装性,可复用方便做集群部署和资源调度 … 所谓云计算,就是所有计算、服务、产品都云化,部署在云上,你…

01-go基础-06-切片(声明切片、初始化切片、切片赋值、切片长度、切片容量、空切片、append、copy)

文章目录1. 声明切片2. 初始化切片2.1 切片长度2.1.1 初始化指定长度的切片2.1.2 查看切片长度 len()2.2 切片容量2.2.1 初始化指定容量的切片2.2.2 查看切片长度 len()3 切片赋值3.1 直接赋值3.2 引用数组给切片赋值3.3 引用数组某区间给切片赋值3.3.1 从数组位置N个取到第M个…

【目标检测】Faster R-CNN论文代码复现过程解读(含源代码)

目录:Faster R-CNN论文代码复现过程解读Faster R-CNN代码使用说明书(分享在github上)一、代码的地址二、我的配置环境三、参数值文件下载四、VOC数据集下载五、模型训练步骤(1)训练VOC0712数据集1.数据集的准备2.数据集…

Android 11.0 设置默认8时区和默认24小时制

目录 1.概述 2.设置默认8时区和默认24小时制的核心类 3.设置默认8时区和默认24小时制的核

【日期时间的计算NSDate Objective-C语言】

一、计算时间 1.比如,什么时候用这个计算时间呢 NSDate *date = [NSDate new]; NSLog(@“%@”,date); 我们知道,这个时候,它打印的时间是什么时间,是不是当前的时间啊, 我想得到,在当前系统时间之后5000秒以后的时间 5000秒以后,在当前时间的基础之上, 这时候,…