Zookeeper + Replicated LevelDB集群配置:
ActiveMQ的多节点集群
从ActiveMQ5.9开始,ActiveMQ的集群实现方式取消了传统的Master-Slave方式,
增加了基于ZooKeeper + LevelDB的Master-Slave实现方式,从5.9版本后也是官网的推荐。
基于Zookeeper 和 LevelDB搭建ActiveMQ集群。集群仅提供主备方式的高可用集群功能,避免单点故障。
原理说明:
使用Zookeeper集群注册所有的ActiveMQ Broker但只有其中一个Broker可以提供服务它将被视为Master,其他的Broker处于待机状态
视为Slave.
如果Master因故障而不能提供服务,Zookeeper会从Slave中选举一个Broker充当Master.
Slave连接Master并同步他们的存储状态,Slave不接受客户端连接,所有的存储操作都将被复制到连接至Master的Slaves。
如果Master宕机得到了最新更新的Slave会成为Master。故障节点在恢复后会重新加入到集群中并连接Master进入Slave模式。
推荐集群最少:3个节点(包括主节点)
apache-activemq-5.15.13-bin.tar.gz
zookeeper-3.4.9.tar.gz
配置ip:port列表:
主机 zookeeper集群端口 AMQ集群bind端口 AMQ消息tcp端口 管理控制台端口 AMQ节点安装目录
192.168.111.136 2181 bind="tcp://0.0.0.0:63631 61616 8161 /mq_cluster/mq_node01
192.168.111.136 2182 bind="tcp://0.0.0.0:63632 61617 8162 /mq_cluster/mq_node02
192.168.111.136 2183 bind="tcp://0.0.0.0:63633 61618 8163 /mq_cluster/mq_node03
1 具备zk集群并成功启动
2 创建3台集群目录(ActiveMQ复制三份)
3 修改管理控制台端口: jetty.xml
4 hostname名字映射(linux: etc/hosts)
5 ActiveMQ集群配置: 持久化配置Replicated LevelDB activemq.xml
6 修改各节点的消息端口 activemq.xml
7 修改集群名称brokerName: activemq.xml
8 按顺序启动ActiveMQ节点。
集群启动脚本:
#!bin/sh
cd /mq_cluster/mq_node01/bin
./activemq start
cd mq_cluster/mq_node02/bin
./activemq start
cd /mq_cluster/mq_node03/bin
./activemq start
8 zookeeper查看activemq集群是否搭建成功:
ls /activemq/leveldb-stores
查看activemq主节点:
在zookeeper客户端命令中,查看activemq各个节点数据信息:
elected:“有值” 则为master
elected:“null” 则为slave
ActiveMQ的客户端只能访问Mster的Broker,其他处于Slave的Broker不能访问,所以客户端连接的Broker应该使用
failover协议(失败转移)
当一个ActiveMQ节点挂掉或者一个zookeeper节点挂掉,Activemq服务依然正常运转,如果仅剩一个ActiveMQ节点,由于
不能选举Master,所以ActiveMQ不能正常运行。
同理:
如果zookeeper仅剩一个节点活动,不管ActiveMQ各节点存活,ActiveMQ也不能正常提供服务。(ActiveMQ集群的高可用,依赖于zookeeper集群的高可用)
注意:zookeeper+Replicated LevelDB集群配置版本号,要对应的上,不然集群可能有问题。
已验证没有问题的搭配版本:
zookeeper-3.4.9.tar
apache-activemq-5.15.9-bin.tar