RabbitMQ叢集搭建
RabbitMQ叢集搭建
RabbitMQ叢集搭建
準備工作
開始本課程之前,先按文章
克隆三個虛擬機器,修改主機名依次為: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:/etc
、scp /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-server
、systemctl status rabbitmq-server
瀏覽器訪問管理介面
依次輸入地址http://192.168.10.201:15672
、http://192.168.10.202:15672
、http://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
這裡需要注意是,如果策略被全部刪除,那麼映象叢集又會回退到副本叢集,這時候該叢集也就失去了高可用的特性,如下圖
相關文章
- 使用docker 搭建rabbitmq 叢集DockerMQ
- 用Docker搭建RabbitMq的普通叢集和映象叢集DockerMQ
- 快速掌握RabbitMQ(五)——搭建高可用的RabbitMQ叢集MQ
- 訊息中介軟體RabbitMQ_RabbitMQ叢集搭建8MQ
- RabbitMQ叢集MQ
- RabbitMQ 映象叢集MQ
- 基於 HAProxy + KeepAlived 搭建 RabbitMQ 高可用叢集MQ
- 用 docker-compose 搭建一個 rabbitmq 叢集DockerMQ
- RabbitMQ叢集簡介MQ
- RabbitMQ系列(五)使用Docker部署RabbitMQ叢集MQDocker
- 搭建zookeeper叢集(偽叢集)
- RabbitMQ高階指南:從配置、使用到高可用叢集搭建MQ
- 叢集搭建
- zookeeper叢集及kafka叢集搭建Kafka
- RabbitMQ叢集重啟報錯MQ
- 二、Linux部署RabbitMQ叢集LinuxMQ
- RabbitMQ叢集運維實踐MQ運維
- Redis系列:搭建Redis叢集(叢集模式)Redis模式
- redis叢集搭建Redis
- nacos 叢集搭建
- kafka叢集搭建Kafka
- Ambari叢集搭建
- 搭建ELK叢集
- HBASE叢集搭建
- zookeeper 叢集搭建
- mysql叢集搭建MySql
- Zookeeper叢集搭建
- 搭建 Redis 叢集Redis
- 搭建 zookeeper 叢集
- Elasticsearch 叢集搭建Elasticsearch
- mysql 叢集搭建MySql
- Storm叢集搭建ORM
- 在滴滴雲 DC2 雲伺服器上搭建 RabbitMQ 叢集伺服器MQ
- 從0到1搭建spark叢集---企業叢集搭建Spark
- Rabbitmq叢集高可用部署詳細MQ
- [Open Source] RabbitMQ 高可用叢集方案MQ
- linux下搭建ZooKeeper叢集(偽叢集)Linux
- Kafka學習之(五)搭建kafka叢集之Zookeeper叢集搭建Kafka