1. 程式人生 > >JMS之——ActiveMQ高可用+負載均衡叢集

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

一、高可用叢集

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

1、檔案共享(KahaDB)

<persistenceAdapter>
  <kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>

2、資料庫共享

<bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/smq?relaxAutoCommit=true"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
    <property name="maxActive" value="20"/>
    <property name="poolPreparedStatements" value="true"/>
</bean>
<persistenceAdapter>
    <jdbcPersistenceAdapter dataDirectory="${activemq.data}" dataSource="#mysql-ds" createTablesOnStartup="false"/>
</persistenceAdapter>

3、複製的LevelDB

LevelDB是Google開發的用於持久化資料的高效能類庫,LevelDB並不是一種服務,需要使用者自己實現,能處理十億級別規模的Key-Value型資料,佔用記憶體小.

<persistenceAdapter>
<replicatedLevelDB
  directory="${activemq.data}/leveldb"
  replicas="3"
  bind="tcp://0.0.0.0:62621"
  zkAddress="192.168.1.81:2181,192.168.1.82:2182,192.168.1.83:2183"
  hostname="edu-zk-01"
  zkPath="/activemq1/leveldb-stores" />
</persistenceAdapter>
--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必須相同,否則不能加入叢集

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="DobboEdu" dataDirectory="${activemq.data}">

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

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 為叢集二的訊息埠,這裡採用失敗重連機制

<networkConnectors>
    <networkConnector uri="static:{tcp://192.168.1.101:53531,tcp://192.168.1.101:53532,tcp://192.168.1.101:t3533}" duplex="false"/>
</networkConnectors>

2.叢集二連結叢集一

叢集二中所有ActiveMQ配置如下:加在persistenceAdapter介面卡節點前,networkConnector uri 為叢集一的訊息埠,這裡採用失敗重連機制

<networkConnectors>
    <networkConnector uri="static:{tcp://192.168.1.101:53511,tcp://192.168.1.101:53512,tcp://192.168.1.101:t3513}" duplex="false"/>
</networkConnectors>