ActiveMQ集群部署与应用
本文主要讲解ActiveMQ的集群部署及主从切换演示,单机版部署及入门请移步 ,本篇内容需要使
用zookeeper集群做支撑,未搭建zookeeper集群的朋友请看我的另一篇文章
简介
在高并发、对稳定性要求极高的系统中,高可用的是必不可少的,当然ActiveMQ也有自己的集群
方案。从ActiveMQ 5.9开始,ActiveMQ的集群实现方式取消了传统的Master-Slave方式,增加了
基于ZooKeeper + LevelDB 的 Master-Slave 实现方式
ActiveMQ3种集群方式对比
(一)基于共享文件系统(KahaDB,默认)
activemq.xml默认
(二)基于JDBC持久化
(三)基于可复制的LevelDB(google开发类库,非服务)
replicas="3" # bind="tcp://0.0.0.0:62621" # zkAddress="localhost:2181,localhost:2182,localhost:2183" hostname="localhost" zkPath="/activemq/leveldb-stores"/>#zookeeper 本文主要讲解基于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模式。 所有需同步的disk的消息操作都将等待存储状态被复制到其他法定节点的操作完成才能完成。所以,如果你配置了replicas=3,那么法定大小是(3/2)+1=2。Master将会存储并更新然后等待(2-1)=1个Slave存储和更新完成,才汇报success。至于为什么是2-1,熟悉Zookeeper的应该知道,有一个node要作为观察者存在。当一个新的Master被选中,你需要至少保障一个法定node在线以能够找到拥有最新状态的node。这个node可以成为新的Master。因此,推荐运行至少3个replica nodes,以防止一个node失败了,服务中断。(原理与Zookeeper集群的高可用实现方式类似) Mq只有Master提供Client服务 集群部署 . 规划 环境:CentOS7_64、JDK7 版本:ActiveMQ 5.9 ZooKeeper集群环境:192.168.2.10:2181、 192.168.2.30:2182 、192.168.40:2183 主机集群端口消息端口管控台端口节点安装目录 192.168.2.1062621515118161/home/lenovo/install/activemq-01 192.168.2.3062622515128162/home/lenovo/install/activemq-03 192.168.2.4062623515138163/home/lenovo/install/activemq-04 1、 防火墙打开对应端口 2、 在3台虚拟机中部署好单节点的mq 3、 修改管理控制台端口(默认为8161)可在conf/jetty.xml中修改,如下: #activemq-01 #activemq-02 #activemq-03 4、集群配置 在3个ActiveMQ节点配置conf/activemq.xml持久化适配器。修改其中bind、zkAddress、hostname 和zkPath。注意:每个activemq的BrokerName必须相同,否则不能加入集群。 在原有的基础上修改即可 修改brokerName为platform_app(可改可不改) 最为重要的是修改persistenceAdapter部分,将其默认的注释,加入如下: #activemq-01 directory="${activemq.data}/leveldb" replicas="3" bind="tcp://0.0.0.0:62621" zkAddress="192.168.2.10:2181,192.168.2.30:2182,192.168.2.40:2183" hostname="lenovo1" zkPath="/activemq/leveldb-stores"/> #activemq-02 directory="${activemq.data}/leveldb" replicas="3" bind="tcp://0.0.0.0:62622" zkAddress="192.168.2.10:2181,192.168.2.30:2182,192.168.2.40:2183" hostname="lenovo3" zkPath="/activemq/leveldb-stores"/> #activemq-03 directory="${activemq.data}/leveldb" replicas="3" bind="tcp://0.0.0.0:62623" zkAddress="192.168.2.10:2181,192.168.2.30:2182,192.168.2.40:2183" hostname="lenovo4" zkPath="/activemq/leveldb-stores"/> 修改各节点的消息端口(注意:避免端口冲突) #activemq-01:51511