原地址: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服务依然正常运转。

基于zookeeper+leveldb搭建activemq集群--转载的更多相关文章

  1. Azure上搭建ActiveMQ集群-基于ZooKeeper配置ActiveMQ高可用性集群

    ActiveMQ从5.9.0版本开始,集群实现方式取消了传统的Master-Slave方式,增加了基于ZooKeeper+LevelDB的实现方式. 本文主要介绍了在Windows环境下配置基于Zoo ...

  2. 如何基于Jupyter notebook搭建Spark集群开发环境

    摘要:本文介绍如何基于Jupyter notebook搭建Spark集群开发环境. 本文分享自华为云社区<基于Jupyter Notebook 搭建Spark集群开发环境>,作者:apr鹏 ...

  3. Centos7上搭建activemq集群和zookeeper集群

    Zookeeper集群的搭建 1.环境准备 Zookeeper版本:3.4.10. 三台服务器: IP 端口 通信端口 10.233.17.6 2181 2888,3888 10.233.17.7 2 ...

  4. 分布式ActiveMQ集群--转载

    原文地址:http://shensy.iteye.com/blog/1752529 回顾总结前一段时间学习的ActiveMQ分布式集群相关的知识,分享出来希望对看到的人有所帮助. 一.分布式Activ ...

  5. 【2】基于zookeeper,quartz,rocketMQ实现集群化定时系统

    <一>项目结构图 (1)ZK协调分配 ===>集群中的每一个定时服务器与zookeeper交互,由集群中的master节点进行任务划分,并将划分结果分配给集群中的各个服务器节点. = ...

  6. 搭建Activemq集群

    首先搭建zookeeper集群: 参考URL:  http://www.cnblogs.com/feiyun126/p/7244394.html 三台服务器:先设置hosts 10.0.0.231 n ...

  7. 10. ZooKeeper之搭建伪集群模式。

    转自:https://blog.csdn.net/en_joker/article/details/78673456 在集群和单机两种模式下,我们基本完成了分别针对生产环境和开发环境ZooKeeper ...

  8. 基于docker快速搭建hbase集群

    一.概述 HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文"Bigtable:一个结构化数据的分布式存储系统".就像Bigt ...

  9. spark2.0.2基于hadoop2.4搭建分布式集群

    一.Scala安装 因为spark的版本原因,所以Scala我用的2.11.7. 下载目录http://www.scala-lang.org/download/ 拷贝到要安装的地址,我的地址是/usr ...

随机推荐

  1. 6.shell判断语句

    [ condition ](注意condition前后要有空格),可以使用$?验证(0为true,>1为false) 两个整数的比较:=:字符串比较-lt:小于-gt:大于-le:小于等于-ge ...

  2. 请求参数中的"+"号为什么会丢失,如何保证参数完整

    最近在开发中碰见一个问题,后端代码调用接口,在请求端参数没有任何问题,但是当接口接收到参数时,其中的加号全部变为了空格. 在查阅资料后发现是URLDecoder方法的问题,以下是URLDecoder的 ...

  3. EAScript 2016的新增语法(1)

    1)let 语法,这个和var的声明类似,但是,只存在于其所在的代码块里. 举例: var x=1 console.log(x) { let x=2 console.log(x) } console. ...

  4. 《锋利的JQuery》读书要点笔记3——事件和动画

    第四章 jQuery中的事件和动画 JS和HTML的交互是通过用户和浏览器操作页面时引发的事件来处理的,事件由浏览器自动生成. 4.1 jQuery中的事件 1. 加载DOM 这里主要是搞明白wind ...

  5. opencv mat

    mat基础教程: http://blog.csdn.net/sinat_31802439/article/details/50083291 mat 初始化: Mat M(,,CV_32FC1); Ma ...

  6. ES6的特性(译+注解)

    介绍 ES6,也叫ECMAScript2015(以下统称ES6),是ECMAScript标准的最新版本.这个标准在2015年6月份被正式批准.ES6是js语言很有意义的一次更新,也是2009年ES5被 ...

  7. C# 日期格式化{0:yyyy-MM-dd HH:mm:ss.fff}和{0:yyyy-MM-dd hh:mm:ss.fff}的区别(转)

    日期格式化{0:yyyy-MM-dd HH:mm:ss.fff}和{0:yyyy-MM-dd hh:mm:ss.fff}的区别http://www.cnblogs.com/jhxk/articles/ ...

  8. MySQL存储IP地址

    mysql没有提供IP类型,常见的存储多为使用varchar类型.其实使用int型更好,主要原因是便于计算IP段. 具体应用时应设置字段类型为unsigned int.否则无法存储128.x.x.x及 ...

  9. HDU 1556 Color the ball【差分数组裸题/模板】

    N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的"小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一 ...

  10. hadoop学习一:hadoop安装(hadoop2.4.1,ubuntu14.04)

    1.创建用户 adduser hduser 修改hduser用户权限: sudo vim /ect/sudoers ,在文件中增加 hduser  ALL=(ALL:ALL) ALL .