ActiveMQ(八)_多集群的負載均衡


 
 
 
                                                                  圖一
    圖一說明:
   1、集群一包含3個隊列:Amq1、 Amq2、 Amq3;集群二包含2個隊列:B mq1、B mq2
   2、生產者一生產的消息可以同時發送到群集1、集群2,生產者二也一樣
   3、消費者一可以同時從集群1、集群2消費消息,消費者二也一樣
   4、某一個集群掛了,生產者和消費者可以不間斷使用其它集群發送,消費消息
 
一、本文目的
        本介紹多個集群的搭建和使用,並通過負載均衡方式使用同一生產者往多個集群發送消息或使用同一消費者從多個集群消費消息。
         
二、概念說明
         1、多個集群
                圖一中,集群1包含三個activemq,集群2包含2個activemq,兩個集群間數據可以共用
          2、負載均衡
                圖一中,生產者1發送的消息可根據集群的負載分別發送到集群1或集群2,當其中一個集群掛掉時,生產者1仍然會向集群2發送消息
                圖一中,消費者1,消費者2都可以從集群1,集群2中消費消息,當其中一個集群掛掉時,消費者仍然能從另外一個集群消息消息
          3、集群間的通訊:使用 networkConnector配置
 
 
三、Activemq集群的搭建
      1、單個集群的搭建參考: http://www.cnblogs.com/gossip/p/5977489.html
            注意:集群1和集群2中broker的name不能一樣,zkPath不能一樣
      2、本文中主要搭建2個集群,集群1包含3個activemq、集群2包含2個activemq
IP:192.168.146.129
集群A 控制台 服務接口 集群通訊接口
Amq1 8161 51511 61601
Amq2 8162 51512 61602
Amq3 8163 51513 61603
 
 
四、Activemq集群之間通訊
     Activemq集群搭建有多個方法,本文主要是通過配置networkConnectors實現,該配置放在<broker>節點下,原理為集群1配置連接集群2的所有activemq,反之亦然。配置如下:
     這也是最大的缺點,擴展性比較差

     1、集群1的每個activemq配置如下:(集群1的url包含集群2所有的隊列信息,端口為隊列的服務端口)

<networkConnectors>

  <networkConnector uri="static:(tcp://192.168.146.130:51511,tcp://192.168.1.101:51512)"/>

</networkConnectors>

   
     2、集群2的每個activemq配置如下: (集群2的url包含集群1所有的隊列信息,端口為隊列的服務端口)

<networkConnectors> <networkConnector uri="static:(tcp://192.168.146.129:51511,tcp://192.168.146.129:51512,tcp://192.168.146.129:51513)"/>

</networkConnectors>

 

五、消息生產者向多個集群發送消息

本例使用的是點對點消息隊列的demo,使用方法請參考:

http://www.cnblogs.com/gossip/p/5970090.html

 

需要注意的幾點:
1、各個集群只有Master節點的控制台才能使用
2、ActiveMQConnectionFactory的brokerURL必須包含所有集群隊列節點的url,包括集群1和集群2,之前以為只需要包含某一個集群的url,搞了半天發現沒效果

 

測試集群的高可用性:

1、集群1和集群2都注冊到了ZooKeeper,都有各自的Master節點

 

2、兩個集群中都只有Master節點的管控台才可用(下圖為集群中Master隊列收到的消息)

 

3、消息隨機送到不同集群的Master隊列中

 

4、手動停止集群2的Master隊列,生產者卡頓了一下后繼續往集群1發送消息,中間的消息並沒有中斷

 

5、重新啟動集群2的Master隊列后,生產者又重新向集群2的Master隊列發送消息

 

六、消費者從多個集群消費消息

1、只有1個消費者時,隨機從兩個集群中消費消息

 

2、啟動兩個不同的消費者,他們都同時從集群1、集群2的消費消息。停止其中一個消費者后不影響另外一個消費者

 

3、關閉集群2的一個隊列后(集群2只有兩個隊列,關閉其中1個后,整個集群都失效了),兩個消費者都只從集群1消費消息

 

七、總結
      上文中主要介紹了單個Activemq集群的高可用,一般應用已經足夠。本文更進一步,作為高性能和擴展性的應用,通過多個集群的方式擴展隊列,使得消息可以同時發送到多個隊列,也可以通過多個消費者消費同一隊列的消息。
 
八、參考資料
 
 
 
 
 
 
 

 

 
 

 
 
 





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM