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 遠程模式,對于這兩種集群模式的概念,我們通過集群架構圖的方式進行了詳細介紹,并簡要介紹了這兩種集群模式的使用流程。