1、说明html
实际的应用中,通常为了应用的高可用性,都会搭建集群环境去处理。部署多台应用,这样,即便一台有问题,其余热备应用能够立马顶上,继续提供服务。java
ActiveMQ的集群部署,基于zookeeper的应用程序协调服务和levelDB的持久化方案。linux
本文中,基于一个系统环境,搭建伪集群模式,经过不一样端口的配置,达到集群安装的效果。web
基本环境:jdk-7u80-linux-x64.tar.gz、Centos 6.九、zookeeper-3.4.12.tar.gz、apache-activemq-5.9.1-bin.tar.gz、Xshell。shell
应用部署:zookeeper启动3个应用实例,ActiveMQ部署3套应用实例,构成最小单元的集群部署apache
其中zookeeper的集群搭建,参见以前文章:https://www.cnblogs.com/eric-fang/p/9283904.htmltcp
2、ActiveMQ的集群配置spa
ActiveMQ的主从模型,是一种高可用的解决方案,在zookeeper中注册若干的ActiveMQ Broker,其中只有一台做为主机master对外提供服务,其余做为备份slave保持待机。当master出现问题致使宕机不能正常提供服务的时候,zookeeper经过内部选举,在众多slave中推举出一台做为master继续对外提供服务。3d
一、安装ActiveMQ日志
上传apache-activemq-5.9.1-bin.tar.gz至linux,解压,而后修改拷贝,整出三份应用实例:
二、修改配置
2.一、修改服务端口(activemq.xml)
分别修改对外提供的openwire服务端口为6161六、6161七、61618。待修改的地方以下:
<transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
2.二、修改持久化策略(activemq.xml)
修改 persistenceAdapter 标签中的内容,其中相关属性说明以下:
replicas - 当前主从模型中的节点数,根据实际配置
bind - 主从实例间的通信端口。分别配置为6262六、6262七、62628
zkAddress - zookeeper应用的安装位置
zkPath - ActiveMQ的主从信息保存在zookeeper中的什么目录
hostname - ActiveMQ实例安装的实际linux主机名。可在 /etc/hosts 中进行配置,设置格式:ip 主机名,例如127.0.0.1 mq-server
<persistenceAdapter>
<replicatedLevelDB
directory="${activemq.data}/levelDB"
replicas="3"
bind="tcp://0.0.0.0:62626"
zkAddress="172.17.0.4:2181,172.17.0.4:2182,172.17.0.4:2183"
zkPath="/activemq/leveldb-stores"
hostname="mq-server"
/>
</persistenceAdapter>
2.三、修改broker标签属性(activemq.xml)
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="mq-cluster" dataDirectory="${activemq.data}">
全部的主从节点,上述的brokerName必须一致。
2.四、修改控制台访问端口(jetty.xml)
分别修改jetty的访问端口为:816一、816二、8163
<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">
<!-- the default port number for the web console -->
<property name="port" value="8161"/>
</bean>
二、启动ActiveMQ应用
配置完成后,分别启动3个ActiveMQ应用,启动命令:${activemq-home}/bin/activemq start。启动后,能够jps看是否存在,也能够查看日志文件,日志目录:${activemq-home}/data/activemq.log
三、查验ActiveMQ的状态
能够在zookeeper中查验ActiveMQ的主从状态
3.一、${zookeeper-home}/bin/zkCli.sh
3.二、ls /activemq/leveldb-stores 查看ActiveMQ节点注册信息。
3.三、get /activemq/leveldb-stores/000000000037 能够查验当前哪台ActiveMQ做为主机提供服务,其中主节点的address和elected必定非null,有数据。
3、集群的使用
ActiveMQ使用的时候,就是在设置brokerURL的时候,设置为失败转移便可:
failover:(tcp://111.231.51.200:61616,tcp://111.231.51.200:61617,tcp://111.231.51.200:61618)?initialReconnectDelay=1000
4、可能遇到问题
配置过程当中个,3个 zk 应用和3个 ActiveMQ应用启动正常,从 zk 中查看ActiveMQ的主从也选举OK,可是,在访问ActiveMQ控制台以及发送消息的时候,就是不通。查看端口占用的,ActiveMQ提供服务的应用端口竟然也没有正常监听。查看从应用的日志( ${activemq-home/data/activemq.log} ),发现一直报错:
看错误,未知主机错误。解决办法:vi /etc/hosts
增长配置:127.0.0.1 cfang
再回头查看日志,下面不会继续报错,正常组成主从,主服务端口监听正常。