activemq官網給出了3種master/slave的HA方案,詳見:http://activemq.apache.org/masterslave.html ,基於共用文件目錄,db,zookeeper。 下麵演示瞭如何在本機搭建基於zookeeper的activemq集群: 一、在目錄activ ...
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條消息左右,對於性能要求較高的場景,建議採用其它方案,比如下一篇要介紹的基於Networks of brokers的HA方案。
參考文章:
http://activemq.apache.org/replicated-leveldb-store.html