RabbitMQ精講8:集羣架構模式-主備模式、遠程模式、多活模式、鏡像模式

目錄

RabbitMQ集羣架構模式-主備模式(Warren)--併發和數據量不高

RabbitMQ集羣架構模式-遠程模式(Shovel)--很少使用

RabbitMQ集羣架構模式-多活模式(Federation)--異地數據複製的主流模式

RabbitMQ集羣架構模式-鏡像模式(Mirror)--常用


RabbitMQ集羣架構模式-主備模式(Warren)--併發和數據量不高

RabbitMQ集羣架構模式-主備模式(Warren)
  • 實現RabbitMQ的高可用集羣,一般在併發和數據量不高的情況下,這種模式非常的好且簡單。主備模式也稱爲Warren模式
  • 主備模式:主節點提供讀寫,從節點不提供讀寫服務,只是負責提供備份服務,備份節點的主要功能是在主節點宕機時,完成自動切換 從-->主
  • 主從模式:主節點提供讀寫,從節點只讀
RabbitMQ集羣架構模式-主備模式(Warren)
  • 主備模式:所謂rabbitmq另外一種模式就是warren(兔子窩),就是一個主/備方案(主節點如果掛了,從節點提供服務而已,和activemq利用zookeeper做主/備一樣)
RabbitMQ集羣架構模式-主備模式(Warren)

備註:rabbitmq集羣節點配置 

#inter 每隔5秒對mq集羣做健康檢查,2次正確證明服務器可用,3次失敗證明服務器不可用,並且配置主備機制

RabbitMQ集羣架構模式-遠程模式(Shovel)--很少使用

RabbitMQ集羣架構模式-遠程模式(Shovel)
  • 遠程模式可以實現雙活的一種模式,簡稱 shovel [ˈʃʌvəl] 模式,所謂的 shovel 就是把消息進行不同數據中心的複製工作,可以跨地域的讓兩個 MQ 集羣互聯,遠距離通信和複製。
RabbitMQ集羣架構模式-遠程模式(Shovel)
  •  如圖所示,有兩個異地的 MQ 集羣(可以是更多的集羣),當用戶在地區 1 這裏下單了,系統發消息到 1 區的 MQ 服務器,發現 MQ 服務已超過設定的閾值,負載過高,這條消息就會被轉到 地區 2 的 MQ 服務器上,由 2 區的去執行後面的業務邏輯,相當於分攤我們的服務壓力。
  •  在使用了 shovel 插件後,模型變成了近端同步確認,遠端異步確認的方式,大大提高了訂單確認速度,並且還能保證可靠性。
shovel 模式拓撲圖

 

如上圖所示,當我們的消息到達 exchange,它會判斷當前的負載情況以及設定的閾值,如果負載不高就把消息放到我們正常的 warehouse_goleta 隊列中,如果負載過高了,就會放到 backup_orders 隊列中。backup_orders 隊列通過 shovel 插件與另外的 MQ 集羣進行同步數據,把消息發到第二個 MQ 集羣上。

這是 rabbitMQ 比較早期的架構模型了,現在很少使用了。

shovel 集羣的配置

shovel 集羣的配置,首先啓動 rabbitmq 插件,命令如下:

    rabbitmq-plugins enable amqp_client

    rabbitmq-plugins enable  rabbitmq_shovel

shovel 集羣的配置

在 /etc/rabbitmq/ 目錄下創建 rabbitmq.config 文件。

注意,我們源服務器和目的地服務器都使用這個相同的配置文件。

具體配置如下

 

shovel 集羣的配置

RabbitMQ集羣架構模式-多活模式(Federation)--異地數據複製的主流模式

RabbitMQ集羣架構模式-多活模式(Federation)

也是實現異地數據複製的主流模式,因爲 shovel 模式配置比較複雜,所以一般來說,實現異地集羣的都是採用這種雙活 或者 多活模型來實現的。這種模式需要依賴 rabbitMQ 的 federation 插件,可以實現持續的,可靠的 AMQP 數據通信,多活模式在實際配置與應用非常的簡單。

RabbitMQ集羣架構模式-多活模式(Federation)

rabbitMQ 部署架構採用雙中心模式(多中心),那麼在兩套(或多套)數據中心各部署一套 rabbitMQ 集羣,各中心的rabbitMQ 服務除了需要爲業務提供正常的消息服務外,中心之間還需要實現部分隊列消息共享。

RabbitMQ集羣架構模式-多活模式(Federation)

 

RabbitMQ集羣架構模式-多活模式(Federation)

 

federation 插件是一個不需要構建 cluster ,而在 brokers 之間傳輸消息的高性能插件,federation 插件可以在 brokers 或者 cluster 之間傳輸消息,連接的雙方可以使用不同的 users 和 virtual hosts,雙方也可以使用不同版本的 rabbitMQ 和 erlang。

federation 插件使用 AMQP 協議通信,可以接受不連續的傳輸。federation 不是建立在集羣上的,而是建立在單個節點上的,如圖上黃色的 rabbit node 3 可以與綠色的 node1、node2、node3 中的任意一個利用 federation 插件進行數據同步。

標題

 

如上圖所示,federation exchanges 可以看成 downstream 從 upstream 主動拉取消息,但是並不是拉取所有消息,必須是在 downstream 上已經明確定義 Bingdings 關係的 exchange,也就是有實際的物理 queue 來接收消息,纔會從 upstream 拉取消息到 downstream 。

它使用 AMQP 協議實現代理間通信,downstream 會將綁定關係組合在一起,綁定/解綁命令將發送到 upstream 交換機。因此,federation exchange 只接收具有訂閱的消息。

RabbitMQ集羣架構模式-鏡像模式(Mirror)--常用

RabbitMQ集羣架構模式-鏡像模式(Mirror)
  • 非常經典的 mirror 鏡像模式,保證 100% 數據不丟失。在實際工作中也是用得最多的,並且實現非常的簡單,一般互聯網大廠都會構建這種鏡像集羣模式。
  • mirror 鏡像隊列,目的是爲了保證 rabbitMQ 數據的高可靠性解決方案,主要就是實現數據的同步,一般來講是 2 - 3 個節點實現數據同步。對於 100% 數據可靠性解決方案,一般是採用 3 個節點。
RabbitMQ集羣架構模式-鏡像模式(Mirror)

 

  • 如上圖所示,用 KeepAlived 做了 HA-Proxy 的高可用,然後有 3 個節點的 MQ 服務,消息發送到主節點上,主節點通過 mirror [ˈmɪrə(r)] 隊列把數據同步到其他的 MQ 節點,這樣來實現其高可靠。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章