1 简介:

使用ZooKeeper实现的Master-Slave实现方式,是对ActiveMQ进行高可用的一种有效的解决方案,高可用的原理:使用ZooKeeper(集群)注册所有的ActiveMQ  Broker。只有其中的一个Broker可以对外提供服务(也就是master节点),其他的Broker处于待机状态,被视为Slave。如果Master因为故障而不能提供服务,则利用ZooKeeper内部的选举机制从Slave中选举出一个Broker充当Master节点,继续对外提供服务。

2 搭建zookeeper集群环境

zookeeper方案:
主机ip:192.168.25.129,192.168.25.130,192.168.25.131
消息端口:都是2181
集群通信端口:5888:9888
节点目录:都是/usr/local/zookeeper

(1)启动三个节点,布置ZooKeeper集群:
ZooKeeper+ActiveMQ集群搭建
版本:
ZooKeeper+ActiveMQ集群搭建
(2)解压并移动至/usr/local/目录下,改名为zookeeper
tar -zxf  zookeeper-3.4.6.tar.gz -C /usr/local/zookeeper
ZooKeeper+ActiveMQ集群搭建
(3)cd zookeeper/conf下
修改zoo_sample.cfg文件  首先改名为zoo.cfg  (一定要改)
mv zoo_sample.cfg zoo.cfg
vim zoo.cfg(三个节点同时修改)

ZooKeeper+ActiveMQ集群搭建

(4)在zookeeper文件夹下创建data文件夹,并cd进入
ZooKeeper+ActiveMQ集群搭建
(5)创建文件myid,只写“0”(三个节点各写0,1,2)
ZooKeeper+ActiveMQ集群搭建
与这里的server节点对应

ZooKeeper+ActiveMQ集群搭建
(6)修改/etc/profile将zookeeper中bin文件下的命令加入classpath,让其可以全局访问
vim /etc/profile    
ZooKeeper+ActiveMQ集群搭建
sourcr /etc/profile  //刷新配置文件
(7)zkServer.sh start启动三个服务器
(8)查看服务器状态
zkServer.sh status
ZooKeeper+ActiveMQ集群搭建
ZooKeeper+ActiveMQ集群搭建
ZooKeeper+ActiveMQ集群搭建

可见ip:192.168.25.131为主节点。至此zookeeper集群服务器搭建完成。

3 搭建ActiveMQ集群

搭建环境:
ip:都是192.168.25.129,共三个节点
集群通信端口:62621,62622,62623
消息端口:51511,51512,51513
节点目录:/usr/local/activeMQ

(1)在/usr/local下创建文件夹activemq-cluster
解压mq到activemq-cluster文件夹下,将mq改名为node1,在复制两份node2,node3
ZooKeeper+ActiveMQ集群搭建
(2)更改node2/conf和node3/conf下的jetty.xml文件中,搜索port,将8161对应更改为8162和8163
ZooKeeper+ActiveMQ集群搭建

(4)分别更改node2和node3的conf下的activemq.xml文件
1)更改borkerName,将集群中的服务名设置成相同的
ZooKeeper+ActiveMQ集群搭建
2)将存储方式更改为google的leveldb,性能更好
ZooKeeper+ActiveMQ集群搭建
(3)修改后端数据访问的端口分别改为51511  51512  51513
ZooKeeper+ActiveMQ集群搭建

(4)分别启动,bin/activemq start,注:前台管理页面只有主节点能够访问。

4 切换到zookeeper查看activemq集群状态
ZooKeeper+ActiveMQ集群搭建
多了activemq的目录,深入进去
ZooKeeper+ActiveMQ集群搭建
发现有三个节点,就是我们搭建的mq的集群

当把8161停掉后:
ZooKeeper+ActiveMQ集群搭建
节点减少为两个
再将8161启动
ZooKeeper+ActiveMQ集群搭建

重新恢复为3个

至此mq主从复制集群搭建完毕。

4 搭建双主多从高可用可扩展

另一套搭建方案:
ip:都是192.168.25.130,共三个节点
集群通信端口:61614,61615,61616
消息端口:51511,51512,51513
节点目录:/usr/local/activeMQ

同样的步骤搭建起来另外一套集群,然后再之前mq的conf下的activemq.xml文件中添加(添加在persistenceAdapter也就是数据源节点之前)

<networkConnectors>
           <networkConnector name="local network" duplex="true" conduitSubscriptions="false" uri="static://(tcp://19
            2.168.25.130:61616,tcp://2.168.25.130:61615,tcp://2.168.25.130:61614)"/>

</networkConnectors>

在这套新搭建的集群的conf下的activemq.xml文件中添加:
<networkConnectors>
           <networkConnector name="local network" duplex="true" conduitSubscriptions="false" uri="static://(tcp://19
            2.168.25.129:51511,tcp://192.168.25.129:51512,tcp://192.168.25.129:51513)"/>

</networkConnectors>

这样两个节点就可以实现通信了。

相关文章: