1. 主備模式
????也稱為 Warren (兔子窩) 模式。實現(xiàn) rabbitMQ 的高可用集群,一般在并發(fā)和數(shù)據(jù)量不高的情況下盾戴,這種模式非常的好用且簡單术健。
????也就是一個主/備方案,主節(jié)點提供讀寫裁替,備用節(jié)點不提供讀寫项玛。如果主節(jié)點掛了,就切換到備用節(jié)點弱判,原來的備用節(jié)點升級為主節(jié)點提供讀寫服務(wù)襟沮,當(dāng)原來的主節(jié)點恢復(fù)運行后,原來的主節(jié)點就變成備用節(jié)點昌腰,和 activeMQ 利用 zookeeper 做主/備一樣开伏,也可以一主多備。
HaProxy 配置:
listen rabbitmq_cluster
bind 0.0.0.0:567? # 配置 tcp 模式
mode tcp? # 簡單的輪詢
balance roundrobin? # 主節(jié)點?roundrobin? 隨機
server 你的76機器 hostname? 192.168.11.76:5672 check inter 5000 rise 2 fall 2
server 你的77機器 hostname? 192.168.11.77:5672 backup check inter 5000 rise 2 fall 2? # 備用節(jié)點
????注意了剥哑,上面的 rabbitMQ 集群節(jié)點配置 # inter 每隔 5 秒對 mq 集群做健康檢查硅则, 2 次正確證明服務(wù)可用,2 次失敗證明服務(wù)器不可用株婴,并且配置主備機制
2. 遠程模式
????遠程模式可以實現(xiàn)雙活的一種模式怎虫,簡稱 shovel 模式,所謂的 shovel 就是把消息進行不同數(shù)據(jù)中心的復(fù)制工作困介,可以跨地域的讓兩個 MQ 集群互聯(lián)大审,遠距離通信和復(fù)制。
? ? Shovel 就是我們可以把消息進行數(shù)據(jù)中心的復(fù)制工作座哩,我們可以跨地域的讓兩個 MQ 集群互聯(lián)徒扶。
如圖所示,有兩個異地的 MQ 集群(可以是更多的集群)根穷,當(dāng)用戶在地區(qū) 1 這里下單了姜骡,系統(tǒng)發(fā)消息到 1 區(qū)的 MQ 服務(wù)器导坟,發(fā)現(xiàn) MQ 服務(wù)已超過設(shè)定的閾值,負載過高圈澈,這條消息就會被轉(zhuǎn)到 地區(qū) 2 的 MQ 服務(wù)器上惫周,由 2 區(qū)的去執(zhí)行后面的業(yè)務(wù)邏輯,相當(dāng)于分?jǐn)偽覀兊姆?wù)壓力康栈。
? ? 在使用了 shovel 插件后递递,模型變成了近端同步確認(rèn),遠端異步確認(rèn)的方式啥么,大大提高了訂單確認(rèn)速度登舞,并且還能保證可靠性。
? ? 如上圖所示悬荣,當(dāng)我們的消息到達 exchange菠秒,它會判斷當(dāng)前的負載情況以及設(shè)定的閾值,如果負載不高就把消息放到我們正常的 warehouse_goleta 隊列中隅熙,如果負載過高了稽煤,就會放到 backup_orders 隊列中。backup_orders 隊列通過 shovel 插件與另外的 MQ 集群進行同步數(shù)據(jù)囚戚,把消息發(fā)到第二個 MQ 集群上酵熙。
? ? 這是 rabbitMQ 比較早期的架構(gòu)模型了,現(xiàn)在很少使用了驰坊。
shovel 集群的配置匾二,首先啟動 rabbitmq 插件,命令如下:
????rabbitmq-plugins enable amqp_client
????rabbitmq-plugins enable? rabbitmq_shovel
????在 /etc/rabbitmq/ 目錄下創(chuàng)建 rabbitmq.config 文件拳芙。注意察藐,我們源服務(wù)器和目的地服務(wù)器都使用這個相同的配置文件。
????具體配置如下
3. 鏡像模式
????非常經(jīng)典的 mirror 鏡像模式舟扎,保證 100% 數(shù)據(jù)不丟失分飞。在實際工作中也是用得最多的,并且實現(xiàn)非常的簡單睹限,一般互聯(lián)網(wǎng)大廠都會構(gòu)建這種鏡像集群模式譬猫。
????mirror 鏡像隊列,目的是為了保證 rabbitMQ 數(shù)據(jù)的高可靠性解決方案羡疗,主要就是實現(xiàn)數(shù)據(jù)的同步染服,一般來講是 2 - 3 個節(jié)點實現(xiàn)數(shù)據(jù)同步。對于 100% 數(shù)據(jù)可靠性解決方案叨恨,一般是采用 3 個節(jié)點柳刮。
????集群架構(gòu)如下
????如上圖所示,用 KeepAlived 做了 HA-Proxy 的高可用,然后有 3 個節(jié)點的 MQ 服務(wù)秉颗,消息發(fā)送到主節(jié)點上痢毒,主節(jié)點通過 mirror 隊列把數(shù)據(jù)同步到其他的 MQ 節(jié)點,這樣來實現(xiàn)其高可靠站宗。
4. 多活模式
????也是實現(xiàn)異地數(shù)據(jù)復(fù)制的主流模式闸准,因為 shovel 模式配置比較復(fù)雜,所以一般來說梢灭,實現(xiàn)異地集群的都是采用這種雙活 或者 多活模型來實現(xiàn)的。這種模式需要依賴 rabbitMQ 的 federation 插件蒸其,可以實現(xiàn)持續(xù)的敏释,可靠的 AMQP 數(shù)據(jù)通信,多活模式在實際配置與應(yīng)用非常的簡單摸袁。
????rabbitMQ 部署架構(gòu)采用雙中心模式(多中心)钥顽,那么在兩套(或多套)數(shù)據(jù)中心各部署一套 rabbitMQ 集群,各中心的rabbitMQ 服務(wù)除了需要為業(yè)務(wù)提供正常的消息服務(wù)外靠汁,中心之間還需要實現(xiàn)部分隊列消息共享蜂大。
多活集群架構(gòu)如下:
????federation 插件是一個不需要構(gòu)建 cluster ,而在 brokers 之間傳輸消息的高性能插件蝶怔,federation 插件可以在 brokers 或者 cluster 之間傳輸消息奶浦,連接的雙方可以使用不同的 users 和 virtual hosts,雙方也可以使用不同版本的 rabbitMQ 和 erlang踢星。federation 插件使用 AMQP 協(xié)議通信澳叉,可以接受不連續(xù)的傳輸。federation 不是建立在集群上的沐悦,而是建立在單個節(jié)點上的成洗,如圖上黃色的 rabbit node 3 可以與綠色的 node1、node2藏否、node3 中的任意一個利用 federation 插件進行數(shù)據(jù)同步瓶殃。
? ? 如上圖所示,federation exchanges 可以看成 downstream 從 upstream 主動拉取消息副签,但是并不是拉取所有消息遥椿,必須是在 downstream 上已經(jīng)明確定義 Bingdings 關(guān)系的 exchange,也就是有實際的物理 queue 來接收消息继薛,才會從 upstream 拉取消息到 downstream 修壕。
????它使用 AMQP 協(xié)議實現(xiàn)代理間通信,downstream 會將綁定關(guān)系組合在一起遏考,綁定/解綁命令將發(fā)送到 upstream 交換機慈鸠。因此,federation exchange 只接收具有訂閱的消息。