RabbitMQ中的集群架构介绍

news2024/11/23 8:49:39

文章目录

  • 前言
  • 一、普通集群(副本集群)
    • 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.coloradmin.cn/o/53851.html

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

相关文章

美中嘉和在港交所招股书失效:去年亏损约5亿元,杨建宇为实控人

12月1日,贝多财经从港交所披露易了解到,美中嘉和医学技术发展集团股份有限公司(下称“美中嘉和”)的上市申请材料失效,目前已无法正常查看或下载。据贝多财经了解,美中嘉和于2022年5月31日在港交所递表。 公…

C++STL——vector类与模拟实现

vector类vector常用接口介绍初始化reserve与resizeassign缩容接口算法库中的findvector的底层小部分框架模拟实现vectot模拟vector的整体代码迭代器失效问题深层深浅拷贝问题vector vector是表示可变大小数组的序列容器,就像数组一样,采用连续存储空间来存储元素&a…

Three.js初识:渲染立方体、3d字体、修改渲染背景颜色

用场景对three.js进行渲染:场景、相机、渲染器 const scene new THREE.Scene(); const camera new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );const renderer new THREE.WebGLRenderer(); renderer.setSize( window.i…

[附源码]Python计算机毕业设计Django基于web的建设科技项目申报管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

【内网安全】——Linux信息收集

作者名:Demo不是emo 主页面链接:主页传送门 创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷座…

ContentResolver.query流程分析

文章目录1.Context.getContentResolver()2.ContentResolver.query()3.ContentProviderProxy.query()4.Transport.query()总结增删改查ContentProvider时,通过Binder实现ContentProvider在App进程启动时进行实例化,具体时机是在Application.onCreate()执行…

项目构建生命周期与插件

项目构建生命周期描述的是一次构建过程经历了多少个事件。 maven对项目构建的生命周期划分为3套: clean:清理工作。 default:核心工作,例如编译、测试、打包、部署等。 site:产生报告,发布站点等。 clean生…

工具-Obsidian生产力工具,安装第三方插件(GitHub)教程,以安装Syntax Highlight(代码高亮)为例

文章目录1、去GitHub上找到你需要的插件2、下载到本地3、在obsidian中新建文件4、将下载好的GitHub文件放置文件夹5、obsidian中设置6、插入代码块实例1、去GitHub上找到你需要的插件 在GitHub的搜索框中,直接搜索obsidian 插件名,obsidianSyntax Highl…

Halcon 图片分割 米粒分水岭(高斯滤波,区域距离计算,分水岭处理)

资源: 链接:https://pan.baidu.com/s/1kmxdMk67E-7QCsG5mKnc7A 提取码:555s 图片 代码 * 1.读取并显示图片 ************************************* dev_close_window () read_image (Image, ./img.png) get_image_size (Image, Width, He…

JVM垃圾回收

JVM 快速开始: 请谈谈你对JVM 的理解?java8 的虚拟机有什么更新? 什么是OOM ?什么是StackOverflowError?有哪些方法分析? JVM 的常用参数调优你知道哪些? 内存快照抓取和MAT分析DUMP文件知道…

Android databinding的接入使用与详解(一)

一、介绍 DataBinding 是Google Android组件框架,管理view和data之间进行绑定。DataBinding主要管理数个布局文件,这样我们就不用去实例化layout的view。直接通过DataBindingUitl来完成初始化。 这样可以精简代码,也减少工作量,避…

2022双十二有哪些值得入手的数码好物?值得入手的数码好物推荐

双十二快到了,不少人都会选择在这个时候入手数码产品,但又不知道有哪些值得入手。下面,我来给大家推荐几款实用性高,入手性强的数码好物,感兴趣的一起来看看吧。 一、南卡小音舱蓝牙耳机 推荐理由:蓝牙5.…

带你初识JSP(JAVA服务器页面)

文章目录前言第一个 JSP 程序什么是Java Server Pages?为什么使用JSP?JSP的优势配置Java开发工具(JDK)设置Web服务器:Tomcat设置 CLASSPATH 环境变量JSP 结构JSP 处理JSP 生命周期JSP编译JSP初始化JSP执行JSP清理前言 JSP 与 PH…

ABAP CLEAR REFRESH FREE 说明(刘欣)

本文仔细测试总结了ABAP中的clear、refresh、free,因为很多时候程序的BUG就是出现在变量没有清理干净,希望整理一个定式出来以后少出BUG。 用clear、refresh、free对带表头的表执行的测试结果如下表: 看起来,最好的避免这些清空命…

Oracle11g安装

参考教程 Oracle11g安装配置详细教程 oracle11g安装步骤详细图文教程 但是这里的用户名如果是以system的话,密码错误 Oracle默认账号密码: (1)普通用户: SCOTT (密码:tiger) &…

Day17--购物车页面-商品列表-封装NumberBox

提纲挈领: 官方文档提供了uni-number-box组件 文档内容: 我的操作: 1》修改 my-goods.vue 组件的源代码,在类名为 goods-info-box 的 view 组件内部渲染 NumberBox 组件的基本结构: 2》美化其样式 *****************…

基于最小均方误差linear minimum mean square error(LMMSE)插值算法的图像超分辨重构研究-附Matlab代码

⭕⭕ 目 录 ⭕⭕✳️ 一、引言✳️ 二、图像复原基本原理✳️ 三、基于多通道LMMSE图像复原法✳️ 3.1 最小均方误差LMMSE插值理论✳️ 3.2 理论公式对应的Matlab关键代码✳️ 四、实验验证✳️ 五、参考文献✳️ 六、Matlab程序获取与验证✳️ 一、引言 图像是一种表达信息的…

进程与线程的相爱相杀

✨✨hello,愿意点进来的小伙伴们,你们好呐! 🐻🐻系列专栏:【JavaEE初阶】 🐲🐲本篇内容:详解进程与线程 🐯🐯作者简介:一名现大二的三非编程小白&…

Linux文件系统

Linux文件系统 文章目录Linux文件系统1.对文件系统的理解1.1 文件系统当中的缓冲区1.2 文件系统当中的inode1.3 文件属性与文件数据分开存放原理2.对软硬链接的理解扩展:对文件三时间的理解1.对文件系统的理解 1.1 文件系统当中的缓冲区 我们来看看下面这段代码&a…

基于K8s构建Jenkins持续集成平台(部署流程)(转了一点)

转载至:https://blog.csdn.net/m0_59430185/article/details/123394853 一、传统Jenkins的Master-Slave方案的缺陷 Master节点发生单点故障时,整个流程都不可用了 每个 Slave节点的配置环境不一样,来完成不同语言的编译打包等操作&#xff0…