rabbitmq集群方式說明
搭建集群的目的有兩個:
1、高可用,在某些節點故障情況下,能夠繼續提供服務
2、橫向擴充套件,可以通過增加集群節點,提高處理能力。
1、單節點(這種部署方式不是集群)
2、普通集群
3、映象集群
單節點不用多說,這裡重點說一下普通集群和映象集群。
預設的集群模式,假設兩個節點(rabbit01、rabbit02)。對於queue來說,訊息實體只存在於其中某乙個節點,比如rabbit01(或者rabbit02),rabbit01和rabbit02兩個節點僅有相同的元資料,即佇列的結構。
當訊息進入rabbit01節點的queue後,consumer從rabbit02節點消費時,rabbitmq會臨時在rabbit01、rabbit02間進行訊息傳輸,把a中的訊息實體取出並經過b傳送給consumer。所以consumer應盡量連線每乙個節點,從中取訊息。即對於同乙個邏輯佇列,要在多個節點建立物理queue。否則無論consumer連rabbit01或rabbit02,出口總在rabbit01,會產生瓶頸。當rabbit01節點故障後,rabbit02節點無法取到rabbit01節點中還未消費的訊息實體。
如果做了訊息持久化,那麼得等rabbit01節點恢復,然後才可被消費;如果沒有持久化的話,就會產生訊息丟失的現象。
將需要消費的佇列變為映象佇列,存在於多個節點,即元資料與訊息資料在集群各節點都存在,但訊息只限於新增訊息複製,增加節點不會將整個佇列資訊複製到新增節點。
這樣就可以實現rabbitmq的ha高可用性。作用就是訊息實體會主動在映象節點之間實現同步,而不是像普通模式那樣,在consumer消費資料時臨時讀取。缺點就是,集群內部的同步通訊會占用大量的網路頻寬。
映象佇列高可用策略
ha-mode
ha-params
功能all
空映象佇列將會在整個集群中複製。當乙個新的節點加入後,也會在這 個節點上覆制乙份。
exactly
count
映象佇列將會在集群上覆制 count 份。如果集群數量少於 count 時候,佇列會複製到所有節點上。如果大於 count 集群,有乙個節點 crash 後,新進入節點也不會做新的映象。
nodes
node name
rabbitmq可通過三種方式來部署分布式集群系統,
分別是:cluster,federation,shovel
cluster:
federation
應用於廣域網,允許單台伺服器上的交換機或佇列接收發布到另一台伺服器上交換機或佇列的訊息,可以是單獨機器或集群。federation佇列類似於單向點對點連線,訊息會在聯盟佇列之間**任意次,直到被消費者接受。通常使用federation來連線internet上的中間伺服器,用作訂閱分發訊息或工作佇列。
shovel
連線方式與federation的連線方式類似,但它工作在更低層次。可以應用於廣域網。
高可用場景通常我們採用cluster。
ram node
記憶體節點將所有的佇列、交換機、繫結、使用者、許可權和vhost的元資料定義儲存在記憶體中,好處是可以使得像交換機和佇列宣告等操作更加的快速。
disk node
將元資料儲存在磁碟中,單節點系統只允許磁碟型別的節點,防止重啟rabbitmq的時候,丟失系統的配置資訊。
erlang cookie 是保證不同節點可以相互通訊的金鑰,要保證集群中的不同節點相互通訊必須共享相同的 erlang cookie。具體的目錄存放位置以centos為例:
/var/lib/rabbitmq/.erlang.cookie
rabbitmq要求在集群中至少有乙個磁碟節點,所有其他節點可以是記憶體節點,當節點加入或者離開集群時,必須要將該變更通知到至少乙個磁碟節點。
這會帶來乙個問題:如果集群中唯一的乙個磁碟節點崩潰的話,集群仍然可以保持執行,但是無法進行其他操作(增刪改查),直到節點恢復。
解決方案:設定兩個磁碟節點,至少有乙個是可用的,可以儲存元資料的更改。
rabbitmq作為一款開源的支援分布式、高併發,有著高效能的產品,並可結合keepalived或是haproxy對應用透明服務,自動故障轉移。是訊息佇列場景乙個不錯的選擇。
RabbitMQ集群部署,host方式
docker主機 ip位址 172.19.184.202 rabbit1 rabbit1 172.19.184.201 rabbit2 rabbit2 第一步 獲取rabbitmq映象 docker pull rabbitmq management第二步 啟動mq rabbit1 172.19.18...
rabbitmq集群配置
rabbitmq是乙個輕量級的訊息服務系統,切記它只是乙個類似信件郵遞員的功能,而不是快遞,不用把它當成redis在用。一 rabbitmq軟體安裝 1.erlang安裝 安裝erlang,載入官方提供的yum源,然後直接安裝。最新版本的rabbitmq直接依賴erlang,安裝esl erlang...
Rabbitmq 建立集群
更改host 兩台主機rabbit1 192.168.1.112,rabbit2 192.168.1.113 host配置如下 rabbit1 192.168.1.112 rabbit2 192.168.1.113 同步erlang.cookie 將rabbit1 c users erlang.co...