文档章节

基于zookeeper+leveldb搭建activemq集群

萧十一郎君
 萧十一郎君
发布于 2014/09/12 17:36
字数 849
阅读 15439
收藏 44

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


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




© 著作权归作者所有

萧十一郎君

萧十一郎君

粉丝 64
博文 34
码字总数 19501
作品 0
昌平
程序员
私信 提问
加载中

评论(7)

终日惶惶
终日惶惶
activeMQ怎么在一台虚拟机上布署?
Carvendy
Carvendy
要是有负载均衡就更好了
萧十一郎君
萧十一郎君 博主

引用来自“a不绝”的评论

我现在也在测试,发送了大概50万条数据,同时开启消费者和生产者,到第二天查看时数据发送完成了,但是总是有从机挂掉主要有两方面的错误,一.从机显示zookeeper连接超时
二 invalid log position楼主有没有遇到过这样的问题啊

我每天的数据量没有你那么多,没有出现过你说的问题哦
a不绝
a不绝
我现在也在测试,发送了大概50万条数据,同时开启消费者和生产者,到第二天查看时数据发送完成了,但是总是有从机挂掉主要有两方面的错误,一.从机显示zookeeper连接超时
二 invalid log position楼主有没有遇到过这样的问题啊
萧十一郎君
萧十一郎君 博主

引用来自“a不绝”的评论

楼主有没有进行发送和接受数据的测试啊

当然做过测试,才敢把文章发出来哦0
a不绝
a不绝
楼主有没有进行发送和接受数据的测试啊
a不绝
a不绝
taokeeper没配置好趋势role都是可以看到的
基于zookeeper+leveldb搭建activemq集群实现高可用

自从activemq5.9.0开始,activemq的集群实现方式取消了传统的Master-Slave方式,增加了基于zookeeper+leveldb的实现方式,其他两种方式:目录共享和数据库共享依然存在。本文主要阐述基于zoo...

chaun
2015/08/17
338
2
基于levelDB可复制master/slave(zookeeper+levelDB)

Leveldb是一个google实现的非常高效的kv数据库,是单进程的服务,能够处理十亿级别规模Key-Value型数据,占用内存小。 基于可复制LevelDB的集群方案,需要引入ZooKeeper。根据ZooKeeper的使用...

chaun
2015/08/17
419
0
ActiveMQ 集群配置 高可用

ActiveMQ 集群配置 高可用 自从activemq5.9.0开始,activemq的集群实现方式取消了传统的Pure Master Slave方式,增加了基于zookeeper+leveldb的实现方式,其他两种方式:目录共享和数据库共享...

watermelon11
02/15
0
0
Linux环境下Apache ActiveMQ 基本安装

在linux上安装mq,并映射到外网。 1.Apache ActiveMQ安装基本条件请参考链接: 2.下载Apache ActiveMQ 3.解压安装 将下载好的apache-activemq-5.13.3-bin.tar解压至安装目录 命令:tar -zxvf...

zhuyuansj
2018/04/02
0
0
ActiveMQ集群方案(下)

版权声明:欢迎转载,但是看在我辛勤劳动的份上,请注明来源:http://blog.csdn.net/yinwenjie(未经允许严禁用于商业用途!) https://blog.csdn.net/yinwenjie/article/details/51205822 目...

yunlielai
2018/04/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
14
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
15
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部