activemq官網給出了3種master/slave的HA方案,詳見:http://activemq.apache.org/masterslave.html ,基於共享文件目錄,db,zookeeper。
下面演示了如何在本機搭建基於zookeeper的activemq集群:
一、在目錄activemq1下安裝activemq(可參考上篇內容),然後修改conf/activemq.xml
1 <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
2 ...
3 <persistenceAdapter>
4 <!--<kahaDB directory="${activemq.data}/kahadb"/>-->
5 <replicatedLevelDB
6 directory="activemq-data"
7 replicas="3"
8 bind="tcp://0.0.0.0:0"
9 zkAddress="127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183"
10 zkSessionTimeout="2s"
11 zkPath="/activemq/leveldb-stores"
12 />
13 </persistenceAdapter>
14 ...
15 </broker>
注:為保證zk的HA,本機至少要有3個zk的節點,可參考我以前的文章搭建.
二、將activemq1復制二分,變成activemq2、activemq3,由於是在本機測試,為防止端口沖突,這二個目錄下的activemq.xml,得修改端口
<transportConnectors>
<transportConnector name="openwire"
uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp"
uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp"
uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt"
uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws"
uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
上面這幾個端口,大家看情況調整,只要保證3個activemq不沖突即可
三、啟動zk1,zk2,zk3,以及activemq1,activemq2,activemq3即可。
注:為方便觀察輸出,建議啟動activemq時,用./activemq.sh console啟動
四、測試Failover
正常啟動後,然後手動停掉master,然後觀察剩下的2個節點終端輸出,正常情況下,應該過一會兒,有一個會自動提升為master.
最後提醒一下:采用上述HA方案後,雖然系統可用性提高了,但是在本機上測試發現,跟上篇同樣的測試代碼和用例,單節點運行時,1秒可以發8k+條消息,采用zookeeper的HA方案後,每秒只能寫入500條消息左右
參考文章:
http://activemq.apache.org/replicated-leveldb-store.html