RabbitMQ高可用鏡像隊列


RabbitMQ高可用鏡像隊列


在分布式系統中,通常使用多個術語來標識主要副本和輔助副本。本指南通常使用“主”來引用隊列的主要副本,而對於輔助副本則使用“鏡像”。但是,你會發現“master”在這里和那里使用。這是因為RabbitMQ CLI工具歷史上一直使用術語“master”來指代輔助。因此這兩個術語目前可以互換使用,但我們希望最終擺脫傳統的術語。

如何配置鏡像

鏡像參數是使用策略配置的。策略按名稱(使用正則表達式模式)匹配一個或多個隊列,並包含添加到匹配隊列的整個屬性集中的定義(可選參數的映射)。有關策略 的更多信息,請參閱運行時參數和策略。

參考文檔:http://www.rabbitmq.com/parameters.html#policies

控制鏡像的隊列參數

如上所述,隊列通過策略啟用鏡像。政策可以隨時更改; 創建一個非鏡像的隊列是有效的,然后在稍后的某個點上鏡像(反之亦然)。非鏡像隊列和沒有任何鏡像的鏡像隊列之間是有區別的 - 前者缺少額外的鏡像基礎架構,可能會提供更高的吞吐量。

要使隊列變成鏡像,您需要創建一個與之匹配的策略,並設置策略鍵ha-mode和(可選)ha-params。

ha-mode ha-params Result
all (absent) 隊列鏡像在群集中的所有節點上。當新節點添加到群集時,隊列將鏡像到該節點。.
exactly count 集群中的隊列實例數。甲計的1值意味着只是隊列主,沒有鏡子。如果運行隊列主節點的節點變為不可用,則隊列將變為不可用。甲計的2值表示1個隊列主站和1個隊列鏡。如果運行隊列主節點的節點不可用,隊列鏡像將自動升級為主節點。總之:NumberOfQueueMirrors = NumberOfNodes - 1。如果群集中的計數節點少於該計數節點,則該隊列將鏡像到所有節點。如果有超過 計數的集群中的節點,以及包含反射鏡一個節點出現故障,那么一個新的反射鏡將被另一節點上創建。確切的使用模式與“ha-promote-on-shutdown”:“always”可能是危險的,因為隊列可以在群集中遷移,並在被關閉時變得不同步。 .
nodes node names 隊列鏡像到節點名稱中列出的節點。節點名稱是在出現在rabbitmqctl cluster_status中的Erlang節點名稱; 他們通常有“ 兔子@主機名 ” 的形式。如果這些節點名稱中的任何一個不是集群的一部分,則這不構成錯誤。如果在聲明隊列時列表中沒有任何節點在線,則會在聲明客戶端所連接的節點上創建隊列。

例子

以下示例聲明名為ha-all的策略,它與名稱以"ha"開頭的隊列相匹配,並將鏡像配置到集群中的所有節點.

rabbitmqctl rabbitmqctl set_policy ha-all "^ha." '{"ha-mode":"all"}'
rabbitmqctl (Windows) rabbitmqctl set_policy ha-all "^ha." "{""ha-mode"":""all""}"
HTTP API PUT /api/policies/%2f/ha-all {"pattern":"^ha.", "definition":{"ha-mode":"all"}}
Web UI Navigate to Admin > Policies > Add / update a policy.Enter "ha-all" next to Name, "^ha." next to Pattern, and "ha-mode" = "all" in the first line next to Policy.

Click Add policy.

策略的名稱以"two"開始的隊列鏡像到群集中的任意兩個節點,並進行自動同步:

rabbitmqctl rabbitmqctl set_policy ha-two "^two." '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
rabbitmqctl (Windows) rabbitmqctl set_policy ha-two "^two." ^ "{""ha-mode"":""exactly"",""ha-params"":2,"ha-sync-mode":"automatic"}"
HTTP API PUT /api/policies/%2f/ha-two{"pattern":"^two.", "definition":{"ha-mode":"exactly", "ha-params":2,"ha-sync-mode":"automatic"}}
Web UI Navigate to Admin > Policies > Add / update a policy.Enter "ha-two" next to Name and "^two." next to Pattern.Enter "ha-mode" = "exactly" in the first line next to Policy, then "ha-params" = 2 in the second line, then "ha-sync-mode" = "automatic" in the third, and set the type on the second line to "Number".Click Add policy.

以"node"開頭的隊列鏡像到集群中的特定節點的策略:

rabbitmqctl rabbitmqctl set_policy ha-nodes "^nodes." '{"ha-mode":"nodes","ha-params":["rabbit@nodeA", "rabbit@nodeB"]}'
rabbitmqctl (Windows) rabbitmqctl set_policy ha-nodes "^nodes." ^ "{""ha-mode"":""nodes"",""ha-params"":[""rabbit@nodeA"", ""rabbit@nodeB""]}"
HTTP API PUT /api/policies/%2f/ha-nodes{"pattern":"^nodes.", "definition":{"ha-mode":"nodes", "ha-params":["rabbit@nodeA", "rabbit@nodeB"]}
Web UI Navigate to Admin > Policies > Add / update a policy.Enter "ha-nodes" next to Name and "^nodes." next to Pattern.Enter "ha-mode" = "nodes" in the first line next to Policy, then "ha-params" in the second line, set the second line's type to "List", and then enter "rabbit@nodeA" and "rabbit@nodeB" in the sublist which appears.Click Add policy.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM