文章目錄
- 一、 基礎知識汲取
- 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種 的演化形式
一、 基礎知識汲取
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管控台設定
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管控台設定
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管控台設定
五、政策區配正則
5.1. 以LFY_開頭的隊列應用此政策
5.2. 以_LOG結尾的隊列應用此政策
5.3. 第3種,以QUEUE_開頭的隊列應用此政策。但是指定同步的節點,是第2種 的演化形式