1. 程式人生 > 實用技巧 >RabbitMQ(三)叢集

RabbitMQ(三)叢集

一、rabbitmq節點 1、節點分類 1)磁碟節點:配置資訊和元資訊儲存在磁碟上 2)記憶體節點:配置資訊和元資訊儲存在記憶體中,RAM節點不提供更高的訊息速率 2、節點的選擇 1)在單機情況下,節點必須為磁碟節點 2)在叢集模式下,至少有一個節點是磁碟節點 如果唯一磁碟的磁碟節點崩潰了,不能進行如下操作:
  • 不能建立佇列
  • 不能建立交換器
  • 不能建立繫結
  • 不能新增使用者
  • 不能更改許可權
  • 不能新增和刪除叢集幾點
3)叢集中所有節點都是對等的,不存在主從關係 二、rabbitmq的三種模式 1、單機模式,就是單獨執行一個rabbitmq服務 2、普通叢集模式 1)節點之間同步元資料
  • 佇列元資料:佇列名稱和它的屬性;
  • 交換器元資料:交換器名稱、型別和屬性;
  • 繫結元資料:一張簡單的表格展示瞭如何將訊息路由到佇列;
  • vhost元資料:為vhost內的佇列、交換器和繫結提供名稱空間和安全屬性;
  • 使用者元資料
  • 許可權元資料
2)訊息不會在節點之間同步 3)佇列只會在建立的節點中存在,其他節點只知道這個queue的metadata資訊和一個指向queue的owner node的指標 3、生產和消費訊息 1)如果生產者消費者連線的節點為佇列所在節點,叢集中的訊息收發只與該節點有關 2)如果連線的節點為佇列非所在節點,該節點起路由轉發作用, 生產訊息:根據節點上有關的元資料,將資料轉發至佇列所在節點上,最終傳送的訊息還是會儲存至佇列所在節點上。 消費訊息:根據節點上有關的元資料,從佇列所在節點拉取訊息,傳送給消費者 3、映象叢集模式 1)每一個映象佇列都包含一個master和1個或多個slave佇列 2)一旦主節點不可用,最老的從佇列將被選舉為新的主佇列。 3)映象模式是在普通模式的基礎上,通過配置同步策略,將訊息同步到從佇列

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的優先順序
例項: rabbitmqctl set_policy ha
-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to all
三、docker部署映象模式

cat>>/etc/hosts<<EOF

10.31.4.45 test-prd-10-31-4-45 10.31.4.96 test-prd-10-31-4-96 EOF systemctl enable docker systemctl start docker docker run --name rabbitmq-3.7.16 \ -e RABBITMQ_DEFAULT_PASS="12345678" \ -e RABBITMQ_DEFAULT_USER="root" \ -v /data/rabbitmq:/var/lib/rabbitmq \ -e RABBITMQ_ERLANG_COOKIE="NLZZHgKCFB123XSVWXGD" \ --network=host -d harbor.tenserpay.xyz/op/rabbitmq:3.7.16-management 在節點10.31.4.45 docker exec abf6fe67724e rabbitmqctl stop_app docker exec abf6fe67724e rabbitmqctl join_cluster rabbit@test-prd-10-31-4-96 docker exec abf6fe67724e rabbitmqctl start_app 在其中一個節點執行同步策略 docker exec 51189b820642 rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to all