欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

怎么進行RabbitMQ鏡像隊列分析

怎么進行RabbitMQ鏡像隊列分析,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

創(chuàng)新互聯(lián)從2013年創(chuàng)立,先為二七等服務(wù)建站,二七等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為二七企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

鏡像隊列的主要作用是用來解決隊列的單點故障。

鏡像隊列主要有兩種類型:master和slave。master和slave節(jié)點位于同一個集群中。master只要一個節(jié)點,slave可以有多個節(jié)點。

生產(chǎn)者發(fā)送到主節(jié)點消息會同時被發(fā)往各個slave節(jié)點,除了發(fā)送消息,其他動作只會發(fā)給master,然后通過master廣播給其他slave。

master掛掉以后,根據(jù)slave加入的時間順序排列,時間長的提升為master。

鏡像隊列的backing_queue不再使用rabbit_variable_queue。master節(jié)點的queue使用rabbit_mirror_queue_master,它內(nèi)部包裹了普通backing_queue進行本地消息消息持久化處理,在此基礎(chǔ)上增加了將消息和ack復(fù)制到所有鏡像的功能,slave節(jié)點的queue使用rabbit_mirror_queue_slave。

怎么進行RabbitMQ鏡像隊列分析

rabbit_mirror_queue_master的操作都會通過組播GM的方式同步到各個slave中。GM負責(zé)消息的廣播,rabbitmirrorqueueslave負責(zé)回調(diào)處理,而master上的回調(diào)處理是由coordinator負責(zé)完成的。如前所述,除了Basic.Publish,所有的操作都是通過master來完成的,master對消息進行處理的同時將消息的處理通過GM廣播給所有的slave,slave的GM收到消息后,通過回調(diào)交由rabbit_mirror_queue_slave進行實際的處理。

GM模塊實現(xiàn)的是一種可靠的組播通信協(xié)議,該協(xié)議能夠保證組播消息的原子性,即保證組中活著的節(jié)點要么都收到消息要么都收不到,它的實現(xiàn)大致為:將所有的節(jié)點形成一個循環(huán)鏈表,每個節(jié)點都會監(jiān)控位于自己左右兩邊的節(jié)點,當(dāng)有節(jié)點新增時,相鄰的節(jié)點保證當(dāng)前廣播的消息會復(fù)制到新的節(jié)點上;當(dāng)有節(jié)點失效時,相鄰的節(jié)點會接管以保證本次廣播的消息會復(fù)制到所有的節(jié)點。

在master和slave上的這些GM形成一個組(gm_group),這個組的信息會記錄在Mnesia中。不同的鏡像隊列形成不同的組。操作命令從master對應(yīng)的GM發(fā)出后,順著鏈表傳送到所有的節(jié)點。由于所有節(jié)點組成了一個循環(huán)鏈表, master對應(yīng)的GM最終會收到自己發(fā)送的操作命令,這個時候master就知道該操作命令都同步到了所有的slave上。

當(dāng)master掛掉之后,會有以下連鎖反應(yīng):

  1. 與master連接的客戶端連接全部斷開。

  2. 選舉最老的slave作為新的master,因為最老的slave與舊的master之間的同步狀態(tài)應(yīng)該是最好的。如果此時所有slave處于未同步狀態(tài),則未同步的消息會丟失。

  3. 新的master重新入隊所有unack的消息,因為新的slave無法區(qū)分這些unack的消息是否己經(jīng)到達客戶端,或者是ack信息丟失在老的master鏈路上,再或者是丟失在老的master 組播ack消息到所有slave的鏈路上,所以出于消息可靠性的考慮,重新入隊所有unack的消息,不過此時客戶端可能會有重復(fù)消息。

  4. 如果客戶端連接著slave,并且Basic.Consume消費時指定了x-cancel-on-ha-failover參數(shù),那么斷開之時客戶端會收到一個Consumer Cancellation Notification的通知,消費者客戶端中會回調(diào)Consumer接口的handleCancel方法。如果未指定x-cancel-on-ha-failover參數(shù),那么消費者將無法感知master宕機。

  rabbitmqctl set_policy [-p vhost] [--priority priority] [--apply-to apply-to] {name} {pattern} {definition}

definition中需要包含3個部分:

  • ha-mode:指明鏡像隊列的模式,有效值為all、exactly、nodes,默認為all。all表示在集群中所有的節(jié)點上進行鏡像;exactly表示在指定個數(shù)的節(jié)點上進行鏡像,節(jié)點個數(shù)由ha-params指定;nodes表示在指定節(jié)點上進行鏡像,節(jié)點名稱過ha-params指定,節(jié)點的名稱通常類似于rabbit@hostname。

  • ha-params:不同的ha-mode配置中需要用到的參數(shù)。

  • ha-sync-mode:隊列中消息的同步方式,有效值為automatic和manual。

  • ha-promote-on-shutdown:加后面的講述

將新節(jié)點加入己存在的鏡像隊列時,默認情況下ha-sync-mode取值為manual。鏡像隊列中的消息不會主動同步到新的slave中,除非顯式調(diào)用同步命令。當(dāng)調(diào)用同步命令后,隊列開始阻塞,無法對其進行其他操作,直到同步完成。當(dāng)ha-sync-mode設(shè)置為automatic時, 新加入的slave會默認同步己知的鏡像隊列

當(dāng)所有slave都出現(xiàn)未同步狀態(tài),并且ha-promote-on-shutdown設(shè)置為when-synced(默認)時,如果master因為主動原因停掉,比如通過rabbitmqctl stop命令或者優(yōu)雅關(guān)閉操作系統(tǒng),那么slave不會接管master,也就是此時鏡像隊列不可用;但是如果master因為被動原因停掉,比如Erlang虛擬機或者操作系統(tǒng)崩潰,那么slave會接管master。這個配置項隱含的價值取向是保證消息可靠不丟失,同時放棄了可用性。如果ha-promote-on-shutdown設(shè)置為always,那么不論master因為何種原因停止,slave都會接管master,優(yōu)先保證可用性,不過消息可能會丟失。

 # 命令可以查看哪些slaves已經(jīng)完成同步rabbitmqctl list_queues name slave_pids synchronised_slave_pids
 # 手動同步隊列rabbitmqctl sync_queue {name}
 # 取消隊列的同步操作rabbitmqctl cancel_sync_queue {name}

看完上述內(nèi)容,你們掌握怎么進行RabbitMQ鏡像隊列分析的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

網(wǎng)站標題:怎么進行RabbitMQ鏡像隊列分析
分享路徑:http://chinadenli.net/article46/pigchg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名網(wǎng)站營銷服務(wù)器托管動態(tài)網(wǎng)站做網(wǎng)站網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名