JMS之——ActiveMQ高可用+負載均衡集群


一、高可用集群

從ActiveMQ5.9開始,ActiveMQ的集群實現方式取消了傳統的Master-Slave方式,增加了基於ZooKeeper+LevelDB的Master-Slave實現方式,其他兩種方式目錄共享和數據庫共享方式依然存在.

1、文件共享(KahaDB)

 

[html]  view plain  copy
 
  1. <persistenceAdapter>  
  2.   <kahaDB directory="${activemq.data}/kahadb"/>  
  3. </persistenceAdapter>  

 

2、數據庫共享

 

[html]  view plain  copy
 
  1. <bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
  2.     <property name="driverClassName" value="com.mysql.jdbc.Driver"/>  
  3.     <property name="url" value="jdbc:mysql://localhost:3306/smq?relaxAutoCommit=true"/>  
  4.     <property name="username" value="root"/>  
  5.     <property name="password" value="root"/>  
  6.     <property name="maxActive" value="20"/>  
  7.     <property name="poolPreparedStatements" value="true"/>  
  8. </bean>  
  9. <persistenceAdapter>  
  10.     <jdbcPersistenceAdapter dataDirectory="${activemq.data}" dataSource="#mysql-ds" createTablesOnStartup="false"/>  
  11. </persistenceAdapter>  

 

3、復制的LevelDB

LevelDB是Google開發的用於持久化數據的高性能類庫,LevelDB並不是一種服務,需要用戶自己實現,能處理十億級別規模的Key-Value型數據,占用內存小.

[html]  view plain  copy
 
  1. <persistenceAdapter>  
  2. <replicatedLevelDB  
  3.   directory="${activemq.data}/leveldb"  
  4.   replicas="3"  
  5.   bind="tcp://0.0.0.0:62621"  
  6.   zkAddress="192.168.1.81:2181,192.168.1.82:2182,192.168.1.83:2183"  
  7.   hostname="edu-zk-01"  
  8.   zkPath="/activemq1/leveldb-stores" />  
  9. </persistenceAdapter>  
  10. --SSDB(基於LevelDB)  

高可用的原理:使用ZooKeeper(集群)注冊所有的ActiveMQ Broker.只有其中的一個Broker可以提供服務,被視為Master,其他的Broker處於待機狀態,被視為Slave.如果Master因故障不能提供服務,ZooKeeper會從Slave中選舉出一個Broker充當Master

 

二、ActiveMQ集群部署規划

ZooKeeper集群環境:192.168.1.81:2181,192.168.1.82:2182,192.168.1.83:2183
ActiveMQ需要划分的端口:
      mq集群通訊端口(bind="tcp://0.0.0.0:62621" ActiveMQ相互之間通許,數據同步...)
      mq集群消息端口(conf/activeMq.xml 客戶端監聽端口)
      mq管理控制台監聽端口(conf/jetty.xml)
一個高可用集群中每個ActiveMQ的BrokerName必須相同,否則不能加入集群

 

[html]  view plain  copy
 
  1. <broker xmlns="http://activemq.apache.org/schema/core" brokerName="DobboEdu" dataDirectory="${activemq.data}">  

 

三、客戶端broker采用失敗重連機制

 

[plain]  view plain  copy
 
  1. mq.brokerURL=failover:(tcp://192.168.1.81:51611,tcp://192.168.1.82:51611,tcp://192.168.1.83:51611)?randomize=false&initialReconnectDelay=1000&maxReconnectDelay=30000  

當一個ActiveMQ節點掛掉,ActiveMQ服務一樣正常使用,如果僅剩一個ActiveMQ節點,因為不能選舉Master,ActiveMQ不能正常運轉;如貴ZooKeeper集群出了問題,需要對
ActiveMQ重新啟動一次.
replicatedLevelDB不支持延遲或者計划任務消息.這些消息存儲在另外的LevelDB文件中,如果使用延遲或者計划任務消息,將不會復制到slave Broker上,不能實現消息的高可用.

 

四、負載均衡集群

1.集群一鏈接集群二

集群一中所有ActiveMQ配置如下:加在persistenceAdapter適配器節點前,networkConnector uri 為集群二的消息端口,這里采用失敗重連機制

 

[html]  view plain  copy
 
  1. <networkConnectors>  
  2.     <networkConnector uri="static:{tcp://192.168.1.101:53531,tcp://192.168.1.101:53532,tcp://192.168.1.101:t3533}" duplex="false"/>  
  3. </networkConnectors>  

 

2.集群二鏈接集群一

集群二中所有ActiveMQ配置如下:加在persistenceAdapter適配器節點前,networkConnector uri 為集群一的消息端口,這里采用失敗重連機制

[html]  view plain  copy
 
    1. <networkConnectors>  
    2.     <networkConnector uri="static:{tcp://192.168.1.101:53511,tcp://192.168.1.101:53512,tcp://192.168.1.101:t3513}" duplex="false"/>  
    3. </networkConnectors>   


免責聲明!

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



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