天天看點

RabbitMQ實戰(五) - 叢集架構1 大綱2 RabbitMQ叢集架構模式3 RabbitMQ叢集鏡像隊列的建構4 負載均衡基礎元件 - HaProxy

1 大綱

  • RabbitMQ叢集架構模式
  • 建構高可靠的RabbitMQ叢集
  • 叢集與運維
  • 進階插件

2 RabbitMQ叢集架構模式

2.1 主備模式(Warren)

實作RabbitMQ的高可用叢集,一般在并發和資料量不高的情況下,這種模型非常的好用且簡單.

主備模式:所謂的rabbitmq另外一種模式就是warren(兔子窩),就是一個主/備方案(主節點若當機,從節點提供服務而已,和activemq利用zookeeper做主/備一樣)

RabbitMQ實戰(五) - 叢集架構1 大綱2 RabbitMQ叢集架構模式3 RabbitMQ叢集鏡像隊列的建構4 負載均衡基礎元件 - HaProxy

HaProxy配置

listen rabbitmq_cluster
  bind 0.0.0.0:5672 
  mode tcp  #配置TCP模式
  balance roundrobin #簡單的輪詢
  server bhz76 192.168.11.12:5672 check inter 5000 rise 2 fall 2  #主節點
  server bhz77 192.168.11.13:5672 backup check inter 5000 rise 2 fall 3 #備用節點
      

#inter 表示每隔5秒對叢集做健康檢查

2次正确證明伺服器可用,2次失敗證明伺服器不可用,并且配置主備機制

2.2 遠端模式(太複雜,不推薦)

遠端模式:遠距離通信和複制,Shovel就是我們可以把消息進行不同資料中心的複制工作,可以跨地域的讓兩個MQ叢集互聯.

  • 架構模型
  • RabbitMQ實戰(五) - 叢集架構1 大綱2 RabbitMQ叢集架構模式3 RabbitMQ叢集鏡像隊列的建構4 負載均衡基礎元件 - HaProxy

在使用了shovel插件後,模型變成了

近端同步确認

遠端異步确認方式

,大大提高了訂單确認速度,還能保證可靠性。

  • Shovel叢集的拓撲圖
  • RabbitMQ實戰(五) - 叢集架構1 大綱2 RabbitMQ叢集架構模式3 RabbitMQ叢集鏡像隊列的建構4 負載均衡基礎元件 - HaProxy

使用流程

  • Shovel叢集配置,首先啟動rabbitmq插件
rabbitmq-plugins enable amqp_client
rabbitmq-plugins enable rabbitmq_shovel
      
  • 建立

    rabbitmq.conf

    檔案
touch  /etc/rabbitmq/rabbitmq.config
      
  • 添加配置項

    rabbitmq.config

  • 最後我們需要資源伺服器和目的伺服器都使用相同的配置檔案(rabbitmq.config)
  • RabbitMQ實戰(五) - 叢集架構1 大綱2 RabbitMQ叢集架構模式3 RabbitMQ叢集鏡像隊列的建構4 負載均衡基礎元件 - HaProxy

2.3 鏡像模式(推薦)

叢集模式,保證資料百分百不丢失。

叢集實作簡單,網際網路都會建構該鏡像叢集模式。

Mirror鏡像隊列,為了保證RabbitMQ資料的高可靠的解決方案,主要為了實作資料的同步,一般2-3個節點實作資料同步(對于100%資料可靠性解決方案一般是3個節點)

叢集架構圖

RabbitMQ實戰(五) - 叢集架構1 大綱2 RabbitMQ叢集架構模式3 RabbitMQ叢集鏡像隊列的建構4 負載均衡基礎元件 - HaProxy

2.5 多活模式(Federation)

也是實作異地資料複制的主流模式,因為Shovel模式配置較複雜,一般異地叢集都使用雙活或多活模式實作。

需要依賴RabbitMQ的federation插件,可實作繼續的可靠AMQP資料通信,多活模式在實際配置與應用非常的簡單。

RabbitMQ部署架構采用雙中心模式(多中心),那麼在兩套(或多套)資料中心中各部署一套RabbitMQ叢集套)資料中心中各部署一套RabbitMQ叢集,各中心的RabbitMQ服務除了需要為業務提供正常的消息服務外,中心之間還需要實作部分隊列消息共享。

多活叢集架構

RabbitMQ實戰(五) - 叢集架構1 大綱2 RabbitMQ叢集架構模式3 RabbitMQ叢集鏡像隊列的建構4 負載均衡基礎元件 - HaProxy

Federation插件

一個不需要建構Cluster,而在Brokers間傳輸消息的高性能插件。

可在Brokers或Cluster間傳輸消息,連接配接雙方可使用不同的users/vistual hosts/RabbitMQ。

使用AMQP通信協定,可接收不連續的傳輸

RabbitMQ實戰(五) - 叢集架構1 大綱2 RabbitMQ叢集架構模式3 RabbitMQ叢集鏡像隊列的建構4 負載均衡基礎元件 - HaProxy

Federation Exchanges

可以看成Downstream從Upstream主動拉取消息,但并不是拉取所有消息,必須是在Downstream上已經明确定義Bindings關系的Exchange,也就是有實際的實體Queue來接收消息,才會從Upstream拉取消息到Downstream。

使用AMQP協定實施代理間通信,Downstream會将綁定關系組合在一起,綁定/解綁指令将會發送到Upstream交換機。是以,FederationExchange隻接收具有訂閱的消息。

3 RabbitMQ叢集鏡像隊列的建構

4 負載均衡基礎元件 - HaProxy

4.1 簡介

HAProxy是一款提供高可用性、負載均衡以及基于TCP (第四層)和HTTP (第七層)應用的代理軟體,支援虛拟主機,它是免費、快速并且可靠的一種解決方案。HAProxy特别适用于 那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運作在時下的硬體上,完全可以支援數以萬計的并發連接配接。并且它的運作模式使得它可以很簡單安全的整合進您目前的架構中同時可以保護你的web伺服器不被暴露到網絡上

4.2 特點

HAProxy借助于OS,上幾種常見的技術來實作性能的最大化

  • 單程序、事件驅動模型顯著降低了上下文切換的開銷及記憶體占用
  • 在任何可用的情況下,單緩沖(single buffering)機制能以不複制任何資料的方式完成讀寫操作,這會節約大量的CPU時鐘周期及記憶體帶寬
  • 借助于Linux 2.6 (>= 2.6.27.19) 上的splice()系統調用,HAProxy可以實作零複制轉發(Zero-copy forwarding),在Linux 3.5及以上的OS中還可以實作零複制啟動(zero-starting)
  • 記憶體配置設定器在固定大小的記憶體池中可實作即時記憶體配置設定,這能夠顯著減少建立一個會話的時長
  • 樹型存儲:側重于使用作者多年前開發的彈性二叉樹, 實作了以O(log(N))的低開銷來保持計時器指令、保持運作隊列指令及管理輪詢及最少連接配接隊列

參考