RabbitMQ高可用鏡像隊(duì)列

RabbitMQ高可用鏡像隊(duì)列


在分布式系統(tǒng)中,通常使用多個(gè)術(shù)語來標(biāo)識(shí)主要副本和輔助副本。本指南通常使用“主”來引用隊(duì)列的主要副本,而對(duì)于輔助副本則使用“鏡像”。但是,你會(huì)發(fā)現(xiàn)“master”在這里和那里使用。這是因?yàn)镽abbitMQ CLI工具歷史上一直使用術(shù)語“master”來指代輔助。因此這兩個(gè)術(shù)語目前可以互換使用,但我們希望最終擺脫傳統(tǒng)的術(shù)語。

如何配置鏡像

鏡像參數(shù)是使用策略配置的。策略按名稱(使用正則表達(dá)式模式)匹配一個(gè)或多個(gè)隊(duì)列,并包含添加到匹配隊(duì)列的整個(gè)屬性集中的定義(可選參數(shù)的映射)。有關(guān)策略 的更多信息,請(qǐng)參閱運(yùn)行時(shí)參數(shù)和策略。

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

控制鏡像的隊(duì)列參數(shù)

如上所述,隊(duì)列通過策略啟用鏡像。政策可以隨時(shí)更改; 創(chuàng)建一個(gè)非鏡像的隊(duì)列是有效的,然后在稍后的某個(gè)點(diǎn)上鏡像(反之亦然)。非鏡像隊(duì)列和沒有任何鏡像的鏡像隊(duì)列之間是有區(qū)別的 - 前者缺少額外的鏡像基礎(chǔ)架構(gòu),可能會(huì)提供更高的吞吐量。

要使隊(duì)列變成鏡像,您需要?jiǎng)?chuàng)建一個(gè)與之匹配的策略,并設(shè)置策略鍵ha-mode和(可選)ha-params。

ha-mode ha-params Result
all (absent) 隊(duì)列鏡像在群集中的所有節(jié)點(diǎn)上。當(dāng)新節(jié)點(diǎn)添加到群集時(shí),隊(duì)列將鏡像到該節(jié)點(diǎn)。.
exactly count 集群中的隊(duì)列實(shí)例數(shù)。甲計(jì)的1值意味著只是隊(duì)列主,沒有鏡子。如果運(yùn)行隊(duì)列主節(jié)點(diǎn)的節(jié)點(diǎn)變?yōu)椴豢捎?,則隊(duì)列將變?yōu)椴豢捎?。甲?jì)的2值表示1個(gè)隊(duì)列主站和1個(gè)隊(duì)列鏡。如果運(yùn)行隊(duì)列主節(jié)點(diǎn)的節(jié)點(diǎn)不可用,隊(duì)列鏡像將自動(dòng)升級(jí)為主節(jié)點(diǎn)??傊篘umberOfQueueMirrors = NumberOfNodes - 1。如果群集中的計(jì)數(shù)節(jié)點(diǎn)少于該計(jì)數(shù)節(jié)點(diǎn),則該隊(duì)列將鏡像到所有節(jié)點(diǎn)。如果有超過 計(jì)數(shù)的集群中的節(jié)點(diǎn),以及包含反射鏡一個(gè)節(jié)點(diǎn)出現(xiàn)故障,那么一個(gè)新的反射鏡將被另一節(jié)點(diǎn)上創(chuàng)建。確切的使用模式與“ha-promote-on-shutdown”:“always”可能是危險(xiǎn)的,因?yàn)殛?duì)列可以在群集中遷移,并在被關(guān)閉時(shí)變得不同步。 .
nodes node names 隊(duì)列鏡像到節(jié)點(diǎn)名稱中列出的節(jié)點(diǎn)。節(jié)點(diǎn)名稱是在出現(xiàn)在rabbitmqctl cluster_status中的Erlang節(jié)點(diǎn)名稱; 他們通常有“ 兔子@主機(jī)名 ” 的形式。如果這些節(jié)點(diǎn)名稱中的任何一個(gè)不是集群的一部分,則這不構(gòu)成錯(cuò)誤。如果在聲明隊(duì)列時(shí)列表中沒有任何節(jié)點(diǎn)在線,則會(huì)在聲明客戶端所連接的節(jié)點(diǎn)上創(chuàng)建隊(duì)列。

例子

以下示例聲明名為ha-all的策略,它與名稱以"ha"開頭的隊(duì)列相匹配,并將鏡像配置到集群中的所有節(jié)點(diǎn).

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"開始的隊(duì)列鏡像到群集中的任意兩個(gè)節(jié)點(diǎn),并進(jìn)行自動(dòng)同步:

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"開頭的隊(duì)列鏡像到集群中的特定節(jié)點(diǎn)的策略:

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.
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,568評(píng)論 19 139
  • 一、鏡像隊(duì)列使用 1.鏡像隊(duì)列作用 ? RabbitMQ默認(rèn)集群模式,并不包管隊(duì)列的高可用性,盡管隊(duì)列信息,交...
    jaredCoder閱讀 6,109評(píng)論 2 7
  • 關(guān)于消息隊(duì)列,從前年開始斷斷續(xù)續(xù)看了些資料,想寫很久了,但一直沒騰出空,近來分別碰到幾個(gè)朋友聊這塊的技術(shù)選型,是時(shí)...
    預(yù)流閱讀 586,620評(píng)論 51 787
  • 1.什么是消息隊(duì)列 消息隊(duì)列允許應(yīng)用間通過消息的發(fā)送與接收的方式進(jìn)行通信,當(dāng)消息接收方服務(wù)忙或不可用時(shí),其提供了一...
    zhuke閱讀 4,630評(píng)論 0 12
  • CentOS安裝RabbitMQ 安裝erlang 配置epel源 centos6.xwget -O /etc/y...
    肖金光xjg閱讀 1,259評(píng)論 0 3

友情鏈接更多精彩內(nèi)容