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集群:
版本:
(2)解压并移动至/usr/local/目录下,改名为zookeeper
tar -zxf zookeeper-3.4.6.tar.gz -C /usr/local/zookeeper
(3)cd zookeeper/conf下
修改zoo_sample.cfg文件 首先改名为zoo.cfg (一定要改)
mv zoo_sample.cfg zoo.cfg
vim zoo.cfg(三个节点同时修改)
(4)在zookeeper文件夹下创建data文件夹,并cd进入
(5)创建文件myid,只写“0”(三个节点各写0,1,2)
与这里的server节点对应
(6)修改/etc/profile将zookeeper中bin文件下的命令加入classpath,让其可以全局访问
vim /etc/profile
sourcr /etc/profile //刷新配置文件
(7)zkServer.sh start启动三个服务器
(8)查看服务器状态
zkServer.sh status
可见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
(2)更改node2/conf和node3/conf下的jetty.xml文件中,搜索port,将8161对应更改为8162和8163
(4)分别更改node2和node3的conf下的activemq.xml文件
1)更改borkerName,将集群中的服务名设置成相同的
2)将存储方式更改为google的leveldb,性能更好
(3)修改后端数据访问的端口分别改为51511 51512 51513
(4)分别启动,bin/activemq start,注:前台管理页面只有主节点能够访问。
4 切换到zookeeper查看activemq集群状态
多了activemq的目录,深入进去
发现有三个节点,就是我们搭建的mq的集群
当把8161停掉后:
节点减少为两个
再将8161启动
重新恢复为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>
这样两个节点就可以实现通信了。