RabbitMQ 的4種集群架構(gòu)

1. 主備模式

????也稱為 Warren (兔子窩) 模式。實(shí)現(xiàn) rabbitMQ 的高可用集群,一般在并發(fā)和數(shù)據(jù)量不高的情況下,這種模式非常的好用且簡(jiǎn)單。

????也就是一個(gè)主/備方案,主節(jié)點(diǎn)提供讀寫,備用節(jié)點(diǎn)不提供讀寫。如果主節(jié)點(diǎn)掛了,就切換到備用節(jié)點(diǎn),原來(lái)的備用節(jié)點(diǎn)升級(jí)為主節(jié)點(diǎn)提供讀寫服務(wù),當(dāng)原來(lái)的主節(jié)點(diǎn)恢復(fù)運(yùn)行后,原來(lái)的主節(jié)點(diǎn)就變成備用節(jié)點(diǎn),和 activeMQ 利用 zookeeper 做主/備一樣,也可以一主多備。


HaProxy 配置:

listen rabbitmq_cluster

bind 0.0.0.0:567? # 配置 tcp 模式

mode tcp? # 簡(jiǎn)單的輪詢

balance roundrobin? # 主節(jié)點(diǎn)?roundrobin? 隨機(jī)

server 你的76機(jī)器 hostname? 192.168.11.76:5672 check inter 5000 rise 2 fall 2

server 你的77機(jī)器 hostname? 192.168.11.77:5672 backup check inter 5000 rise 2 fall 2? # 備用節(jié)點(diǎn)

????注意了,上面的 rabbitMQ 集群節(jié)點(diǎn)配置 # inter 每隔 5 秒對(duì) mq 集群做健康檢查, 2 次正確證明服務(wù)可用,2 次失敗證明服務(wù)器不可用,并且配置主備機(jī)制

2. 遠(yuǎn)程模式

????遠(yuǎn)程模式可以實(shí)現(xiàn)雙活的一種模式,簡(jiǎn)稱 shovel 模式,所謂的 shovel 就是把消息進(jìn)行不同數(shù)據(jù)中心的復(fù)制工作,可以跨地域的讓兩個(gè) MQ 集群互聯(lián),遠(yuǎn)距離通信和復(fù)制。

? ? Shovel 就是我們可以把消息進(jìn)行數(shù)據(jù)中心的復(fù)制工作,我們可以跨地域的讓兩個(gè) MQ 集群互聯(lián)。

遠(yuǎn)程模式

如圖所示,有兩個(gè)異地的 MQ 集群(可以是更多的集群),當(dāng)用戶在地區(qū) 1 這里下單了,系統(tǒng)發(fā)消息到 1 區(qū)的 MQ 服務(wù)器,發(fā)現(xiàn) MQ 服務(wù)已超過(guò)設(shè)定的閾值,負(fù)載過(guò)高,這條消息就會(huì)被轉(zhuǎn)到 地區(qū) 2 的 MQ 服務(wù)器上,由 2 區(qū)的去執(zhí)行后面的業(yè)務(wù)邏輯,相當(dāng)于分?jǐn)偽覀兊姆?wù)壓力。

? ? 在使用了 shovel 插件后,模型變成了近端同步確認(rèn),遠(yuǎn)端異步確認(rèn)的方式,大大提高了訂單確認(rèn)速度,并且還能保證可靠性。

shovel 模式拓?fù)鋱D

? ? 如上圖所示,當(dāng)我們的消息到達(dá) exchange,它會(huì)判斷當(dāng)前的負(fù)載情況以及設(shè)定的閾值,如果負(fù)載不高就把消息放到我們正常的 warehouse_goleta 隊(duì)列中,如果負(fù)載過(guò)高了,就會(huì)放到 backup_orders 隊(duì)列中。backup_orders 隊(duì)列通過(guò) shovel 插件與另外的 MQ 集群進(jìn)行同步數(shù)據(jù),把消息發(fā)到第二個(gè) MQ 集群上。

? ? 這是 rabbitMQ 比較早期的架構(gòu)模型了,現(xiàn)在很少使用了。

shovel 集群的配置,首先啟動(dòng) rabbitmq 插件,命令如下:

????rabbitmq-plugins enable amqp_client

????rabbitmq-plugins enable? rabbitmq_shovel

????在 /etc/rabbitmq/ 目錄下創(chuàng)建 rabbitmq.config 文件。注意,我們?cè)捶?wù)器和目的地服務(wù)器都使用這個(gè)相同的配置文件。

????具體配置如下

3. 鏡像模式

????非常經(jīng)典的 mirror 鏡像模式,保證 100% 數(shù)據(jù)不丟失。在實(shí)際工作中也是用得最多的,并且實(shí)現(xiàn)非常的簡(jiǎn)單,一般互聯(lián)網(wǎng)大廠都會(huì)構(gòu)建這種鏡像集群模式。

????mirror 鏡像隊(duì)列,目的是為了保證 rabbitMQ 數(shù)據(jù)的高可靠性解決方案,主要就是實(shí)現(xiàn)數(shù)據(jù)的同步,一般來(lái)講是 2 - 3 個(gè)節(jié)點(diǎn)實(shí)現(xiàn)數(shù)據(jù)同步。對(duì)于 100% 數(shù)據(jù)可靠性解決方案,一般是采用 3 個(gè)節(jié)點(diǎn)。

????集群架構(gòu)如下

?mirror 鏡像隊(duì)列

????如上圖所示,用 KeepAlived 做了 HA-Proxy 的高可用,然后有 3 個(gè)節(jié)點(diǎn)的 MQ 服務(wù),消息發(fā)送到主節(jié)點(diǎn)上,主節(jié)點(diǎn)通過(guò) mirror 隊(duì)列把數(shù)據(jù)同步到其他的 MQ 節(jié)點(diǎn),這樣來(lái)實(shí)現(xiàn)其高可靠。

4. 多活模式

????也是實(shí)現(xiàn)異地?cái)?shù)據(jù)復(fù)制的主流模式,因?yàn)?shovel 模式配置比較復(fù)雜,所以一般來(lái)說(shuō),實(shí)現(xiàn)異地集群的都是采用這種雙活 或者 多活模型來(lái)實(shí)現(xiàn)的。這種模式需要依賴 rabbitMQ 的 federation 插件,可以實(shí)現(xiàn)持續(xù)的,可靠的 AMQP 數(shù)據(jù)通信,多活模式在實(shí)際配置與應(yīng)用非常的簡(jiǎn)單。

????rabbitMQ 部署架構(gòu)采用雙中心模式(多中心),那么在兩套(或多套)數(shù)據(jù)中心各部署一套 rabbitMQ 集群,各中心的rabbitMQ 服務(wù)除了需要為業(yè)務(wù)提供正常的消息服務(wù)外,中心之間還需要實(shí)現(xiàn)部分隊(duì)列消息共享。

多活集群架構(gòu)如下:


????federation 插件是一個(gè)不需要構(gòu)建 cluster ,而在 brokers 之間傳輸消息的高性能插件,federation 插件可以在 brokers 或者 cluster 之間傳輸消息,連接的雙方可以使用不同的 users 和 virtual hosts,雙方也可以使用不同版本的 rabbitMQ 和 erlang。federation 插件使用 AMQP 協(xié)議通信,可以接受不連續(xù)的傳輸。federation 不是建立在集群上的,而是建立在單個(gè)節(jié)點(diǎn)上的,如圖上黃色的 rabbit node 3 可以與綠色的 node1、node2、node3 中的任意一個(gè)利用 federation 插件進(jìn)行數(shù)據(jù)同步。


? ? 如上圖所示,federation exchanges 可以看成 downstream 從 upstream 主動(dòng)拉取消息,但是并不是拉取所有消息,必須是在 downstream 上已經(jīng)明確定義 Bingdings 關(guān)系的 exchange,也就是有實(shí)際的物理 queue 來(lái)接收消息,才會(huì)從 upstream 拉取消息到 downstream 。

????它使用 AMQP 協(xié)議實(shí)現(xiàn)代理間通信,downstream 會(huì)將綁定關(guān)系組合在一起,綁定/解綁命令將發(fā)送到 upstream 交換機(jī)。因此,federation exchange 只接收具有訂閱的消息。

?著作權(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),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 了解RabbitMQ集群架構(gòu) 主備模式 實(shí)現(xiàn)RabbitMQ的高可用集群,一般在并發(fā)和數(shù)據(jù)量不高的情況下,這種模式...
    匆匆歲月閱讀 19,342評(píng)論 1 24
  • 利用RabbitMQ集群橫向擴(kuò)展能力,均衡流量壓力,讓消息集群的秒級(jí)服務(wù)能力達(dá)到百萬(wàn),Google曾做過(guò)此類實(shí)驗(yàn);...
    有貨技術(shù)閱讀 3,620評(píng)論 0 1
  • 關(guān)于消息隊(duì)列,從前年開(kāi)始斷斷續(xù)續(xù)看了些資料,想寫很久了,但一直沒(méi)騰出空,近來(lái)分別碰到幾個(gè)朋友聊這塊的技術(shù)選型,是時(shí)...
    預(yù)流閱讀 586,573評(píng)論 51 787
  • RabbitMQ 簡(jiǎn)介 MQ 消息隊(duì)列,上承生產(chǎn)者,下接消費(fèi)者。從生產(chǎn)者側(cè)獲取消息,然后將消息轉(zhuǎn)發(fā)給消費(fèi)者。由此可...
    2205閱讀 3,651評(píng)論 1 11
  • 狗娃今年四十有三,這不過(guò)完春節(jié),他只身從農(nóng)村來(lái)到城市,組建了一支屬于自己的裝修隊(duì)。他用花了200塊買來(lái)的一個(gè)二手舊...
    山風(fēng)小語(yǔ)閱讀 603評(píng)論 2 5

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