基于zookeeper+leveldb搭建activemq集群实现高可用

自从activemq5.9.0开始,activemq的集群实现方式取消了传统的Master-Slave方式,增长了基于zookeeper+leveldb的实现方式,其余两种方式:目录共享和数据库共享依然存在。本文主要阐述基于zookeeper和leveldb搭建activemq集群,这里须要特别提醒,本文实现的集群仅提供主备功能,避免单点故障,没有负载均衡功能。html

    下面开始咱们的征途。node

1、搭建zookeeper集群数据库

    关于搭建zookeeper集群的文章请参考:zookeeper的集群模式下的安装和配置apache

    本文使用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节点数据查看系统,虽然页面不太美观,可是实用。tcp

                                                           图 1. taokeeper-monitor界面测试

                                                    图 2. node-zookeeper-browser界面ui

2、搭建activemq集群url

一、安装spa

    activemq自己的安装过程很简单,本文不详述,可参照官方的Getting-started

二、配置

    在三台机器上完成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。

三、问题与解决方案

   配置完成以后启动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

四、测试

    任意停掉三个实例中的任意一个,activemq服务依然正常运转。

 

欢迎转载,请注明出处:http://my.oschina.net/xiaohui249/blog/313028

相关文章
相关标签/搜索