RabbitMQ集群模式之Mirror模式與Federation模式介紹
1. 前言
Hello,大家好。本小節(jié)會為大家介紹 RabbitMQ 中的最后兩種集群模式,分別是 Mirror 模式和 Federation 模式。
本小節(jié)會對 RabbitMQ 中的 Mirror 集群模式和 Federation 集群模式的基礎概念做詳細的介紹,并且會對這兩種模式的基本使用流程做一個簡要的概述,本小節(jié)不會對這兩種集群模式進行代碼層面的實操講解,同學們注意。
本節(jié)主要內(nèi)容:
-
Mirror 集群模式與 Federation 集群模式概述
-
Mirror 集群模式與 Federation 集群模式使用流程概述
2. Mirror 集群模式與 Federation 集群模式概述
Mirror 集群模式:
Mirror 集群模式,其中文含義為鏡像集群模式。主要就是通過鏡像的概念來實現(xiàn)集群的搭建。
鏡像這一概念,相信大家都不陌生,所以在本節(jié)中不做介紹,我們直接來看什么是 RabbitMQ 的鏡像集群模式。
鏡像集群模式的核心就是其中的 Mirror 鏡像隊列, Mirror 鏡像隊列和其他普通的消息隊列一樣,只不過在不同的場景中所叫的名稱不同罷了。每一個鏡像隊列中存儲消息的方式也和普通隊列相同,都需要生產(chǎn)者將消息推送到隊列中,從而供消費者獲取并消費消息。
正式由于 Mirror 鏡像隊列的存在,才使得在 RabbitMQ 集群環(huán)境下,數(shù)據(jù)可以達到 100% 的投遞可靠性,因此,Mirror 鏡像集群模式也成為了 RabbitMQ 眾多集群模式中的經(jīng)典集群模式,在互聯(lián)網(wǎng)大廠,以及其他一線互聯(lián)網(wǎng)公司中,Mirror 鏡像集群模式一直都被推崇,成為了搭建 RabbitMQ 集群的首選方案。 Mirror 鏡像集群模式的架構如下圖所示:

從上圖中我們可以看到,我們的應用程序或者是消息的生產(chǎn)者,需要請求我們的 RabbitMQ Server 時,請求首先會被發(fā)送到一個虛擬主機上,這個虛擬主機是實現(xiàn) Mirror 鏡像集群模式所必須的組件或者說是工具,該虛擬主機可以通過當下主流的 KeepAlived ,以及 HaProxy 組件來實現(xiàn)。
在通過 KeepAlived 和 HaProxy 組件配置好我們所需的虛擬主機,即 Virtual Host 之后,虛擬主機會根據(jù)我們的請求所在的 ip 地址,來將請求分發(fā)到不同的 RabbitMQ Server 中,接著,RabbitMQ Server 就會根據(jù)我們請求的具體內(nèi)容,來使用其中相應的鏡像隊列,最后,消費者再從這些鏡像隊列中獲取并消費消息。
Tips:
1. 可以看到,在上述的架構圖中,我們的 RabbitMQ Server 有 3 個節(jié)點,這個節(jié)點的數(shù)量不是隨便憑空指定的,如果我們想確保消息在鏡像模式的集群中需要做到 100% 投遞,那么我們鏡像模式中的 RabbitMQ Server 節(jié)點的數(shù)量最少應該部署 3 個;
2. KeepAlived 和 HaProxy 組件我們會在后續(xù)的小節(jié)中進行詳細的介紹,本小節(jié)同學們只需要知道我們會用到這些工具組件即可。
Federation 集群模式:
Federation 模式,在 RabbitMQ 中,被稱為多活的集群模式。Federation 這一單詞本身的意思是表示一種聯(lián)盟、結盟的含義,本義其實并沒有多活的意思,多活則是根據(jù)這一集群模式的特點轉義而來的。
為什么稱 Federation 模式為多活的集群模式呢?其實,我們可以將 Federation 模式理解為是上一小節(jié)中 Shovel 遠程模式的進化版本。
通過學習上一小節(jié)內(nèi)容,我們可以知道,Shovel 遠程模式其實就是將 RabbitMQ Server 根據(jù)不同的地域,部署到了不同的地域位置,從而實現(xiàn)對 RabbitMQ Server 的遠程調(diào)用,但是,這種遠程調(diào)用方式配置起來過于繁瑣,會花費很長的時間,這有點得不償失。
所以,RabbitMQ 官方考慮到了這一弊端,才會有今天的 Federation 多活集群模式,我們先來看一下這個 Federation 多活集群模式的架構圖:

從上圖中我們可以看到,我們根據(jù)不同的地里位置,分別聲明了三個節(jié)點區(qū)域,并且在不同的區(qū)域節(jié)點中,我們分別部署了兩臺 RabbitMQ Server 節(jié)點,在不同的地域節(jié)點之間,我們通過 Federation 插件進行連接,實現(xiàn)不同地域節(jié)點間的通信。
當我們的應用程序,或者生產(chǎn)者需要使用我們的 RabbitMQ Server 時,就會向我們的 RabbitMQ Server 發(fā)送請求,由圖可知,該請求會被我們所配置的負載均衡策略所截獲,同時,負載均衡策略會根據(jù)請求的內(nèi)容,來將請求分發(fā)到相應的地域節(jié)點中的 RabbitMQ Server 中。
Federation 多活集群模式與 Shovel 遠程調(diào)用集群模式最大的不同之處在于,Shovel 遠程調(diào)用集群模式需要指定主區(qū)域,即可以理解為主節(jié)點,但是 Federation 多活集群模式不需要指定,它的每一個節(jié)點都相當于是主節(jié)點,每一個節(jié)點都是活躍的, 請求只會根據(jù)不同的負載均衡策略來分發(fā)到不同的地域節(jié)點上而已。
正式由于 Federation 多活集群模式的這一特點,才廣泛被人們稱之為是多活的集群模式。
Tips:
1. Federation 多活集群模式需要我們首先對 Federation 插件有所了解,因為在不同的地域節(jié)點之間,我們需要使用 Federation 插件進行連接和通信,這個插件我們會在后續(xù)的實操小節(jié)進行介紹;
2. Federation 多活集群模式支持我們配置較遠距離的 RabbitMQ Server 節(jié)點,這對我們的業(yè)務拓展來說提供了一定的便利性,如果我們的業(yè)務是在較遠的異地,則可以考慮使用該集群模式來搭建我們的 RabbitMQ Server 集群。
3. Mirror 集群模式與 Federation 集群模式使用流程概述
Mirror 集群模式使用流程概述
要想搭建 Mirror 集群模式,需要我們首先了解兩個工具組件,他們分別是 KeepAlived 和 HaProxy 組件,這兩個組件分別發(fā)揮著不同的作用,在搭建 Mirror 集群模式時,我們首先要將 KeepAlived 和 HaProxy 組件搭建好,形成一組虛擬的網(wǎng)絡,之后才可以將我們的 RabbitMQ Server 節(jié)點與之相連接,才可完成 Mirror 集群的搭建。
Federation 集群模式使用流程概述
由于 Federation 集群模式是一種多活的集群模式,所以我們也需要用到我們的 KeepAlived 和 HaProxy 組件,只不過這次所使用的組件搭建方式,與 Mirror 鏡像模式的搭建有所不同,所發(fā)揮的作用也不相同,但是都需要先將這兩個組件搭建好后,方可接入我們的 RabbitMQ Server 節(jié)點。
Tips: 本小節(jié)只是對 RabbitMQ 中的 Mirror 集群模式和 Federation 集群模式的使用流程或搭建方式做一個簡單的介紹,并不會詳細介紹集群模式搭建的流程和步驟,我們會在后續(xù)小節(jié)中專門介紹不同集群模式的詳細搭建流程和步驟,以及 KeepAlived 和 HaProxy 組件的使用方法,讓我們一起期待吧。
4. 小結

本小節(jié)介紹了 RabbitMQ 中最后兩種集群模式,即 Mirror 鏡像集群模式,以及 Federation 多活集群模式,對于這兩種集群模式的概念和地位,我們通過集群架構圖的方式進行了詳細介紹,并簡要介紹了這兩種集群模式的使用流程。