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

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

时间: 2024-10-10 08:21:45

基于levelDB可复制master/slave(zookeeper+levelDB)的相关文章

Redis的复制(Master/Slave)

是什么 : 也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主 能干嘛: 读写分离,容灾恢复 怎么玩: 1.配从(库)不配主(库) 2.从库配置:slaveof 主库IP 主库端口 每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件 Info replication 3.修改配置文件细节操作 拷贝多个redis.conf文件 开启daemonize yes Pid文件名字

Redis学习十:Redis的复制(Master/Slave)【重要】

一.是什么 官网 行话:也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主 二.能干嘛 读写分离  容灾恢复 三.怎么玩 1.配从(库)不配主(库) 2.从库配置:slaveof 主库IP 主库端口 说明: 每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件 Info replication 3.修改配置文件细节操作 [1]拷贝多个redis.conf文件 [2]开启dae

基于zookeeper+leveldb搭建activemq集群--转载

原地址:http://www.open-open.com/lib/view/open1410569018211.html 自从activemq5.9.0开始,activemq的集群实现方式取消了传统的 Master-Slave方式,增加了基于zookeeper+leveldb的实现方式,其他两种方式:目录共享和数据库共享依然存在.本文主要阐述基 于zookeeper和leveldb搭建activemq集群,这里需要特别提醒,本文实现的集群仅提供主备功能,避免单点故障,没有负载均衡功能. 下面开始

基于zookeeper+leveldb搭建activemq集群

自从activemq5.9.0开始,activemq的集群实现方式取消了传统的Master-Slave方式,增加了基于zookeeper+leveldb的实现方式,其他两种方式:目录共享和数据库共享依然存在.本文主要阐述基于zookeeper和leveldb搭建activemq集群,这里需要特别提醒,本文实现的集群仅提供主备功能,避免单点故障,没有负载均衡功能. 下面开始我们的征途. 一.搭建zookeeper集群 关于搭建zookeeper集群的文章请参考:zookeeper的集群模式下的安装

分布式架构高可用架构篇_02_activemq高可用集群(zookeeper+leveldb)安装、配置、高可用测试

从 ActiveMQ 5.9 开始,ActiveMQ 的集群实现方式取消了传统的Master-Slave 方式,增加了基于ZooKeeper + LevelDB的 Master-Slave实现方式,其他两种方式目录共享和数据库共享依然存在. 三种集群方式的对比: (1)基于共享文件系统(KahaDB,默认): <persistenceAdapter> <kahaDB directory="${activemq.data}/kahadb"/> </persi

Mysql复制(Master/Slave实现)

1.Mysql复制方式: * 基于行的复制(5.1中引入) * 基于语句的复制 注:都是通过在主库上记录binlog.在备库上重放日志的方式来实现异步的数据复制的.这意味着,在同一时间点备库上的数据可能与主库存在不一致性,并且无法保证主备之间的延迟. 2.应用场景: * 数据分布: Mysql复制通常不会对带宽造成很大的压力,但是基于行的复制会比传统的基于语句复制模式的带宽压力更大些. * 负载均衡: 通过Mysql复制可以装读操作分布到多个服务器上,实现对读密集型应用的优化,并且实现方便,通过

mysql (master/slave)复制原理及配置

1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收

ActiveMq+zookeeper+levelDB集群整合配置

ActiveMq+zookeeper+levelDB集群整合配置 环境:linux系统,jdk1.7  三台linux系统电脑.我这里使用一台window,分别远程3台linux电脑.三台电脑的ip分别为10.0.88.10 ,10.0.88.11 ,10.0.88.12 第一步:下载activemq 和zookeeper,levelDB会activemq自带有,所以不需要下载,把下载好的压缩包发送到所有的linux上,(我这里是把下载好的压缩包放在当前window下的tomcat,root目录

Redis 的 master/slave 复制

Redis 的 master/slave 复制:    Redis 的 master/slave 数据复制方式可以是一主一从或者是一主多从的方式,Redis 在 master 是非阻塞模式,也就是说在 slave 执行数据同步的时候,master 是可以接受客户端的 请求的,并不影响同步数据的一致性,然而在 slave 端是阻塞模式的,slave 在同步 master 数据时,并不能够响应客户端的查询  Redis 的 master/slave 模式下,master 提供数据读写服务,而 sla