2016年1月26日星期二

ActiveMQ_005:单机环境下配置基于 Zookeeper + Replicated LevelDB 方式的高可用

环境:OS X EI Capitan 10.11.3 + ActiveMQ 5.13.0 + Zookeeper-3.4.6




在单机环境下,配置基于 Zookeeper + Replicated LevelDB 方式的高可用。

1. 配置三个ZooKeeper Servers节点的集群
请参考《Zookeeper_002:快速上手 》中的集群配置。

2. 配置三个ActiveMQ 节点
基本的配置请参考《ActiveMQ_004:单机环境下配置基于文件共享存储方式的高可用》。
这里只要把基于文件的共享存储方式改成Replicated LevelDB 方式即可。

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

2.2 修改其中bind、zkAddress和hostname
如果在三台主机上部署,那么bind项可以写成bind="tcp://0.0.0.0:0",默认采用61619端口。
我这里在一台主机上演示,因此需要保证bind端口不冲突。

 (1)vim ./activemq-node1/conf/activemq.xml
 <persistenceAdapter>
            <!-- <kahaDB directory="${activemq.data}/kahadb"/> -->
            <!-- <kahaDB directory="/tmp/kahadb"/> -->
            <!-- <levelDB directory="/tmp/leveldb"/> -->
            <replicatedLevelDB
            directory="${activemq.data}/leveldb"
            replicas="3"
            bind="tcp://0.0.0.0:62618"
            zkAddress="localhost:12181,localhost:12182,localhost:12183"
            hostname="localhost"
            sync="local_disk"
            zkPath="/activemq/leveldb-stores"
            />
   </persistenceAdapter>


(2)vim ./activemq-node2/conf/activemq.xml
 <persistenceAdapter>
            <!-- <kahaDB directory="${activemq.data}/kahadb"/> -->
            <!-- <kahaDB directory="/tmp/kahadb"/> -->
            <!-- <levelDB directory="/tmp/leveldb"/> -->
            <replicatedLevelDB
            directory="${activemq.data}/leveldb"
            replicas="3"
            bind="tcp://0.0.0.0:62619"
            zkAddress="localhost:12181,localhost:12182,localhost:12183"
            hostname="localhost"
            sync="local_disk"
            zkPath="/activemq/leveldb-stores"
            />
   </persistenceAdapter>


(3)vim ./activemq-node3/conf/activemq.xml
 <persistenceAdapter>
            <!-- <kahaDB directory="${activemq.data}/kahadb"/> -->
            <!-- <kahaDB directory="/tmp/kahadb"/> -->
            <!-- <levelDB directory="/tmp/leveldb"/> -->
            <replicatedLevelDB
            directory="${activemq.data}/leveldb"
            replicas="3"
            bind="tcp://0.0.0.0:62620"
            zkAddress="localhost:12181,localhost:12182,localhost:12183"
            hostname="localhost"
            sync="local_disk"
            zkPath="/activemq/leveldb-stores"
            />
</persistenceAdapter>


3. 启动与停止
先启动三个Zookeeper节点:
(1)./zookeeper-node1/bin/zkServer.sh start/stop/restart
(2)./zookeeper-node2/bin/zkServer.sh start/stop/restart
(3)./zookeeper-node3/bin/zkServer.sh start/stop/restart
再启动三个ActiveMQ节点:
(1)./activemq-node1/bin/activemq start/stop/restart
(2)./activemq-node2/bin/activemq start/stop/restart
(3)./activemq-node3/bin/activemq start/stop/restart

启动后,同一时间只有一个ActiveMQ节点是Master,其余的节点是Slave。
注意,在三个节点的情况下,最多只能停掉一个ActiveMQ Server,因为停掉两个ActiveMQ Server,Zookeeper 就不够法定投票数量,无法选出谁是Master节点。

4. 客户端
使用failover协议连接:"failover:(tcp://127.0.0.1:61617,tcp://127.0.0.1:61618,tcp://127.0.0.1:61619)");

参考文献:
1. http://my.oschina.net/u/1757031/blog/493422
2. http://activemq.apache.org/replicated-leveldb-store.html 

没有评论: