文档章节

基于levelDB可复制master/slave(zookeeper+levelDB)

chaun
 chaun
发布于 2015/08/17 11:40
字数 1116
阅读 352
收藏 1

Leveldb是一个google实现的非常高效的kv数据库,是单进程的服务,能够处理十亿级别规模Key-Value型数据,占用内存小。

     基于可复制LevelDB的集群方案,需要引入ZooKeeper。根据ZooKeeper的使用方式可以分为单节点的ZooKeeper和Zookeeper集群。这里我们只讲述ZooKeeper集群,单节点不是一个可靠的选择。

 

4.1 Zookeeper集群配置

     ZooKeeper可以在网站http://zookeeper.apache.org/ 下载。我们使用的是zookeeper-3.4.6,假设ZooKeeper分部署在下面三个目录中。

D:\MQ\apache-activemq\cluster\zookeeper1
D:\MQ\apache-activemq\cluster\zookeeper2
D:\MQ\apache-activemq\cluster\zookeeper3

4.1.1 zoo.cfg

      把3个节点中config目录下的zoo_sample.cfg复制一份,改成zoo.cfg。

      因为是在一台主机上部署,所以每个zoo.cfg中的clientPort不能重复;如果有三台主机,那么采用默认的clientPort就行,同理server.1、server.2、server.3可以写作<各自ip>:2888:3888。

       其中zookeeper1中的配置如下    

#默认配置
tickTime=2000
initLimit=10
syncLimit=5
#需要修改的配置
dataDir=D:/MQ/apache-activemq/cluster/zkdata/z1/
clientPort=2181
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890

zookeeper2中的配置如下

#默认配置
tickTime=2000
initLimit=10
syncLimit=5
#需要修改的配置
dataDir=D:/MQ/apache-activemq/cluster/zkdata/z2/
clientPort=2182
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890

zookeeper3中的配置如下 

#默认配置
tickTime=2000
initLimit=10
syncLimit=5
#需要修改的配置
dataDir=D:/MQ/apache-activemq/cluster/zkdata/z3/
clientPort=2183
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890

 

4.1.2 myid

创建三个目录

D:\MQ\apache-activemq\cluster\zkdata\z1
D:\MQ\apache-activemq\cluster\zkdata\z2
D:\MQ\apache-activemq\cluster\zkdata\z3

每个目录中都创建一个名为myid的文件(文本文件,删掉txt后缀),3个文件的内容分别写1、2、3。

D:\MQ\apache-activemq\cluster\zkdata\z1\myid   1
D:\MQ\apache-activemq\cluster\zkdata\z2\myid   2
D:\MQ\apache-activemq\cluster\zkdata\z3\myid   3

 

4.2 ActiveMQ配置

    在3个amq节点中配置activemq.xml中的持久化适配器。根据以下配置示例,修改其中bind、zkAddress和hostname。如果你是在三台主机上部署,那么bind项可以写成bind="tcp://0.0.0.0:0",默认采用61619端口。我们这里在一台主机上演示,因此需要保证bind端口不冲突。

amq1的配置

<persistenceAdapter>
      <replicatedLevelDB 
         directory="${activemq.data}/leveldb"
         replicas="3"
         bind="tcp://0.0.0.0:62618"
         zkAddress="localhost:2181,localhost:2182,localhost:2183" 
         hostname="localhost"
         zkPath="/activemq/leveldb-stores"
      />
 </persistenceAdapter>

amq2的配置

<persistenceAdapter>
      <replicatedLevelDB 
         directory="${activemq.data}/leveldb"
         replicas="3"
         bind="tcp://0.0.0.0:62619"
         zkAddress="localhost:2181,localhost:2182,localhost:2183" 
         hostname="localhost"
         zkPath="/activemq/leveldb-stores"
      />
 </persistenceAdapter>

amq3的配置

<persistenceAdapter>
      <replicatedLevelDB 
         directory="${activemq.data}/leveldb"
         replicas="3"
         bind="tcp://0.0.0.0:62620"
         zkAddress="localhost:2181,localhost:2182,localhost:2183" 
         hostname="localhost"
         zkPath="/activemq/leveldb-stores"
      />
 </persistenceAdapter>

 

4.3 集群启动和错误排除

     先依次启动ZooKeeper,再依次启动ActiveMQ。启动第1个Zookeeper时,控制台会报连接错误,因为其它的ZooKeeper节点还没启动。

 

     如果出现了"activemq LevelDB IOException handler"错误,针对于apache-activemq-5.10.1,需要删除各个ActiveMQ节点下的pax-url-aether-1.5.2.jar包,并注释掉activemq.xml中的下述日志配置。   

<!-- Allows accessing the server log
    <bean id="logQuery" class="org.fusesource.insight.log.log4j.Log4jLogQuery"
          lazy-init="false" scope="singleton"
          init-method="start" destroy-method="stop">
    </bean>
  -->

4.4 小结

 

     每个ActiveMQ的BrokerName必须相同,否则不能加入集群。

     经过验证,当一个ActiveMQ节点挂掉,或者一个ZooKeeper节点挂掉,ActiveMQ服务依然正常运转。如果仅剩一个ActiveMQ节点,因为不能选举Master,ActiveMQ不能正常运转;同样的,如果ZooKeeper仅剩一个节点活动,不管ActiveMQ各节点是否存活,ActiveMQ也不能正常提供服务。

5.客户端访问方式

5.1Failover使用格式

failover:(tcp://localhost:61616,tcp://localhost:61626)?randomize=false

5.2 updateURIsURL

updateURIsURL,通过URL(或者本地路径)获取重连的url,这样做具有良好的扩展性,因为客户端每次连接都是从URL(或文件)中加载一次,所以可以随时从文件中更新url列表,做到动态添加MQ的备点。

failover:()?randomize=false&updateURIsURL=file:/d:/urllist.txt

urllist.txt中的地址通过英文逗号分隔,示例:

tcp://localhost:61616,tcp://localhost:61617, tcp://localhost:61618

参考:

  http://my.oschina.net/xiaoxishan/blog/382502 

  http://my.oschina.net/xiaohui249/blog/313028 

© 著作权归作者所有

共有 人打赏支持
chaun
粉丝 88
博文 270
码字总数 96237
作品 0
深圳
高级程序员
基于zookeeper+leveldb搭建activemq集群实现高可用

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

chaun
2015/08/17
0
2
基于zookeeper+leveldb搭建activemq集群

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

萧十一郎君
2014/09/12
0
7
Reveldb 与 Kyoto Tycoon 性能对比(一)

一、概述 Reveldb 是个人在空余时间和周末完成(应该说还远远未完善)的一个基于 google leveldb 的 NoSQL 数据服务器,网络连接采用了 libevent 的 HTTP 接口,因此 reveldb 天生就适合处理 ...

大卷卷
2013/01/03
0
1
ActiveMQ集群方案(下)

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

yunlielai
04/15
0
0
leveldb-rust-b Rust 编译出错

src/leveldb/lib.rs:12:1: 12:19 warning: this inner attribute syntax is deprecated. The new syntax is , with a bang and no semicolon. src/leveldb/lib.rs:12 #[feature(globs)]; ^~ ......

MtrS
2014/05/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

阿里云API网关使用教程

API 网关(API Gateway)提供高性能、高可用的 API 托管服务,帮助用户对外开放其部署在 ECS、容器服务等阿里云产品上的应用,提供完整的 API 发布、管理、维护生命周期管理。用户只需进行简...

mcy0425
27分钟前
4
0
解决远程登陆误按ctrl+s锁屏假死恢复

使用putty时,偶尔发生屏幕假死,不能输入等情况。 后来发现,只要数据ctrl+s,就会假死;输入ctrl+q就可以恢复过来。 很多刚从windows转移到linux上来工作的朋友,在用vi/vim编辑文件时,常常...

HJCui
30分钟前
0
0
@Transactional

事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于...

asdf08442a
35分钟前
2
0
widows下强制解除8080端口占用问题

使用win+R打开命令窗口 输入以下命令查看哪个任务占用了8080端口 netstat -ano |findstr "8080" 然后通过任务id强制关闭占用该端口的进程 tskill 10044 // 自己的试情况而定,这个ID是LISTE...

_Artisan
44分钟前
2
0
productFlavors简单实用

最近项目中,不同环境需要配置的参数越来越多,为了减少修改代码次数。研究了一下productFlavors的使用方式,总结如下 1. as3.0以上版本使用productFlavors时需要指定一个flavorDimensions,...

火云
46分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部