基于zookeeper+leveldb搭建activemq集群

jopen 10年前發布 | 61K 次閱讀 leveldb ActiveMQ 消息系統 ZooKeeper

    自從activemq5.9.0開始,activemq的集群實現方式取消了傳統的Master-Slave方式,增加了基于zookeeper+leveldb的實現方式,其他兩種方式:目錄共享和數據庫共享依然存在。本文主要闡述基于zookeeper和leveldb搭建activemq集群,這里需要特別提醒,本文實現的集群僅提供主備功能,避免單點故障,沒有負載均衡功能。

    下面開始我們的征途。

一、搭建zookeeper集群

    關于搭建zookeeper集群的文章請參考:zookeeper的集群模式下的安裝和配置。

    本文使用zookeeper3.4.6,3臺虛擬機:192.168.2.161, 192.168.2.145, 192.168.2.146,zookeeper使用其默認端口:2181。

    zookeeper集群搭建完成之后,我順便搭建了兩套監控系統:taokeeper-monitor和node-zookeeper-browser。前者是淘寶開源的一套監控zookeeper的系統,用了之后感覺得到的有效信息不多,而且集群趨勢圖總是不顯示;后者是用nodejs實現的zookeeper節點數據查看系統,雖然頁面不太美觀,但是實用。

基于zookeeper+leveldb搭建activemq集群

                                                                圖 1. taokeeper-monitor界面

基于zookeeper+leveldb搭建activemq集群

                                                                圖 2. node-zookeeper-browser界面

二、搭建activemq集群

1、安裝

    activemq本身的安裝過程很簡單,本文不詳述,可參照官方的Getting-started

2、配置

    在三臺機器上完成activemq安裝之后,開始集群配置,通過配置使三個activemq實例組成集群。下面的配置在三個實例上保持一致,除了標紅部分,主要修改配置文件conf/activemq.xml。

    (1)broker-name的統一

        將broker標簽的brokerName屬性設置為統一的值,我將這個值設置為“test”,只有三個實例的brokerName一致,zookeeper才能識別它們屬于同一個集群。

    (2)persistenceAdapter的配置

        persistenceAdapter設置持久化方式,主要有三種方式:kahaDB(默認方式)、數據庫持久化、levelDB(v5.9.0提供支持)。

        本文采用levelDB來進行持久化,并使用zookeeper實現集群的高可用,配置如下:

        首先注釋掉原來kahaDB的持久化方式,然后配置levelDB+zookeeper的持久化方式。

<!--
<persistenceAdapter>
    <kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
-->
<persistenceAdapter>
    <replicatedLevelDB
      directory="${activemq.data}/leveldb"
      replicas="3"
      bind="tcp://0.0.0.0:0"
      zkAddress="192.168.2.161:2181,192.168.2.145:2181,192.168.2.146:2181"
      hostname="192.168.2.161"
      sync="local_disk"
      zkPath="/activemq/leveldb-stores"
      />
</persistenceAdapter>

    注意上述配置中的hostname屬性值,不同的activemq實例對應不同的hostname值,其他兩個實例配置的hostname值分別為:192.168.2.145, 192.168.2.146。

3、問題與解決方案

   配置完成之后啟動zookeeper集群,然后依次啟動三個activemq實例,啟動之后報錯:"activemq LevelDB IOException handler"。

    原因:版本5.10.0存在的依賴沖突。

    解決方案:

        (1)移除lib目錄中的pax-url-aether-1.5.2.jar包;

        (2)注釋掉配置文件中的日志配置;      

<bean id="logQuery" class="org.fusesource.insight.log.log4j.Log4jLogQuery"
    lazy-init="false" scope="singleton"
    init-method="start" destroy-method="stop">
</bean>

    參考:http://www.350351.com/jiagoucunchu/leveldb/334233.html

4、測試

    任意停掉三個實例中的任意一個,activemq服務依然正常運轉。

 

 

 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!