天天看點

RabbitMQ 鏡像叢集之同步政策_專欄講解

文章目錄

  • ​​一、 基礎知識汲取​​
  • ​​1.1. 鏡像叢集簡述​​
  • ​​1.2. 政策參數說明​​
  • ​​1.3. 政策案例​​
  • ​​二、HA mode 同步方式​​
  • ​​2.1. 參數說明​​
  • ​​2.2. 案例​​
  • ​​2.3. 指令終端形式​​
  • ​​2.4. MQ管控台設定​​
  • ​​2.5. 隊列同步​​
  • ​​2.5. 優缺點​​
  • ​​三、Ha async mode 同步方式(推薦使用)​​
  • ​​3.1. 參數說明​​
  • ​​3.2. 案例​​
  • ​​3.3. 指令終端形式​​
  • ​​3.4. MQ管控台設定​​
  • ​​四、ha-mode:nodes鏡像到到叢集中指定節點​​
  • ​​4.1. 參數說明​​
  • ​​4.2. 案例​​
  • ​​4.3. 指令終端形式​​
  • ​​4.4. MQ管控台設定​​
  • ​​五、政策區配正則​​
  • ​​5.1. 以LFY_開頭的隊列應用此政策​​
  • ​​5.2. 以_LOG結尾的隊列應用此政策​​
  • ​​5.3. 第3種,以QUEUE_開頭的隊列應用此政策。但是指定同步的節點,是第2種 的演化形式​​
RabbitMQ 鏡像叢集之同步政策_專欄講解
一、 基礎知識汲取

1.1. 鏡像叢集簡述

鏡像叢集模式是在RabbitMQ Cluster預設叢集的基礎上添加政策搭建完成的

RabbitMQ預設叢集模式,并不包管隊列的高可用性,盡管隊列資訊,交換機、綁定這些可以複制到叢集裡的任何一個節點,然則隊列内容不會複制,固然該模式解決一項目組節點壓力,但隊列節點當機直接導緻該隊列無法應用,隻能守候重新開機,是以要想在隊列節點當機或故障也能正常應用,就要複制隊列内容到叢集裡的每個節點,須要建立鏡像隊列。

跟普通叢集模式不一樣的是,在鏡像叢集模式下,你建立的 queue,無論中繼資料還是 queue 裡的消息都會存在于多個執行個體上,就是說,每個 RabbitMQ 節點都有這個 queue 的一個完整鏡像,包含 queue 的全部資料的意思。然後每次你寫消息到 queue 的時候,都會自動把消息同步到多個執行個體的 queue 上。

1.2. 政策參數說明

rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]

-p Vhost: 可選參數,針對指定vhost下的queue進行設定

Name: policy的名稱

Pattern: queue的比對模式(正規表達式)

Definition:鏡像定義,包括三個部分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

priority:可選參數,policy的優先級

請注意一個事實,鏡像配置的pattern 采用的是正規表達式比對,也就是說會比對一組。      

1.3. 政策案例

常見的3中設定:

#格式:rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]
#第1種
rabbitmqctl set_policy policy3l "^" '{"ha-mode":"all"}'
#第2種
rabbitmqctl set_policy policy2 "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
#第3種
rabbitmqctl set_policy -p "/" policy3 "^QUEUE" '{"ha-mode":"nodes","ha-params":["rabbit@mq-002","rabbit@mq-003"],"ha-sync-mode":"automatic"}'      
二、HA mode 同步方式

2.1. 參數說明

One of all (mirror to all nodes in the cluster), exactly (mirror to a set number of nodes) or nodes (mirror to an explicit list of nodes). If you choose one of the latter two, you must also set ha-params.

HA mode的值共有三個

.all:鏡像同步到叢集隊列的所有節點

.exactly:按個數同步到叢集中的一個或多個節點

. nodes:具體的節點名稱

如果選擇後面兩個選項的的值,還需要設定ha-params參數。

2.2. 案例

所有隊列設定為鏡像隊列,即隊列會被複制到叢集各個節點,
各個叢集節點交換機、隊列、隊列内容都保持一緻。      

2.3. 指令終端形式

rabbitmqctl set_policy policy3l "^" '{"ha-mode":"all"}'      

2.4. MQ管控台設定

RabbitMQ 鏡像叢集之同步政策_專欄講解

2.5. 隊列同步

叢集節點當機或停電重新開機後,​

​queue-1​

​隊列需要手動同步

rabbitmqctl sync_queue queue-1        

2.5. 優缺點

自動同步交換機隊列,但是叢集某節點當機或者停電,都需要手動同步,有點麻煩,萬一忘了怎麼辦呢?對吧

三、Ha async mode 同步方式(推薦使用)

3.1. 參數說明

這個需要詳細說明的,預設的情況下。當節點斷線後那麼這個節點就已經是落後的版本,當我們再去啟動節點的時候資料我們需要去手動的同步,這自然是不好的,做到自動化是最完美的,是以設定成automatic是最佳選擇

建立政策ha-all,ha-mode: all 鏡像到叢集中所有的節點

Pattern: ^

Apply to :Exchanges and queues

ha-mode: all //應用于所有節點

ha-sync-mode:automatic

Priority 0

3.2. 案例

所有隊列設定為鏡像隊列,即隊列會被複制到叢集各個節點,
各個叢集節點交換機、隊列、隊列内容都保持一緻。      

3.3. 指令終端形式

rabbitmqctl set_policy policy2 "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'      

3.4. MQ管控台設定

RabbitMQ 鏡像叢集之同步政策_專欄講解
RabbitMQ 鏡像叢集之同步政策_專欄講解

ha-all應用效果

queue-1節點後的+2表示鏡像到2個節點,因為ha-mode:all,共有叢集共有三個節點,+2表示将隊列鏡像到另外兩個節點

四、ha-mode:nodes鏡像到到叢集中指定節點

4.1. 參數說明

建立政策policy3,

Pattern: ^QUEUE_

Apply to :queues

Definition

ha-mode: nodes

ha-params: rabbit@mq-002

rabbit@mq-003

ha-sync-mode: automatic

Priority 0

4.2. 案例

所有隊列設定為鏡像隊列,即隊列會被複制到叢集指定節點,
各個叢集節點交換機、隊列、隊列内容都保持一緻。      

4.3. 指令終端形式

rabbitmqctl set_policy -p "/" policy3 "^QUEUE" '{"ha-mode":"nodes","ha-params":["rabbit@mq-002","rabbit@mq-003"],"ha-sync-mode":"automatic"}'      

4.4. MQ管控台設定

RabbitMQ 鏡像叢集之同步政策_專欄講解
五、政策區配正則
RabbitMQ 鏡像叢集之同步政策_專欄講解

5.1. 以LFY_開頭的隊列應用此政策

RabbitMQ 鏡像叢集之同步政策_專欄講解

5.2. 以_LOG結尾的隊列應用此政策

5.3. 第3種,以QUEUE_開頭的隊列應用此政策。但是指定同步的節點,是第2種 的演化形式