RabbitMQ叢集搭建

Christy001發表於2020-12-18

RabbitMQ叢集搭建

準備工作

開始本課程之前,先按文章

環境搭建篇–04、虛擬機器的克隆與配置

克隆三個虛擬機器,修改主機名依次為:RabbitMQ01、RabbitMQ02、RabbitMQ03;修改ip地址依次為192.168.10.201、192.168.10.202、192.168.10.203。今天我們要是用的虛擬機器環境就搭建完成了。

RabbitMQ的叢集大致分為兩類:副本叢集映象叢集

副本叢集

副本叢集架構

在這裡插入圖片描述

理解:該種架構中,消費者可以從所有節點訪問訊息佇列,但是訊息佇列僅儲存在master節點,slave節點僅僅同步Exchange,如果消費者監聽的是slave節點,那麼slave節點會跟master節點通訊,取得相應的佇列訊息傳遞給消費者消費。如果master當機,無法進行主從切換,該種架構解決的主要問題即:當叢集中某一時刻master節點當機,可以對訊息佇列進行備份,所以該架構又稱之為主備架構

該架構如果master當機slave不會轉正,因此rabbitMQ服務無法再對外提供服務,所以該架構不滿足高可用的特性

叢集搭建

叢集規劃

node1:192.168.10.201   master    主節點
node2:192.168.10.202   salve01   副本集節點01
node2:192.168.10.203   salve02   副本集節點02

配置ip對映

配置master主機

以master主機為例,使用vim命令開啟hosts,新增以下配置

192.168.10.201 RabbitMQ01
192.168.10.202 RabbitMQ02
192.168.10.203 RabbitMQ03

在這裡插入圖片描述

遠端同步slave

執行命令scp /etc/hosts root@RabbitMQ02:/etcscp /etc/hosts root@RabbitMQ03:/etc

在這裡插入圖片描述

期間有兩處要注意,其一是否確定繼續遠端連線,選擇yes;其二要輸入遠端機器的密碼;

同步成功後,我們檢視slave01的hosts檔案

在這裡插入圖片描述

可以看到檔案已經同步成功。按照上述操作,同步slave02機器即可

安裝RabbitMQ

上傳rpm

在這裡插入圖片描述

同步rpm到slave

在這裡插入圖片描述

安裝rpm

按照erlang、socat、rabbitmq的順序在三臺機器上依次執行rpm -ivh **.rpm命令安裝上面三個rpm

在這裡插入圖片描述

拷貝配置檔案

分別在三臺機器上執行命令cp /usr/share/doc/rabbitmq-server-3.7.18/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config

修改配置檔案

分別在三臺機器上執行命令vim /etc/rabbitmq/rabbitmq.config,修改行如下

在這裡插入圖片描述

啟動RabbitMQ的外掛管理功能

在三臺機器上執行以下命令rabbitmq-plugins enable rabbitmq_management,執行結果如下圖則說明外掛管理服務啟動成功

在這裡插入圖片描述

啟動並檢視狀態

三臺機器上一次執行命令systemctl start rabbitmq-serversystemctl status rabbitmq-server

在這裡插入圖片描述

瀏覽器訪問管理介面

依次輸入地址http://192.168.10.201:15672http://192.168.10.202:15672http://192.168.10.203:15672,使用guest/guest使用者名稱密碼登入

在這裡插入圖片描述

同步.erlang.cookie

關閉RabbitMQ服務

同步**.erlang.cookie**之前記得首先關閉RabbitMQ服務,三臺機器依次執行systemctl stop rabbitmq-server,然後使用命令systemctl status rabbitmq-server檢視狀態

在這裡插入圖片描述

同步.erlang.cookie

我們這裡以master的cookie為主,執行命令scp /var/lib/rabbitmq/.erlang.cookie root@RabbitMQ02:/var/lib/rabbitmq/scp /var/lib/rabbitmq/.erlang.cookie root@RabbitMQ03:/var/lib/rabbitmq/同步master的.erlang.cookie到salve中

在這裡插入圖片描述

啟動master

叢集的啟動方式跟單機有所區別,官方建議我們使用命令rabbitmq-server -detached,這種方式是後臺啟動方式,並沒有啟動介面管理功能,這時候我們訪問介面是訪問不到的。依次在三臺機器上執行該命令啟動RabbitMQ服務

將slave加入到叢集

走到這裡終於撥開雲霧見青天了,這裡開始正式搭建叢集,首先要確保兩個從機是關閉的(不包括master),如果不確定可以執行關閉命令rabbitmqctl stop_app。最後在slave執行命令rabbitmqctl join_cluster rabbit@RabbitMQ01

在這裡插入圖片描述

啟動slave

slave加入到master之後就可以執行命令rabbitmqctl start_app啟動兩臺slave伺服器

在這裡插入圖片描述

這裡注意的是通過命令rabbitmqctl start_app的方式啟動服務並不是以後臺的方式啟動的,最後控制檯也列印出了cmpleted with 3 plugins這說明管理介面也被載入了,這會更改整個叢集的狀態。我們之前之前我們的master是以後臺方式啟動的,並不能訪問管理介面,現在我們再去看下master的管理介面已經可以開啟了,而且顯示出了叢集目前的狀態

在這裡插入圖片描述

現在我們可以在任意節點執行命令rabbitmqctl cluster_status來檢視當前叢集的狀態

在這裡插入圖片描述

  • nodes:節點顯示當前叢集所有的節點
  • running_nodes:顯示當前叢集中正在執行的節點
  • cluster_name:就是當前的master節點

映象叢集

映象叢集佇列機制就是將佇列在三個節點之間設定主從關係,訊息會在三個節點之間進行自動同步,且如果其中一個節點不可用,並不會導致訊息丟失或服務不可用的情況,提升MQ叢集的整體高可用性

映象叢集是通過上面我們配置的副本叢集的基礎上配置而來

映象叢集架構

在這裡插入圖片描述

配置叢集架構

策略說明

上面說了映象叢集是通過配置來實現的,配置主要是策略的配置,線面對策略進行一下簡要的說明

rabbitmqctl set_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] <name> <pattern> <definition>
  • [-p vhost]: 可選引數,針對指定vhost下的queue進行設定

  • [–priority ]:可選引數,policy的優先順序,一般不寫

  • [–apply-to ]:可選引數,指定策略的應用物件,是應用於交換機還是應用於佇列,一般不寫

  • :policy的名稱

  • :queue的匹配模式(正規表示式)

  • :映象定義,包括三個部分ha-mode, ha-params, ha-sync-mode

    ha-mode:指明映象佇列的模式,有效值為 all/exactly/nodes

    • all:表示在叢集中所有的節點上進行映象
    • exactly:表示在指定個數的節點上進行映象,節點的個數由ha-params指定
    • nodes:表示在指定的節點上進行映象,節點名稱通過ha-params指定

    ha-params:ha-mode模式需要用到的引數

    ha-sync-mode:進行佇列中訊息的同步方式,有效值為automatic和manual

檢視當前策略

在叢集中的任一節點執行命令rabbitmqctl list_policies,檢視當前叢集的策略

在這裡插入圖片描述

可以看到當前叢集中只有預設的一個虛擬主機且沒有配置任何策略

新增策略

新增策略之前我們先新建一個hello佇列

在這裡插入圖片描述

#策略正規表示式為 “^” 表示所有匹配所有佇列名稱  ^hello:匹配hello開頭佇列
rabbitmqctl set_policy ha-all '^hello' '{"ha-mode":"all","ha-sync-mode":"automatic"}'

在任一節點執行上述命令後,再次檢視管理介面

在這裡插入圖片描述

可對外提供服務的節點可以理解為最多幾個主機當機或是整個服務癱瘓

上圖node+2意思是我們上面搭建的副本叢集通過上面的策略配置已經變成了映象叢集,如果master節點當機,那麼slave就會自動切換成master,這樣就實現了叢集的高可用

刪除策略

刪除策略使用命令rabbitmqctl clear_policy <name> 比如我們刪除上面的策略ha-all的命令就是rabbitmqctl clear_policy ha-all

在這裡插入圖片描述

這裡需要注意是,如果策略被全部刪除,那麼映象叢集又會回退到副本叢集,這時候該叢集也就失去了高可用的特性,如下圖

在這裡插入圖片描述

相關文章