原地址:http://www.open-open.com/lib/view/open1410569018211.html

自从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节点数据查看系统,虽然页面不太美观,但是实用。

图 1. taokeeper-monitor界面

图 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服务依然正常运转。

最新文章

  1. GitHub托管BootStrap资源汇总(持续更新中…)
  2. 这两年在QQGame写过的游戏(2012.7.15-2014.8.25)
  3. python 深拷贝与浅拷贝
  4. 2015年可用的TRACKER服务器大全
  5. PHP static关键字
  6. POJ 2104 【主席树】【区间第K大】
  7. Jquery 利用单个复选款(checkbox)实现全选、反选
  8. VB.net 字符串 分割 及 重新倒序组装
  9. Windows在结构Eclipse+Android4.0开发环境
  10. Android利用canvas画画板
  11. 英语口语练习系列-C17-Love story
  12. 数据库新增“自动添加”类字段 auto_now_add 如何不影响之前数据
  13. vue 2.0 使用replace时要点击路由多次才能返回
  14. vsftpd不支持目录软链接的解决办法
  15. linux sysfs文件系统
  16. 廖雪峰Java5集合-2List-1使用List
  17. 【363】python 相关小技巧
  18. assert函数用法总结【转】
  19. Windows域的相关操作
  20. KETTLE监控

热门文章

  1. Centos7/RHEL 7 配置静态路由
  2. django使用celery进行耗时任务的优化
  3. 定义序列化器时的read_only和write_only选项
  4. poj 1696(极角排序)
  5. Parsing Netflow using Kibana via Logstash to ElasticSearch
  6. React--基础学习混搭
  7. UVa1599 Ideal Path(双向bfs+字典序+非简单图的最短路+队列判重)
  8. AMQ学习笔记 - 03. 消息的接收方式
  9. Codeforces 856B - Similar Words
  10. POJ1861 Network(Kruskal)(并查集)