Apache ActiveMQ實戰(2)-集羣

轉載自http://blog.csdn.net/lifetragedy/article/details/51869032

ActiveMQ的集羣


內嵌代理所引發的問題:

  • 消息過載
  • 管理混亂


如何解決這些問題——集羣的兩種方式:
  • Master slave 
  • Broker clusters


ActiveMQ的集羣有兩種方式:

  • MASTER/SLAVE模式
  • Cluster模式

Pure Master Slave





Pure master slave的工作方式:

當master broker失效的時候。Slave broker 做出了兩種不同的相應方式

  • 啓動network connectors和transport connectors
  • slave broker停止,slave broker只是複製了master broker的狀態

在任何情況下我們都應該先嚐試連接master,故在客戶端我們這樣配置: 

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. failover://(tcp://masterhost:61616,tcp://slavehost:61616)?randomize=false  

Pure Master Slave具有以下限制:
  • 只能有一個slave broker連接到master broker。 
  • 在因master broker失效後slave才接管(保證消息完全拷貝)
  • 要想恢復master,停止slave,拷貝slave中的數據文件到master中,然後重啓;
  • Master broker不需要特殊的配置。Slave broker需要進行以下配置:
[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <broker masterConnectorURI="tcp://masterhost:62001" shutdownOnMasterFailure="false">   
  2. ...   
  3. <transportConnectors>   
  4. <transportConnector uri="tcp://slavehost:61616"/>   
  5. </transportConnectors>   
  6. </broker>   


Shared File System Master Slave


如果你使用共享文件系統,那麼你可以使用Shared File System Master Slave。如下圖所示:


客戶端使用failover Transport 去連接 broker,例如:                                                            

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. failover:(tcp://broker1:61616,tcp://broker2:6161 7,broker3:61618)  

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <broker useJmx="false" xmlns="http://activemq.org/config/1.0">   
  2. <persistenceAdapter>   
  3. <journaledJDBC dataDirectory="/sharedFileSystem/broker"/>   
  4. </persistenceAdapter>   
  5. …   
  6. </broker>  

其中/sharedFileSystem是文件共享的系統文件目錄


JDBC Master Slave


JDBC Master Slave的工作原理跟Shared File System Master Slave類似,只是採用了數據庫作爲持久化存儲



客戶端調用:


[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. failover:(tcp://broker1:61616,tcp://broker2:616167,broker3:61618)  


[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <beans>   
  2. <broker xmlns="http://activemq.org/config/1.0" brokerName="JdbcMasterBroker">   
  3. <persistenceAdapter>   
  4. <jdbcPersistenceAdapter dataSource="#mysql-ds"/>   
  5. </persistenceAdapter>   
  6. </broker>   
  7. <bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">   
  8. <property name="driverClassName" value="com.mysql.jdbc.Driver"/>   
  9. <property name="url" value="jdbc:mysql://localhost:3306/test?relaxAutoCommit=true"/>   
  10. <property name="username" value="username"/>   
  11. <property name="password" value="passward"/>   
  12. <property name="poolPreparedStatements" value="true"/>   
  13. </bean>   
  14. </beans>   

Broker clusters-靜態


Broker clusters ,網絡型中介(network of brokers)


連接到網絡代理的兩種方式:

  • 靜態的方法配置訪問特定的網絡代理
  • 發現中介(agents)動態的探測代理


靜態網絡代理


Static:(uri1,uri2,uri3,…)?key=value 或是Failover:(uri1, … , uriN)?key=value


下面給出一個配置實例:


[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <networkConnectors>  
  2. <networkConnector name=”local network”  
  3.           uri=”static://(tcp://remotehost1:61616,tcp://remotehost2:61616)”/>  
  4. </networkConnectors>  


幾種集羣對比


  • broker的集羣在多個broker之前fail-over和 load-balance,master-slave能fail-over,但是不能load- balance
  • 消息在多個broker之間轉發,但是消息只存儲在一個broker上,一旦失效必須重啓,而主從方式master失效,slave實時備份消息。
  • jdbc方式成本高,效率低
  • master-slave方式中pure方式管理起來麻煩

因此,我們把MASTER/SLAVE和BROKER CLUSTER兩者相結合,可以得到一個完全解決方案:即又可以做到集羣又可以做到任何一個BROKER如果發生宕機節點消息也不丟失。

Master/Slave集羣搭建-傳統式


一般activemq的Master Slave是基於KAHADB的阻塞來做的,先看一下原理



注意紅色加粗的地方,這是傳統的Master Slave的一個缺陷。這樣做太不安全了!


下面給出核心配置:
master配置(不要忘了改conf目錄下的jetty.xml文件中的端口)


[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <transportConnectors>  
  2.             <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->  
  3.             <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>  
  4.             <span class="tag" style="margin: 0px; padding: 0px;
發佈了21 篇原創文章 · 獲贊 10 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章