RabbitMQ高可用鏡像隊列

## RabbitMQ高可用鏡像隊列

在分佈式系統中,一般使用多個術語來標識主要副本和輔助副本。本指南一般使用「主」來引用隊列的主要副本,而對於輔助副本則使用「鏡像」。可是,你會發現「master」在這裏和那裏使用。這是由於RabbitMQ CLI工具歷史上一直使用術語「master」來指代輔助。所以這兩個術語目前能夠互換使用,但咱們但願最終擺脫傳統的術語。html

如何配置鏡像

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

參考文檔:http://www.rabbitmq.com/parameters.html#policies正則表達式

控制鏡像的隊列參數

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

要使隊列變成鏡像,您須要建立一個與之匹配的策略,並設置策略鍵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"開頭的隊列相匹配,並將鏡像配置到集羣中的全部節點.app

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"開頭的隊列鏡像到集羣中的特定節點的策略:htm

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.
相關文章
相關標籤/搜索