AMQ学习笔记 - 14. 实践方案:基于ZooKeeper + ActiveMQ + replicatedLevelDB的主从部署
概述
- 容错:主服务器宕掉,再选出一台作为作为主服务器,来提供服务。
部署图

简单说明
模拟环境
1.软件环境
- 操作系统 - Windows7
- JDK - 1.7
- activemq - 5.13.2
下载包:apache-activemq-5.13.2-bin.zip - zookeeper - 3.4.8
下载包:zookeeper-3.4.8.tar.gz
2.网络环境
- 机器1
ip:192.168.74.55
zookeeper port:2181
activemq port:61616 - 机器2
ip:192.168.74.26
zookeeper port:2181
activemq port:61616 - 机器3
ip:192.168.74.25
zookeeper port:2181
activemq port:61616
实施
1.安装、配置、启动ZooKeeper
- 将zookeeper-3.4.8.tar.gz解压缩到合适的路径。
- 复制conf/zoo_sample.cfg为conf/zoo.cfg
- 在conf/zoo.cfg中指定dataDir、dataLogDir、各服务器及端口信息
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
# dataDir=/tmp/zookeeper
dataDir=F:/temp/zookeeper-3.4.8/data
dataLogDir=F:/temp/zookeeper-3.4.8/log
server.1=192.168.74.55:2888:3888
server.2=192.168.74.26:2888:3888
server.3=192.168.74.25:2888:3888
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1修改内容:
1) 注释掉第12行2) 第13行,添加dataDir3) 第14行,添加dataLogDir4) 第15-17行,以server.A=B:C:D的形式指定三台服务器
A - 数字,表示服务器的编号
B - 服务器的ip
C - 服务器与集群中的Leader服务器交换信息的端口
D - 用来执行选举时服务器相互通信的端口(万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader) - 新建myid文件
在dataDir指定的路径下,新建myid文件,文件内容是当前服务器的编号(和conf/zoo.cfg中的server编号对应)。
e.g. 192.168.74.55机器的内容为:1 - 启动
先切换到zookeeper目录,再启动(可以尝试设置PATH)D:\tools\PowerCmd>E:
E:\>cd E:\418备份区\工作任务\20160318_消息队列\zookeeper-3.4.8
E:\418备份区\工作任务\20160318_消息队列\zookeeper-3.4.8>bin\zkServer.cmd
2.安装、配置、启动ActiveMQ
- 将apache-activemq-5.13.2-bin.zip加压缩到合适的目录。
- 修改conf/activemq.xml文件内容
将默认的<persistenceAdapter>配置的内容注释掉,添加基于replicatedLevelDB的持久化配置:<!--
<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.74.55:2181,192.168.74.26:2181,192.168.74.25:2181"
hostname="192.168.74.55"
sync="local_disk"
zkPath="/activemq/leveldb-stores"
/>
</persistenceAdapter>注意:1) zkAddress依次指定三台服务器的ip和ZooKeeper的监听端口2) hostname为每一台服务器的ip地址,三台服务器根据实际情况修改 - 启动ActiveMQ
先切换到安装目录,再启动(可以尝试设置PATH)cd E:\418备份区\工作任务\20160318_消息队列\apache-activemq-5.13.2
bin\activemq start
3.在客户端程序中指定brokerURL
# use the following property to configure the default connector
java.naming.provider.url=failover:(tcp://192.168.74.55:61616,tcp://192.168.74.26:61616,tcp://192.168.74.25:61616)?initialReconnectDelay=1000
相关补充
1.已知情况
- 超过一半的故障,则体系失效
如果有2台ActiveMQ故障,则体系不再工作,且会阻塞客户端(同步的客户端会被阻塞)
2.未确定内容
- 对上文的部署方案是否有改进建议。
- 将Producers、Consumers直接集成到应用系统,还是再抽出一层?
- 对于一半以上的故障,如何预防?
-- 如何获得宕机提醒?如何实现自动重启? - 面向日志的采集,应该选择哪种消息传送模式(队列、发布/订阅)?
- 计划对上述的体系进行压力测试,以获取吞吐量的上限值;对测试的方案有何建议?
3.新问题
- Consumer异常阻塞是否会导致其他Consumer阻塞?
参考文章
- 基于zookeeper+leveldb搭建activemq集群
主从部署的实施方案。 - 分布式服务框架 Zookeeper -- 管理分布式环境中的数据
简单了解ZooKeeper - ActiveMQ实现负载均衡+高可用部署方案
主从部署和集群部署的区别、实现 - Replicated LevelDB Store
官网有对配置的参数进行详细的解说
AMQ学习笔记 - 14. 实践方案:基于ZooKeeper + ActiveMQ + replicatedLevelDB的主从部署的更多相关文章
- AMQ学习笔记 - 15. 实践方案:基于ActiveMQ的统一日志服务
概述 以ActiveMQ + Log4j + Spring的技术组合,实现基于消息队列的统一日志服务. 参考:Spring+Log4j+ActiveMQ实现远程记录日志——实战+分析 与参考文章的比较 ...
- AMQ学习笔记 - 20. 使用Apache ActiveMQBrowser监控ActiveMQ
概述 Apache ActiveMQBrowser可以用于查看AMQ中的消息.这里对其使用方法进行简单介绍. 使用介绍 1.下载并解压缩 下载地址:Apache ActiveMQBrowser,当前最 ...
- 并发编程学习笔记(14)----ThreadPoolExecutor(线程池)的使用及原理
1. 概述 1.1 什么是线程池 与jdbc连接池类似,在创建线程池或销毁线程时,会消耗大量的系统资源,因此在java中提出了线程池的概念,预先创建好固定数量的线程,当有任务需要线程去执行时,不用再去 ...
- Ext.Net学习笔记14:Ext.Net GridPanel Grouping用法
Ext.Net学习笔记14:Ext.Net GridPanel Grouping用法 Ext.Net GridPanel可以进行Group操作,例如: 如何启用Grouping功能呢?只需要在Grid ...
- java之jvm学习笔记五(实践写自己的类装载器)
java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...
- VSTO学习笔记(七)基于WPF的Excel分析、转换小程序
原文:VSTO学习笔记(七)基于WPF的Excel分析.转换小程序 近期因为工作的需要,要批量处理Excel文件,于是写了一个小程序,来提升工作效率. 小程序的功能是对Excel进行一些分析.验证,然 ...
- SQL反模式学习笔记14 关于Null值的使用
目标:辨别并使用Null值 反模式:将Null值作为普通的值,反之亦然 1.在表达式中使用Null: Null值与空字符串是不一样的,Null值参与任何的加.减.乘.除等其他运算,结果都是Null: ...
- golang学习笔记14 golang substring 截取字符串
golang学习笔记14 golang substring 截取字符串golang 没有java那样的substring函数,但支持直接根据 index 截取字符串mystr := "hel ...
- .NET MVC 学习笔记(四)— 基于Bootstarp自定义弹出框
.NET MVC 学习笔记(四)—— 基于Bootstarp自定义弹出框 转载自:https://www.cnblogs.com/nele/p/5327380.html (function ($) { ...
随机推荐
- tcpdump抓包分析具体解释
說實在的,對於 tcpdump 這個軟體來說,你甚至能够說這個軟體其實就是個駭客軟體, 因為他不但能够分析封包的流向,連封包的內容也能够進行『監聽』, 假设你使用的傳輸資料是明碼的話,不得了,在 ro ...
- SIP入门(二):建立SIPserver
在我的上一篇文章中已经介绍怎样通过SIP软电话直接通话,可是假设须要支持很多其它用户互相通话,同一时候基于安全考虑,须要对用户帐户登录进行验证控制,这些情况下就须要建立SIPserver. SIPse ...
- [Angular 2] ElementRef, @ViewChild & Renderer
ElementRef: In Angular2 Doc, it suggest to "avoid" using ElementRef. It access DOM directl ...
- Memcached概述
Memcached Memcached是一套分布式的内存对象缓存系统,使用C语言编写,作为数据库的前端cache,缓存数据库查询结果能够减轻数据库负载. 类似一张巨大的hash表,缓存的对象以key- ...
- andorid
js内存泄露 三分面加七分水 —— 十分糊涂 膝盖上打瞌睡 —— 自己靠自己 不当家,不知柴米贵:不生子,不知父母恩. 水落现石头,日久见人心. sqllite http://wenku.baidu. ...
- WCF摘记
//绑定形式 NetTcpBinding bind = new NetTcpBinding(); //地址 EndpointAddress address = new EndpointAddress( ...
- Javascript禁止子元素继承父元素的事件
3种方法1.在父元素事件的function中加if(event.target==this){ }2.子元素事件function最后加event.stopPropgation():// 阻止事件冒泡3. ...
- 如何编写自己的Linux安全检查脚本?
因为本人工作中要涉及到很多东西,审计(日志.数据神马的).源代码审计.渗透测试.开发一大堆东西,有些东西,越是深入去做,越会发现,没有工具或脚本,工作起来是有多么的坑. 工作的这段时间,自己写了几个工 ...
- Puppet
一个完整的自动化运维包括系统安装.配置管理.服务监控三个方面.那今天咱们大家一起来学习一下Puppet实际运维中的案例.仅供参考,欢迎大家提更多的意见! 一.应用背景 某公司新到500台服务器,需要安 ...
- 1.5.8 语言分析器(Analyzer)
语言分析器(Analyzer) 这部分包含了分词器(tokenizer)和过滤器(filter)关于字符转换和使用指定语言的相关信息.对于欧洲语言来说,tokenizer是相当直接的,Tokens被空 ...