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

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

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

 

4.1 Zookeeper集群配置

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

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。tcp

      由于是在一台主机上部署,因此每一个zoo.cfg中的clientPort不能重复;若是有三台主机,那么采用默认的clientPort就行,同理server.一、server.二、server.3能够写做<各自ip>:2888:3888。网站

       其中zookeeper1中的配置以下    ui

#默认配置
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中的配置以下google

#默认配置
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中的配置以下 url

#默认配置
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

建立三个目录spa

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

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

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 

相关文章
相关标签/搜索