精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

消息中間件:RabbitMQ原理、集群、基本運(yùn)維操作、常見故障處理

開發(fā) 架構(gòu)
本次學(xué)習(xí)主要針對運(yùn)維人員,和對rabbitmq不熟悉的開發(fā)人員。通過本次學(xué)習(xí)你將掌握rabbitmq 的基本原理、集群、基本運(yùn)維操作、常見故障處理。

本次學(xué)習(xí)主要針對運(yùn)維人員,和對rabbitmq不熟悉的開發(fā)人員。通過本次學(xué)習(xí)你將掌握rabbitmq 的基本原理、集群、基本運(yùn)維操作、常見故障處理。

[[272412]]

1、原理與概念

簡介

AMQP,即Advanced Message Queuing Protocol,高級消息隊(duì)列協(xié)議,是應(yīng)用層協(xié)議的一個開放標(biāo)準(zhǔn),為面向消息的中間件設(shè)計(jì)。消息中間件主要用于組件之間的解耦,消息的發(fā)送者無需知道消息使用者的存在,反之亦然。

AMQP的主要特征是面向消息、隊(duì)列、路由(包括點(diǎn)對點(diǎn)和發(fā)布/訂閱)、可靠性、安全。 RabbitMQ是一個開源的AMQP實(shí)現(xiàn),服務(wù)器端用Erlang語言編寫,支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系統(tǒng)中存儲轉(zhuǎn)發(fā)消息,在易用性、擴(kuò)展性、高可用性等方面表現(xiàn)不俗。

解決的問題

RabbitMQ就是當(dāng)前主流的消息中間件之一。

  • 兩個(多個)系統(tǒng)間需要通過定時任務(wù)來同步某些數(shù)據(jù)
  • 異構(gòu)系統(tǒng)的不同進(jìn)程間相互調(diào)用、通訊的問題

Queue

Queue(隊(duì)列)是RabbitMQ的內(nèi)部對象,用于存儲消息,用下圖表示。

消息中間件:RabbitMQ原理、集群、基本運(yùn)維操作、常見故障處理

RabbitMQ中的消息都只能存儲在Queue中,生產(chǎn)者(下圖中的P)生產(chǎn)消息并最終投遞到Queue中,消費(fèi)者(下圖中的C)可以從Queue中獲取消息并消費(fèi)。

消息中間件:RabbitMQ原理、集群、基本運(yùn)維操作、常見故障處理

多個消費(fèi)者可以訂閱同一個Queue,這時Queue中的消息會被平均分?jǐn)偨o多個消費(fèi)者進(jìn)行處理,而不是每個消費(fèi)者都收到所有的消息并處理。

 

消息中間件:RabbitMQ原理、集群、基本運(yùn)維操作、常見故障處理

技術(shù)術(shù)語

  • Broker:簡單來說就是消息隊(duì)列服務(wù)器實(shí)體。
  • producer:消息生產(chǎn)者,就是投遞消息的程序。
  • consumer:消息消費(fèi)者,就是接受消息的程序。
  • vhost:虛擬主機(jī),一個broker里可以開設(shè)多個vhost,用作權(quán)限分離,把不同的系統(tǒng)使用的rabbitmq區(qū)分開,共用一個消息隊(duì)列服務(wù)器,但看上去就像各自在用不用的rabbitmq服務(wù)器一樣。
  • Connection:一個網(wǎng)絡(luò)連接,比如TCP/IP套接字連接。
  • channel:消息通道,是建立在真實(shí)的TCP連接內(nèi)的虛擬連接(是我們與RabbitMQ打交道的最重要的一個接口)。僅僅創(chuàng)建了客戶端到Broker之間的連接后,客戶端還是不能發(fā)送消息的,需要為每一個Connection創(chuàng)建Channel,AMQP協(xié)議規(guī)定只有通過Channel才能執(zhí)行AMQP的命令。AMQP的命令都是通過信道發(fā)送出去的(我們大部分的業(yè)務(wù)操作是在Channel這個接口中完成的,包括定義Queue、定義Exchange、綁定Queue與Exchange、發(fā)布消息等。)。每條信道都會被指派一個唯一ID。在客戶端的每個連接里,可建立多個channel,每個channel代表一個會話任務(wù),理論上無限制,減少TCP創(chuàng)建和銷毀的開銷,實(shí)現(xiàn)共用TCP的效果。之所以需要Channel,是因?yàn)門CP連接的建立和釋放都是十分昂貴的,如果一個客戶端每一個線程都需要與Broker交互,如果每一個線程都建立一個TCP連接,暫且不考慮TCP連接是否浪費(fèi),就算操作系統(tǒng)也無法承受每秒建立如此多的TCP連接。 注1:一個生產(chǎn)者或一個消費(fèi)者與MQ服務(wù)器之間只有一條TCP連接 注2:RabbitMQ建議客戶端線程之間不要共用Channel,至少要保證共用Channel的線程發(fā)送消息必須是串行的,但是建議盡量共用Connection。
  • Exchange:消息交換機(jī),生產(chǎn)者不是直接將消息投遞到Queue中的,實(shí)際上是生產(chǎn)者將消息發(fā)送到Exchange(交換器,下圖中的X),由Exchange將消息路由到一個或多個Queue中(或者丟棄)。

 

消息中間件:RabbitMQ原理、集群、基本運(yùn)維操作、常見故障處理
  • Exchange Types RabbitMQ常用的Exchange Type有fanout、direct、topic、headers這四種(AMQP規(guī)范里還提到兩種Exchange Type,分別為system與自定義,這里不予以描述),之后會分別進(jìn)行介紹。
  • Queue:消息隊(duì)列載體,每個消息都會被投入到一個或多個隊(duì)列。
  • Binding:綁定,它的作用就是把exchange和queue按照路由規(guī)則綁定起來,這樣RabbitMQ就知道如何正確地將消息路由到指定的Queue了。

 

消息中間件:RabbitMQ原理、集群、基本運(yùn)維操作、常見故障處理
  • Routing Key:路由關(guān)鍵字,生產(chǎn)者在將消息發(fā)送給Exchange的時候,一般會指定一個routing key,來指定這個消息的路由規(guī)則,而這個routing key需要與Exchange Type及binding key聯(lián)合使用才能最終生效。

 

消息中間件:RabbitMQ原理、集群、基本運(yùn)維操作、常見故障處理
  • 在Exchange Type與binding key固定的情況下(在正常使用時一般這些內(nèi)容都是固定配置好的),我們的生產(chǎn)者就可以在發(fā)送消息給Exchange時,通過指定routing key來決定消息流向哪里。
  • Prefetch count 前面我們講到如果有多個消費(fèi)者同時訂閱同一個Queue中的消息,Queue中的消息會被平攤給多個消費(fèi)者。這時如果每個消息的處理時間不同,就有可能會導(dǎo)致某些消費(fèi)者一直在忙,而另外一些消費(fèi)者很快就處理完手頭工作并一直空閑的情況。我們可以通過設(shè)置prefetchCount來限制Queue每次發(fā)送給每個消費(fèi)者的消息數(shù),比如我們設(shè)置prefetchCount=1,則Queue每次給每個消費(fèi)者發(fā)送一條消息;消費(fèi)者處理完這條消息后Queue會再給該消費(fèi)者發(fā)送一條消息。
消息中間件:RabbitMQ原理、集群、基本運(yùn)維操作、常見故障處理
消息中間件:RabbitMQ原理、集群、基本運(yùn)維操作、常見故障處理

消息隊(duì)列的使用過程

在AMQP模型中,Exchange是接受生產(chǎn)者消息并將消息路由到消息隊(duì)列的關(guān)鍵組件。ExchangeType和Binding決定了消息的路由規(guī)則。所以生產(chǎn)者想要發(fā)送消息,首先必須要聲明一個Exchange和該Exchange對應(yīng)的Binding。

在Rabbit MQ中,聲明一個Exchange需要三個參數(shù):ExchangeName,ExchangeType和Durable。ExchangeName是該Exchange的名字,該屬性在創(chuàng)建Binding和生產(chǎn)者通過publish推送消息時需要指定。ExchangeType,指Exchange的類型,在RabbitMQ中,有三種類型的Exchange:direct ,fanout和topic,不同的Exchange會表現(xiàn)出不同路由行為。Durable是該Exchange的持久化屬性,這個會在消息持久化章節(jié)討論。

消息中間件:RabbitMQ原理、集群、基本運(yùn)維操作、常見故障處理

聲明一個Binding需要提供一個QueueName,ExchangeName和BindingKey。

 

消息中間件:RabbitMQ原理、集群、基本運(yùn)維操作、常見故障處理

下面是消息發(fā)送的過程:

消息中間件:RabbitMQ原理、集群、基本運(yùn)維操作、常見故障處理
  • 建立連接Connection。由producer和consumer創(chuàng)建連接,連接到broker的物理節(jié)點(diǎn)上。
  • 建立消息Channel。Channel是建立在Connection之上的,一個Connection可以建立多個Channel。producer連接Virtual Host 建立Channel,Consumer連接到相應(yīng)的queue上建立Channel。
  • 發(fā)送消息。由Producer發(fā)送消息到Broker中的Exchange中。
  • 路由轉(zhuǎn)發(fā)。生產(chǎn)者Producer在發(fā)送消息時,都需要指定一個RoutingKey和Exchange,Exchange收到消息后可以看到消息中指定的RoutingKey,再根據(jù)當(dāng)前Exchange的ExchangeType,按一定的規(guī)則將消息轉(zhuǎn)發(fā)到相應(yīng)的queue中去。
  • 消息接收。Consumer會監(jiān)聽相應(yīng)的queue,一旦queue中有可以消費(fèi)的消息,queue就將消息發(fā)送給Consumer端。
  • 消息確認(rèn)。當(dāng)Consumer完成某一條消息的處理之后,需要發(fā)送一條ACK消息給對應(yīng)的Queue。Queue收到ACK信息后,才會認(rèn)為消息處理成功,并將消息從Queue中移除;如果在對應(yīng)的Channel斷開后,Queue沒有收到這條消息的ACK信息,該消息將被發(fā)送給另外的Channel。至此一個消息的發(fā)送接收流程走完了。消息的確認(rèn)機(jī)制提高了通信的可靠性。

exchange 與 Queue 的路由機(jī)制

消息中間件:RabbitMQ原理、集群、基本運(yùn)維操作、常見故障處理

exchange 將消息發(fā)送到哪一個queue是由exchange type 和bing 規(guī)則決定的,目前常用的有3種exchange,Direct exchange, Fanout exchange, Topic exchange 。Direct exchange 直接轉(zhuǎn)發(fā)路由,其實(shí)現(xiàn)原理是通過消息中的routkey,與queue 中的routkey 進(jìn)行比對,若二者匹配,則將消息發(fā)送到這個消息隊(duì)列。通常使用這個。

消息中間件:RabbitMQ原理、集群、基本運(yùn)維操作、常見故障處理

以上圖的配置為例,我們以routingKey=”error”發(fā)送消息到Exchange,則消息會路由到Queue1(amqp.gen-S9b…,這是由RabbitMQ自動生成的Queue名稱)和Queue2(amqp.gen-Agl…);如果我們以routingKey=”info”或routingKey=”warning”來發(fā)送消息,則消息只會路由到Queue2。如果我們以其他routingKey發(fā)送消息,則消息不會路由到這兩個Queue中。

Fanout exchange 復(fù)制分發(fā)路由,該路由不需要routkey,當(dāng)exchange收到消息后,將消息復(fù)制多份轉(zhuǎn)發(fā)給與自己綁定的消息隊(duì)列。

消息中間件:RabbitMQ原理、集群、基本運(yùn)維操作、常見故障處理

上圖中,生產(chǎn)者(P)發(fā)送到Exchange(X)的所有消息都會路由到圖中的兩個Queue,并最終被兩個消費(fèi)者(C1與C2)消費(fèi)。topic exchange 通配路由,是direct exchange的通配符模式,消息中的routkey可以寫成通配的模式,exchange支持“#”和“*” 的通配。收到消息后,將消息轉(zhuǎn)發(fā)給所有符合匹配表達(dá)式的queue。

 消息中間件:RabbitMQ原理、集群、基本運(yùn)維操作、常見故障處理

以上圖中的配置為例,routingKey=”quick.orange.rabbit”的消息會同時路由到Q1與Q2,routingKey=”lazy.orange.fox”的消息會路由到Q1,routingKey=”lazy.brown.fox”的消息會路由到Q2,routingKey=”lazy.pink.rabbit”的消息會路由到Q2(只會投遞給Q2一次,雖然這個routingKey與Q2的兩個bindingKey都匹配);routingKey=”quick.brown.fox”、routingKey=”orange”、routingKey=”quick.orange.male.rabbit”的消息將會被丟棄,因?yàn)樗鼈儧]有匹配任何bindingKey。

需要注意的一點(diǎn)只有queue具有 保持消息的功能,exchange不能保存消息。

headers headers類型的Exchange不依賴于routing key與binding key的匹配規(guī)則來路由消息,而是根據(jù)發(fā)送的消息內(nèi)容中的headers屬性進(jìn)行匹配。 在綁定Queue與Exchange時指定一組鍵值對;當(dāng)消息發(fā)送到Exchange時,RabbitMQ會取到該消息的headers(也是一個鍵值對的形式),對比其中的鍵值對是否完全匹配Queue與Exchange綁定時指定的鍵值對;如果完全匹配則消息會路由到該Queue,否則不會路由到該Queue。 該類型的Exchange沒有用到過(不過也應(yīng)該很有用武之地),所以不做介紹。

durability 持久化與非持久化隊(duì)列

 

消息中間件:RabbitMQ原理、集群、基本運(yùn)維操作、常見故障處理

如何識別? 如上圖,在Features字段里有一個D,就是持久化隊(duì)列,英文durable(持久的)。

持久化隊(duì)列和非持久化隊(duì)列的區(qū)別是什么? 持久化隊(duì)列會被保存在磁盤中,固定并持久的存儲,當(dāng)Rabbit服務(wù)重啟后,該隊(duì)列會保持原來的狀態(tài)在RabbitMQ中被管理,而非持久化隊(duì)列不會被保存在磁盤中,Rabbit服務(wù)重啟后隊(duì)列就會消失。

如何選擇? 如果需要隊(duì)列的完整性,數(shù)據(jù)在隊(duì)列中的保存是必須不允許丟失的,那么可以使用持久化。而當(dāng)需要獲取的信息是實(shí)時的,或者是隨機(jī)的信息,不需要信息的精確性或完整性,但是追求獲取性能,可以選擇非持久化隊(duì)列。

2、分布式集群架構(gòu)和高可用性

設(shè)計(jì)集群的目的:

  • 允許消費(fèi)者和生產(chǎn)者在RabbitMQ節(jié)點(diǎn)崩潰的情況下繼續(xù)運(yùn)行
  • 通過增加更多的節(jié)點(diǎn)來擴(kuò)展消息通信的吞吐量

集群配置方式:

RabbitMQ可以通過三種方法來部署分布式集群系統(tǒng),分別是:cluster,federation,shovel

  • cluster:

不支持跨網(wǎng)段,用于同一個網(wǎng)段內(nèi)的局域網(wǎng)

可以隨意的動態(tài)增加或者減少

節(jié)點(diǎn)之間需要運(yùn)行相同版本的RabbitMQ和Erlang。

  • federation:應(yīng)用于廣域網(wǎng),允許單臺服務(wù)器上的交換機(jī)或隊(duì)列接收發(fā)布到另一臺服務(wù)器上交換機(jī)或隊(duì)列的消息,可以是單獨(dú)機(jī)器或集群。federation隊(duì)列類似于單向點(diǎn)對點(diǎn)連接,消息會在聯(lián)盟隊(duì)列之間轉(zhuǎn)發(fā)任意次,直到被消費(fèi)者接受。通常使用federation來連接internet上的中間服務(wù)器,用作訂閱分發(fā)消息或工作隊(duì)列。
  • shovel:連接方式與federation的連接方式類似,但它工作在更低層次。可以應(yīng)用于廣域網(wǎng)。

RabbitMQ cluster 集群同步原理

 

消息中間件:RabbitMQ原理、集群、基本運(yùn)維操作、常見故障處理

上面圖中采用三個節(jié)點(diǎn)組成了一個RabbitMQ的集群,Exchange A的元數(shù)據(jù)信息在所有節(jié)點(diǎn)上是一致的,而Queue(存放消息的隊(duì)列)的完整數(shù)據(jù)則只會存在于它所創(chuàng)建的那個節(jié)點(diǎn)上。,其他節(jié)點(diǎn)只知道這個queue的metadata信息和一個指向queue的owner node的指針。RabbitMQ集群元數(shù)據(jù)的同步。

RabbitMQ集群會始終同步四種類型的內(nèi)部元數(shù)據(jù)(類似索引):

  • 隊(duì)列元數(shù)據(jù):隊(duì)列名稱和它的屬性;
  • 交換器元數(shù)據(jù):交換器名稱、類型和屬性;
  • 綁定元數(shù)據(jù):一張簡單的表格展示了如何將消息路由到隊(duì)列;
  • vhost元數(shù)據(jù):為vhost內(nèi)的隊(duì)列、交換器和綁定提供命名空間和安全屬性; 因此,當(dāng)用戶訪問其中任何一個RabbitMQ節(jié)點(diǎn)時,通過rabbitmqctl查詢到的queue/user/exchange/vhost等信息都是相同的。

為何RabbitMQ集群僅采用元數(shù)據(jù)同步的方式

一,存儲空間,如果每個集群節(jié)點(diǎn)都擁有所有Queue的完全數(shù)據(jù)拷貝,那么每個節(jié)點(diǎn)的存儲空間會非常大,集群的消息積壓能力會非常弱(無法通過集群節(jié)點(diǎn)的擴(kuò)容提高消息積壓能力); 二,性能,消息的發(fā)布者需要將消息復(fù)制到每一個集群節(jié)點(diǎn),對于持久化消息,網(wǎng)絡(luò)和磁盤同步復(fù)制的開銷都會明顯增加。

RabbitMQ cluster 集群的兩種模式

  1. 普通模式:默認(rèn)的集群模式。
  2. 鏡像模式:把需要的隊(duì)列做成鏡像隊(duì)列,存在于多個節(jié)點(diǎn),屬于RabbitMQ的HA方案。

 

消息中間件:RabbitMQ原理、集群、基本運(yùn)維操作、常見故障處理

普通模式:當(dāng)消息進(jìn)入A節(jié)點(diǎn)的Queue中后,consumer從B節(jié)點(diǎn)拉取時,RabbitMQ會臨時在A、B間進(jìn)行消息傳輸,把A中的消息實(shí)體取出并經(jīng)過B發(fā)送給consumer,所以consumer應(yīng)平均連接每一個節(jié)點(diǎn),從中取消息。該模式存在一個問題就是當(dāng)A節(jié)點(diǎn)故障后,B節(jié)點(diǎn)無法取到A節(jié)點(diǎn)中還未消費(fèi)的消息實(shí)體。如果做了隊(duì)列持久化或消息持久化,那么得等A節(jié)點(diǎn)恢復(fù),然后才可被消費(fèi),并且在A節(jié)點(diǎn)恢復(fù)之前其它節(jié)點(diǎn)不能再創(chuàng)建A節(jié)點(diǎn)已經(jīng)創(chuàng)建過的持久隊(duì)列;如果沒有持久化的話,消息就會失丟。這種模式更適合非持久化隊(duì)列,只有該隊(duì)列是非持久的,客戶端才能重新連接到集群里的其他節(jié)點(diǎn),并重新創(chuàng)建隊(duì)列。假如該隊(duì)列是持久化的,那么唯一辦法是將故障節(jié)點(diǎn)恢復(fù)起來。為什么RabbitMQ不將隊(duì)列復(fù)制到集群里每個節(jié)點(diǎn)呢?這與它的集群的設(shè)計(jì)本意相沖突,集群的設(shè)計(jì)目的就是增加更多節(jié)點(diǎn)時,能線性的增加性能(CPU、內(nèi)存)和容量(內(nèi)存、磁盤)。當(dāng)然RabbitMQ新版本集群也支持隊(duì)列復(fù)制(有個選項(xiàng)可以配置)。比如在有五個節(jié)點(diǎn)的集群里,可以指定某個隊(duì)列的內(nèi)容在2個節(jié)點(diǎn)上進(jìn)行存儲,從而在性能與高可用性之間取得一個平衡(應(yīng)該就是指鏡像模式)。

鏡像模式:其實(shí)質(zhì)和普通模式不同之處在于,消息實(shí)體會主動在鏡像節(jié)點(diǎn)間同步,而不是在consumer取數(shù)據(jù)時臨時拉取。該模式帶來的副作用也很明顯,除了降低系統(tǒng)性能外,如果鏡像隊(duì)列數(shù)量過多,加之大量的消息進(jìn)入,集群內(nèi)部的網(wǎng)絡(luò)帶寬將會被這種同步通訊大大消耗掉。所以在對可靠性要求較高的場合中適用。

節(jié)點(diǎn)類型

RAM node:內(nèi)存節(jié)點(diǎn)將所有的隊(duì)列、交換機(jī)、綁定、用戶、權(quán)限和vhost的元數(shù)據(jù)定義存儲在內(nèi)存中,好處是可以使得像交換機(jī)和隊(duì)列聲明等操作更加的快速。

Disk node:將元數(shù)據(jù)存儲在磁盤中,單節(jié)點(diǎn)系統(tǒng)只允許磁盤類型的節(jié)點(diǎn),防止重啟RabbitMQ的時候,丟失系統(tǒng)的配置信息。

消息中間件:RabbitMQ原理、集群、基本運(yùn)維操作、常見故障處理

如果是內(nèi)存結(jié)點(diǎn)這里就顯示為RAM注意:

  • RabbitMQ要求在集群中至少有一個磁盤節(jié)點(diǎn),所有其他節(jié)點(diǎn)可以是內(nèi)存節(jié)點(diǎn),當(dāng)節(jié)點(diǎn)加入或者離開集群時,必須要將該變更通知到至少一個磁盤節(jié)點(diǎn)。
  • 如果集群中唯一的一個磁盤節(jié)點(diǎn)崩潰的話,集群仍然可以保持運(yùn)行,但是無法進(jìn)行其他操作(包括創(chuàng)建隊(duì)列、交換器、綁定,添加用戶、更改權(quán)限、添加和刪除集群結(jié)點(diǎn)),直到節(jié)點(diǎn)恢復(fù)。
  • 解決方案:設(shè)置兩個磁盤節(jié)點(diǎn),至少有一個是可用的,可以保存元數(shù)據(jù)的更改。

Erlang Cookie

Erlang Cookie是保證不同節(jié)點(diǎn)可以相互通信的密鑰,要保證集群中的不同節(jié)點(diǎn)相互通信必須共享相同的Erlang Cookie。具體的目錄存放在/var/lib/rabbitmq/.erlang.cookie。

3、基本運(yùn)維操作

rabbitmq集群必要條件

綁定實(shí)體ip,即ifconfig所能查詢到的綁定到網(wǎng)卡上的ip,以下是綁定方法

  1. #編輯配置路徑 /etc/rabbitmq/rabbitmq-env.conf 
  2. NODE_IP_ADDRESS=172.16.136.133 
  3. 復(fù)制代碼 

配置域名映射到實(shí)體ip

  1. #配置文件1所在路徑 /etc/rabbitmq/rabbitmq.config (如果是集群,每臺機(jī)器都需要修改這個綁定本機(jī)實(shí)體ip) 
  2. #其中rabbit@master是創(chuàng)建集群時所配置的參數(shù),@后面的參數(shù)為主機(jī)名,示例中為master 
  3.  {rabbit, [ 
  4.  {cluster_nodes, {['rabbit@master'], disc}}, 
  5.  {cluster_partition_handling, ignore}, 
  6.  {default_user, <<"guest">>}, 
  7.  {default_pass, <<"guest">>}, 
  8.  {tcp_listen_options, [binary
  9.  {packet, raw}, 
  10.  {reuseaddr, true}, 
  11.  {backlog, 128}, 
  12.  {nodelay, true}, 
  13.  {exit_on_close, false}, 
  14.  {keepalive, true}]} 
  15.  ]}, 
  16.  {kernel, [ 
  17.  {inet_dist_listen_max, 44001}, 
  18.  {inet_dist_listen_min, 44001} 
  19.  ]} 
  20. ]. 
  21. 復(fù)制代碼 
  22. #配置文件2 所在路徑 /etc/hosts (如果是集群,每臺機(jī)器都需要修改這個綁定本機(jī)實(shí)體ip,而且hosts文件的映射不得重復(fù),如果重復(fù)linux系統(tǒng)為以最下面一條記錄為準(zhǔn)) 
  23. 172.16.136.133 master 
  24. 172.16.136.134 venus 
  25. 172.16.136.135 venus2 

啟動停止

停止

  1. #機(jī)器A 
  2. service rabbitmq-server stop 
  3. epmd -kill 
  4. #機(jī)器B 
  5. service rabbitmq-server stop 
  6. epmd -kill 
  7. #機(jī)器C 
  8. service rabbitmq-server stop 
  9. epmd -kill 

啟動

方式1

  1. #機(jī)器A 
  2. service rabbitmq-server start 
  3. #機(jī)器B 
  4. service rabbitmq-server start 
  5. #機(jī)器C 
  6. service rabbitmq-server start 

方式2

  1. rabbitmq-server -detached 

集群重啟順序

集群重啟的順序是固定的,并且是相反的。 如下所述:

啟動順序:磁盤節(jié)點(diǎn) => 內(nèi)存節(jié)點(diǎn) 關(guān)閉順序:內(nèi)存節(jié)點(diǎn) => 磁盤節(jié)點(diǎn) 最后關(guān)閉必須是磁盤節(jié)點(diǎn),不然可能回造成集群啟動失敗、數(shù)據(jù)丟失等異常情況。

重建集群

注1:此處的mq集群重建是比較快速和有效的方法,面向的是初次安裝或者可以接受mq中所存有的數(shù)據(jù)丟失的情況下,必須先有mq的.json后綴的配置文件或者有把握寫入集群中exchange、queue等配置。

按順序停止所有機(jī)器中的rabbitmq

  1. #機(jī)器A 
  2. service rabbitmq-server stop 
  3. epmd -kill 
  4. #機(jī)器B 
  5. service rabbitmq-server stop 
  6. epmd -kill 
  7. #機(jī)器C 
  8. service rabbitmq-server stop 
  9. epmd -kill 

移除rabbitmq配置記錄與存儲文件

  1. #位于 /var/lib/rabbitmq/mensia 
  2. mv /var/lib/rabbitmq/mensia /var/lib/rabbitmq/mensia.bak 

按順序啟動所有機(jī)器中的rabbitmq

  1. #機(jī)器C 
  2. service rabbitmq-server start 
  3. #機(jī)器B 
  4. service rabbitmq-server start 
  5. #機(jī)器A 
  6. service rabbitmq-server start 

停止被加入集群節(jié)點(diǎn)app

  1. 比如A、B、C三臺機(jī)器,將B和C加入到A中去,需要執(zhí)行以下命令 
  2. #機(jī)器B 
  3. rabbitmqctl stop_app 
  4. #機(jī)器C 
  5. rabbitmqctl stop_app 

建立集群

  1. 注意此處master為唯一沒有執(zhí)行rabbitmqctl stop_app的機(jī)器 
  2. #機(jī)器B 
  3. rabbitmqctl join_cluster rabbit@master 
  4. #機(jī)器C 
  5. rabbitmqctl join_cluster rabbit@master 

啟動集群

  1. #機(jī)器B 
  2. rabbitmqctl start_app 
  3. #機(jī)器C 
  4. rabbitmqctl start_app 
  5. 復(fù)制代碼 

檢查集群狀態(tài)

在任意一臺機(jī)器上執(zhí)行rabbitmqctl cluster_status命令即可檢查,輸出包含集群中的節(jié)點(diǎn)與運(yùn)行中的節(jié)點(diǎn),兼以主機(jī)名標(biāo)志

添加集群配置

創(chuàng)建用戶

例子中創(chuàng)建了兩個用戶 添加用戶add_user,設(shè)置角色set_user_tags,添加rabbitmq虛擬主機(jī)add_vhost,設(shè)置訪問權(quán)限set_permissions,以下是詳細(xì)用法

  1. 例子中創(chuàng)建了兩個用戶 添加用戶add_user,設(shè)置角色set_user_tags,添加rabbitmq虛擬主機(jī)add_vhost,設(shè)置訪問權(quán)限set_permissions,以下是詳細(xì)用法 
  2.  # 創(chuàng)建第一個用戶 
  3.  /usr/sbin/rabbitmqctl add_user 用戶名 密碼 
  4.  /usr/sbin/rabbitmqctl set_user_tags 用戶名 administrator 
  5.  /usr/sbin/rabbitmqctl set_permissions -p / 用戶名 ".*" ".*" ".*" 
  6.  # 創(chuàng)建第二個用戶 
  7.  /usr/sbin/rabbitmqctl add_user 用戶名2 密碼 
  8.  /usr/sbin/rabbitmqctl set_user_tags 用戶名2 management  
  9.  /usr/sbin/rabbitmqctl add_vhost sip_ext  
  10.  /usr/sbin/rabbitmqctl set_permissions -p sip_ext 用戶名2 '.*' '.*' '.*'  
  11. 復(fù)制代碼 
  12. 備注:RabbitMQ 虛擬主機(jī),RabbitMQ 通過虛擬主機(jī)(vhost)來分發(fā)消息。擁有自己獨(dú)立的權(quán)限控制,不同的vhost之間是隔離的,單獨(dú)的。 
  13. 權(quán)限控制的基本單位:vhost。 
  14. 用戶只能訪問與之綁定的vhost。 
  15. vhost是AMQP中唯一無法通過協(xié)議來創(chuàng)建的基元。只能通過rabbitmqctl工具來創(chuàng)建。  

打開15672網(wǎng)頁管理端,訪問mq

/usr/sbin/rabbitmq-plugins enable rabbitmq_management 備注:如果發(fā)現(xiàn)命令執(zhí)行完畢沒有打開此服務(wù),15672端口沒有監(jiān)聽,則是由于沒有重啟mq導(dǎo)致的

在底部導(dǎo)入.json后綴的配置文件即可

http://localhost:4000/first-blog/rabbitmq.jpg

消息中間件:RabbitMQ原理、集群、基本運(yùn)維操作、常見故障處理

如果覆蓋了用戶需要使用以下命令修改mq用戶密碼 /usr/sbin/rabbitmqctl change_password 用戶名 密碼

修改節(jié)點(diǎn)類型

  1. rabbitmqctl stop_app 
  2. rabbitmqctl change_cluster_node_type dist 
  3. rabbitmqctl change_cluster_node_type ram 
  4. rabbitmqctl start_app 

常用命令

 

消息中間件:RabbitMQ原理、集群、基本運(yùn)維操作、常見故障處理

 

4、常見故障

集群狀態(tài)異常

  1. rabbitmqctl cluster_status檢查集群健康狀態(tài),不正常節(jié)點(diǎn)重新加入集群
  2. 分析是否節(jié)點(diǎn)掛掉,手動啟動節(jié)點(diǎn)。
  3. 保證網(wǎng)絡(luò)連通正常
  • 隊(duì)列阻塞、數(shù)據(jù)堆積
  1. 保證網(wǎng)絡(luò)連通正常
  2. 保證消費(fèi)者正常消費(fèi),消費(fèi)速度大于生產(chǎn)速度
  3. 保證服務(wù)器TCP連接限制合理

腦裂

按正確順序重啟集群

保證網(wǎng)絡(luò)連通正常

保證磁盤空間、cpu、內(nèi)存足夠

 

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2021-12-14 10:39:12

中間件ActiveMQRabbitMQ

2019-01-10 10:54:46

WASWMQ運(yùn)維

2022-02-13 23:04:28

RedisRabbitMQKafka

2019-11-12 09:53:32

Linux 系統(tǒng) 數(shù)據(jù)

2011-04-22 15:57:38

故障顯示器

2023-06-29 10:10:06

Rocket MQ消息中間件

2023-10-24 07:50:18

消息中間件MQ

2018-03-01 19:40:44

Linux運(yùn)維常見問題

2022-05-10 09:24:44

中間件應(yīng)用方案

2018-02-01 10:19:22

中間件服務(wù)器系統(tǒng)

2020-10-10 08:04:09

RabbitMQ消息中間件

2011-12-15 01:10:03

ibmdw

2015-08-11 11:16:36

淘寶中間件

2022-11-02 10:08:46

分布式高并發(fā)消息中間件

2019-01-04 09:59:14

KafkaRabbitMQMQ

2021-04-22 06:13:41

Express 中間件原理中間件函數(shù)

2022-08-09 08:31:29

RocketMQ消息中間件

2023-05-08 08:09:26

路由元信息謂詞

2018-06-27 06:33:44

2024-06-11 00:00:05

RabbitMQAMQP協(xié)議
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

一本久久a久久精品亚洲| 久久久久久99精品| 97视频免费看| 日韩视频在线观看免费视频| 精品一区二区三区在线观看视频| 亚洲国产综合人成综合网站| 日韩av电影免费观看| 国产jzjzjz丝袜老师水多| 亚洲一区二区三区高清| 色综合伊人色综合网站| 亚洲一级Av无码毛片久久精品| 日本成人三级电影| 一片黄亚洲嫩模| 日韩经典在线视频| www.四虎在线观看| 日韩成人精品在线观看| 午夜精品久久久久久久99黑人| 免费黄色激情视频| 一区二区三区视频免费观看| 日韩欧美一级精品久久| 色一情一乱一伦一区二区三区日本| 色yeye免费人成网站在线观看| 久久中文字幕电影| 国产麻豆日韩| 国产人妖一区二区| 免费观看日韩av| 欧洲亚洲在线视频| 日本在线视频免费| 欧美激情aⅴ一区二区三区| 国产一区二区三区免费视频| 第四色在线视频| 国产在线视频欧美一区| 欧美精品三级在线观看| 成人黄色av片| 美洲精品一卡2卡三卡4卡四卡| 亚洲欧洲精品天堂一级| 亚洲春色在线| 国产高清在线| 国产亚洲欧美在线| 欧美一级日本a级v片| 日本福利片高清在线观看| 成人av在线网| 国偷自产av一区二区三区小尤奈| 国产黄色一级大片| 国产一区二区三区综合| 成人精品一区二区三区电影免费 | 亚洲欧美日本国产专区一区| 欧美激情视频网站| www.youjizz.com亚洲| 欧美涩涩网站| 欧美激情一级欧美精品| 久久精品www| 精品69视频一区二区三区Q| 欧美激情视频一区| 日本三级网站在线观看| 夜久久久久久| 欧美孕妇孕交黑巨大网站| 天天干天天干天天干天天| 亚洲欧美日韩国产| 国产z一区二区三区| 免费一级a毛片| 奇米精品一区二区三区在线观看一 | 久久久久久久国产精品毛片| 伊人久久综合| 国产91av在线| 亚洲一区中文字幕在线| 韩国一区二区视频| 国产高清一区视频| 日本韩国精品一区二区| 中国色在线观看另类| 综合操久久久| 成人性生交大片免费看网站| 欧美色播在线播放| 中文字幕第100页| 精品中文字幕一区二区三区| 精品电影一区二区三区| 18禁裸乳无遮挡啪啪无码免费| 国内黄色精品| 久久国产精品久久久| 国产精品第108页| 久久天堂成人| 91传媒视频在线观看| 天天干天天插天天操| 欧美极品美女视频| 真人做人试看60分钟免费| 黄色在线观看视频网站| 色老头久久综合| 久国产精品视频| 日韩mv欧美mv国产网站| 色婷婷综合久久久久| 国产精品99精品| 免费高清在线视频一区·| 99porn视频在线| 黄色电影免费在线看| 亚洲精品视频免费看| 久久综合久久色| 中文字幕一区图| 在线电影av不卡网址| 国产亚洲色婷婷久久99精品| 日本伊人色综合网| 狠狠综合久久av| 国产福利视频在线| 懂色aⅴ精品一区二区三区蜜月| 不卡中文字幕在线观看| 女人av一区| 久久全国免费视频| 一区二区www| 成人av资源在线观看| 一区二区三区我不卡| 自拍在线观看| 亚洲精品一线二线三线| 欧美另类videoxo高潮| 久久综合狠狠| 激情视频一区二区| 日本三级在线观看网站| 欧美老肥妇做.爰bbww| 久久精品成人av| 亚洲三级色网| 99精品欧美一区二区三区| 男人影院在线观看| 在线观看91视频| 精品人妻少妇嫩草av无码| 亚洲黑丝一区二区| 成人三级在线| 在线观看小视频| 欧美精品xxxxbbbb| 综合 欧美 亚洲日本| 日韩精品亚洲专区| 女同一区二区| 亚洲优女在线| 日韩精品在线视频观看| aaa人片在线| 成人精品鲁一区一区二区| 日韩a级黄色片| 欧美经典一区| 欧美大片免费看| 国产成人三级在线播放| 自拍偷自拍亚洲精品播放| 久久久久久久久久久久久久久国产 | 亚洲精品久久久久久久久| 国产精品第56页| 成人免费毛片app| 你真棒插曲来救救我在线观看| 一区二区三区在线免费看 | 欧美高清xxx| 自拍偷拍亚洲在线| 夜夜嗨av禁果av粉嫩avhd| 中文av一区二区| 又色又爽又黄视频| 亚洲成av人片乱码色午夜| 91亚洲午夜在线| 性xxxfreexxxx性欧美| 日韩欧美一区二区在线视频| 免看一级a毛片一片成人不卡| 国产成人高清在线| 一卡二卡三卡视频| 欧美久久精品| 国产精品av电影| yw193.com尤物在线| 欧美日韩不卡一区二区| 中日韩一级黄色片| 粉嫩一区二区三区在线看| 欧美在线一区视频| 一区二区三区日本久久久| 国产精品美腿一区在线看| 蜜桃视频网站在线| 日韩精品一区二区三区蜜臀| 亚洲精品视频在线观看免费视频| 久久在线免费观看| 天堂av8在线| 国产欧美欧美| 日韩欧美在线一区二区| 亚洲精品v亚洲精品v日韩精品| 久久久久亚洲精品成人网小说| 欧洲综合视频| 欧美剧情片在线观看| 日韩精品一区三区| 国产午夜亚洲精品理论片色戒 | 在线免费观看av网址| 国产精品免费av| 国产免费a级片| 视频在线在亚洲| 欧美精品久久96人妻无码| 国偷自产av一区二区三区| 国产精品免费视频久久久| 影音先锋在线视频| 亚洲欧美中文日韩v在线观看| 91在线公开视频| 香蕉久久一区二区不卡无毒影院| 国产一区二区三区四区五区六区 | 色呦呦在线看| 亚洲偷欧美偷国内偷| www.xxxx国产| 欧美吻胸吃奶大尺度电影| 久久久久久久久久91| 国产欧美一区视频| 韩国三级hd两男一女| 激情图区综合网| 青青在线视频观看| 亚洲黄色高清| 爱爱爱视频网站| 久久99国产精品视频| 国产99在线免费| 你懂得影院夜精品a| 欧美激情第一页xxx| 在线观看a视频| 亚洲欧美国产va在线影院| 国产不卡av在线播放| 欧美午夜片在线观看| 日产精品久久久久| 亚洲蜜桃精久久久久久久| 香蕉视频久久久| 91免费视频网| 国产乱淫av片| 国产乱人伦偷精品视频免下载| 狠狠热免费视频| 国产日韩一区二区三区在线播放| 激情五月婷婷六月| 亚洲人metart人体| 尤物一区二区三区| 欧洲杯半决赛直播| 欧洲一区二区在线观看| 亚洲动漫在线观看| 国产一区二区自拍| y111111国产精品久久久| 91在线观看免费高清完整版在线观看| 日本精品网站| 国产精品国产三级国产aⅴ浪潮| 自拍网站在线观看| 55夜色66夜色国产精品视频| 蜜桃视频m3u8在线观看| 久久理论片午夜琪琪电影网| 欧美日韩在线视频免费观看| 欧美插天视频在线播放| 成人日批视频| 久久伊人精品天天| caoporn免费在线| 伦伦影院午夜日韩欧美限制| a天堂中文在线| 夜夜嗨av色一区二区不卡| 国产在线一在线二| 国产一区二区三区视频免费| 国产午夜精品一区理论片| 国产一区二区三区三区在线观看 | 亚洲一二三区av| 日韩va欧美va亚洲va久久| www.超碰com| 久久精品国产**网站演员| 日韩欧美国产片| 国产麻豆视频一区二区| 91精品国产高清91久久久久久 | 亚洲www啪成人一区二区| 国产精品情侣自拍| 91精品麻豆| 亚洲综合中文字幕68页| 成人高潮视频| 精品无码久久久久久久动漫| 精品中文字幕一区二区三区av| 日本在线观看一区二区三区| 欧美顶级大胆免费视频| 精品日韩在线播放| 亚洲国产精品一区制服丝袜| 欧美亚洲国产成人| 免费人成精品欧美精品| 捷克做爰xxxⅹ性视频| 成人免费视频网站在线观看| 精品无码一区二区三区| 国产精品丝袜久久久久久app| 国产午夜手机精彩视频| 亚洲成av人影院| 加勒比在线一区| 欧美一区二区三区公司| 男人天堂av网| 中文一区二区视频| 日韩专区av| 国产精欧美一区二区三区| 91成人app| 国内一区二区在线视频观看| 日韩精品一区二区三区免费观看| 看全色黄大色大片| 亚洲尤物在线| 精品国产鲁一鲁一区二区三区| 91在线看国产| 登山的目的在线| 欧美日韩国产专区| 国产精品人妻一区二区三区| 亚洲国产另类 国产精品国产免费| 国产三级视频在线播放线观看| 久久亚洲欧美日韩精品专区| 中文字幕色婷婷在线视频| 92福利视频午夜1000合集在线观看| 老牛国内精品亚洲成av人片| 综合网五月天| 欧美亚洲一区| 免费在线观看日韩av| 中文字幕高清一区| 日韩在线视频免费播放| 91精品国产91综合久久蜜臀| 国内av一区二区三区| 欧美激情视频网址| 亚洲在线资源| 日韩欧美一区二区三区四区五区| 亚洲国产高清一区| 91精品视频国产| 中文乱码免费一区二区| 日日摸天天添天天添破| 日韩欧美美女一区二区三区| 2021av在线| 日本精品视频在线播放| 99久久人爽人人添人人澡| 在线观看亚洲视频啊啊啊啊| 久久久www| 国产男女猛烈无遮挡a片漫画| 一个色综合av| 国产视频一二三四区| 这里只有精品在线播放| 久久青青视频| 久久精品午夜一区二区福利| 精品1区2区3区4区| 永久看看免费大片| 日韩毛片一二三区| 一级黄色免费片| 中日韩午夜理伦电影免费| 天天免费亚洲黑人免费| 你懂的视频在线一区二区| 亚洲区国产区| 中文视频在线观看| 亚洲第一久久影院| 亚洲欧美另类日韩| 欧美精品18videos性欧| 91精品国产自产精品男人的天堂| 99热一区二区三区| 国内精品伊人久久久久影院对白| 天堂av免费在线| 欧美日韩一区不卡| 视频免费一区| 91精品视频免费| 亚洲电影影音先锋| www.色就是色.com| 亚洲美腿欧美偷拍| 亚洲第一页视频| 久久久亚洲成人| 久久porn| 久久久久狠狠高潮亚洲精品| 久久久久久久久一| 最好看的日本字幕mv视频大全| 一区二区三区视频免费| www.26天天久久天堂| 一本二本三本亚洲码| 国产乱理伦片在线观看夜一区 | 韩国久久久久| 精品1卡二卡三卡四卡老狼| 午夜一区二区三区在线观看| 亚洲欧洲成人在线| 日本亚洲欧洲色α| 久久人人99| 少妇愉情理伦片bd| 亚洲国产成人va在线观看天堂| 五十路在线观看| 日韩女在线观看| 99精品视频在线| 乳色吐息在线观看| 欧美色道久久88综合亚洲精品| 成人免费在线电影| 亚洲在线第一页| 亚洲精品看片| 午夜影院黄色片| 日韩亚洲欧美综合| 欧亚av在线| 一区二区三区av| 成人午夜大片免费观看| 中文字幕手机在线视频| 久久久99久久精品女同性| 丁香五月缴情综合网| 久久综合伊人77777麻豆最新章节| 自拍偷拍欧美精品| 色中色在线视频| 成人h片在线播放免费网站| 精品91在线| 久久久免费看片| 亚洲成人教育av| 高清亚洲高清| 久久久久久www| 中文一区二区完整视频在线观看| 精品国产乱码久久久久久蜜臀网站| 欧美一级成年大片在线观看| 天天综合久久| 男女黄床上色视频| 欧美一级欧美一级在线播放| 一区二区三区四区日本视频| 男同互操gay射视频在线看| 久久久亚洲欧洲日产国码αv| 午夜免费福利视频| 国产精品久久久av| 99视频一区| www.色小姐com| 一本色道久久综合亚洲精品小说| 成人av激情人伦小说| 中文字幕视频三区| 色欧美88888久久久久久影院|