全部开发者教程

RabbitMQ 入门教程

RabbitMQ 简介
RabbitMQ 简介

RabbitMQ集群模式之Warren模式与Shovel模式介绍

1. 前言

Hello,大家好。从本小节开始呢,会陆续为各位同学介绍 RabbitMQ 中所提供的集群模式,以及一些必要的实操内容。这些集群模式并不是第三方所提供的,而是 RabbitMQ 本身自带的。RabbitMQ 官方充分考虑到了 RabbitMQ 在实际项目中的应用场景,包括基础场景和集群场景。

本小节会介绍 RabbitMQ 中最基础的两个集群模式,分别是 Warren 集群模式和 Shovel 集群模式,本小节不会对这两种集群模式进行代码实操,只是基础概念的介绍和基础使用流程的介绍。

本节主要内容:

  • Warren 集群模式与 Shovel 集群模式概述

  • Warren 集群模式与 Shovel 集群模式使用流程概述

2. Warren 集群模式与 Shovel 集群模式概述

Warren 集群模式:

Warren 集群模式,其中文含义为主备集群模式。那么什么是主备呢?

我们先来看一下主备的基础概念,主备这一名词的诞生并不是在我们所熟知的计算机领域,而是首先出现在我们的日常生活中,对一个具体问题提供了一个或多个解决方案。

对于要解决的一个具体问题而言,主备名词中的主,表示解决这一问题的首选方案,也可以理解为主要方案,即我要解决这个问题,我应该首先就使用这一首选方案;而主备名词中的备,则表示解决这一问题的备选方案,也可以理解为辅助方案,即当这一问题无法使用首选方案来解决时所采取的一种或多种辅助方案。

随着我们计算机领域不断地发展,以及逐渐增长的项目复杂度,主备这一名词逐渐渗透到我们的计算机领域中。在计算机领域中,主备往往表示的仅是集群的一种实现方式,或者架构模式,并不是 RabbitMQ 所特有的专业名词, 那么主备模式在 RabbitMQ 中到底是什么含义呢?

主备模式,在 RabbitMQ 中被称为 Warren 模式,即当我们需要部署 RabbitMQ 集群时,我们需要指定一个主 RabbitMQ Server 节点,然后指定两个或两个以上的从 RabbitMQ Server 节点,并且在主节点和从节点之间,通过一定的技术手段来实现主从节点间的通信,这一过程就是 RabbitMQ 中的 Warren 主备模式,其主备模式架构如下图所示:

从上图中我们可以看到,当消费者来消费 RabbitMQ 中的消息时,由于我们设置了主备集群模式,所以消费者会首先从主节点中获取消息并消费,如果主节点由于其他原因而挂掉了,或者主节点的服务器本身宕机了,那么消费者会继续从 RabbitMQ 从节点-1,RabbitMQ 从节点-2 去获取消息并消费,以此类推。

这就实现了一种,当主节点由于种种原因不能正常提供服务时,从节点还能继续提供服务的场景。

Tips:
1. 主备模式中所有的 RabbitMQ Server 节点均分布在不同的服务器上,但是所有节点间的数据存储却是共享的,这也就是为什么从节点还能继续提供服务的原因;
2. 主备模式是 RabbitMQ 官方提供的最基础的一种集群模式,但是确不是实际项目中经常使用的一种集群模式,同学们只需要对主备模式的概念有一个了解即可。

Shovel 集群模式:

Shovel 模式,其中文含义为远程模式,是 RabbitMQ 官方提供的第二种集群实现模式。

Shovel 远程模式的概念类似于上述的 Warren 主备模式,只不过他们的集群策略是不同的。Shovel 远程模式的实现,也是需要部署多个 RabbitMQ Server 节点,并且在不同的 RabbitMQ Server 节点中建立节点间的通信机制,以达到使用多个 RabbitMQ Server 节点的目的。

而无论是 Shovel 远程模式,还是 Warren 主备模式,都需要消费者通过远程的方式来调用相应的节点,来获取并消费消息,只不过 Shovel 模式在远程调用时多添加了一种集群策略。

Shovel 远程模式节点的部署不同于 Warren 主备模式,在部署 Shovel 远程模式时,通常需要我们根据地域环境来抉择所需要部署的节点所在位置,并考虑多个远程模式节点之间的通信成本,成本越小当然也就是最好的了,而 Warren 主备模式则不需要考虑地域这一因素,Shovel 远程模式的架构如下图所示:

从上图中我们可以看到,我们根据不同的地里位置,分别声明了三个节点,分别是北京节点、唐山节点,以及保定节点,这三个区域的地里位置挨得很近,很适合部署 Shovel 远程集群模式。

在我们的生产者将消息推送到 RabbitMQ Server 节点,也就是上图中的北京节点时,如果位于北京节点的 RabbitMQ Server 服务器的压力正常,则消息会被推送到 RabbitMQ 北京节点;如果 RabbitMQ 北京节点的服务器压力过大,或该节点中的 RabbitMQ 消息队列已满,则消息会被推送到与之相连的唐山节点,以此类推,直到保定节点。

在 RabbitMQ 中,上图中的 RabbitMQ 北京节点被称为远程主节点,而 RabbitMQ 唐山节点和 RabbitMQ 保定节点则被称为远程备用节点,这一点和主备模式的概念相似。

Tips:
1. 远程模式虽然提供了对不同节点的 RabbitMQ Server 压力检测的功能,但是其配置起来过于繁琐,所以在实际工作中使用的也不是很多;
2. 配置 Shovel 模式一定要考虑节点间不同的位置,如果节点之间的距离太远,则会造成节点间通信的延迟,这点同学们注意。

3. Warren 集群模式与 Shovel 集群模式使用流程概述

Warren 集群模式使用流程概述

要想搭建 Warren 集群模式,需要我们首先了解一些 Warren 集群模式的配置文件,并且通过使用一个组件 HaProxy 来完成 Warren 集群模式的搭建(HaProxy 组件会在后面进行介绍)。

Shovel 集群模式使用流程概述

RabbitMQ 官方针对 Shovel 集群模式,为我们提供了丰富的集群配置属性和集群配置文件,我们需要自定义我们自己的 Shovel 集群配置文件,并且将这一文件部署到 RabbitMQ 节点上,这样才能使用 Shovel 集群模式。

Tips: 本小节只是对 RabbitMQ 中的 Warren 集群模式和 Shovel 集群模式的使用流程或搭建方式做一个简单的介绍,并不会详细介绍集群模式搭建的流程和步骤,我们会在后续小节中专门介绍不同集群模式的详细搭建流程和步骤,让我们一起期待吧。

4. 小结

本小节作为介绍 RabbitMQ 集群模式的开篇,首先介绍了 RabbitMQ 中最简单的两种集群模式,分别是 Warren 主备模式和 Shovel 远程模式,对于这两种集群模式的概念,我们通过集群架构图的方式进行了详细介绍,并简要介绍了这两种集群模式的使用流程。