烂泥:ActiveMQ的集群安装与配置
Posted 烂泥行天下
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了烂泥:ActiveMQ的集群安装与配置相关的知识,希望对你有一定的参考价值。
上一篇文章介绍了有关ActiveMQ的安装,这篇文章来介绍下ActiveMQ集群的安装与配置。
ActiveMQ集群是依赖于ZooKeeper集群而存在的,有关ZooKeeper集群的搭建可以参考《烂泥:zookeeper集群搭建》这篇文章。
PS:在此我们把ZooKeeper集群和ActiveMQ集群安装在同样三台机器上。
一、ActiveMQ集群原理
ActiveMQ集群原理,使用ZooKeeper集群注册所有的ActiveMQ Broker。只有其中的一个Broker可以对外提供服务,被视为master。而其他的Broker处于待机状态,被视为slave。而此时slave只是做数据的主从同步。
如果master因故障而不能提供服务,ZooKeeper集群会从slave中选举出一个Broker充当 master。slave连接master并同步它们的存储状态,slave不接受客户端连接。所有的存储操作都将被复制到连接至master的slave上。
如果master宕机了,得到了最新更新的slave会成为master。而故障节点在恢复后会重新加入到集群中并连接 master进入slave模式。
需要同步的消息操作都将等待存储状态被复制到其他节点的操作完成后才能完成。
所以,如果你配置了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集群的高可用实现方式类似)。
二、初始化环境
至少需要三台机器,这三台机器都已经安装ActiveMQ服务,ZooKeeper集群也已经配置完毕。
这三台机器的IP分别为10.1.1.127,10.1.1.128,10.1.1.129。如下:
查看ZooKeeper集群的情况,使用如下命令:
/usr/local/zookeeper/bin/zkServer.shstatus
通过以上截图信息,我们可以很明显的看到ActiveMQ都已经安装完毕,而且ZooKeeper集群也正常启动。
环境初始化完毕后,下面开始配置ActiveMQ集群。
三、配置ActiveMQ集群
ActiveMQ集群的配置比较简单,我们只需要修改ActiveMQ的配置文件activemq.xml中部分内容即可。
ActiveMQ根目录下的conf/activemq.xml文件,原来默认内容如下:
vim conf/activemq.xml +81
<persistenceAdapter>
<kahaDBdirectory="${activemq.data}/kahadb"/>
</persistenceAdapter>
修改后的内容如下:
vimconf/activemq.xml +81
<persistenceAdapter>
<replicatedLevelDB
directory="${activemq.data}/leveldb"
replicas="3"
bind="tcp://0.0.0.0:0"
zkAddress="10.1.1.127:2181,10.1.1.128:2181,10.1.1.129:2181"
zkSessionTimeout="4s"
hostname="10.1.1.127"
sync="local_disk"
zkPath="/activemq/leveldb-stores"
/>
</persistenceAdapter>
上述配置的意义解释如下:
directory:表示ActiveMQ集群消息持久化保存到服务器上的路径,注意该路径一定要先创建好。
replicas:表示ActiveMQ集群的节点个数。
zkAddress:表示ZooKeeper的ip和port。如果是ZooKeeper集群的话,则用逗号隔开。
zkSessionTimeout:表示ActiveMQ与ZooKeeper集群连接的会话超时时间。
sync:在消息被消费完成前,同步信息所存贮的策略。如果有多种策略用逗号隔开,ActiveMQ会选择较强的策略。而如果有local_mem, local_disk这两种策略的话,那么ActiveMQ则优先选择local_disk策略,存储在本地硬盘。
zkPath:表示ActiveMQ在ZooKeeper集群上创建的znode节点的路径,也即是ZooKeeper选举信息交换的存贮路径。
注意:这3个ActiveMQ节点中的brokerName配置必须相同,否则不能加入集群。
四、启动ActiveMQ集群
ActiveMQ集群配置完毕后,我们现在来启动ActiveMQ集群。但是在正式启动ActiveMQ集群之前,一定要先启动ZooKeeper集群。
要启动ActiveMQ集群,我们只需要启动这3台服务器的ActiveMQ服务即可。如下:
/usr/local/activemq/bin/activemqstart
ps -ef |grep mq
ActiveMQ集群启动完毕,根据ZooKeeper的策略,会从这三台ActiveMQ服务器选一台作为master对外提供服务,其他两台作为slave等待运行,而slave只是做数据上的主从同步。
所以,ActiveMQ集群后,访问http://10.1.1.127:8161/admin/、http://10.1.1.128:8161/admin/、http://10.1.1.129:8161/admin/只会有一个成功。
那么现在在ActiveMQ集群中,如何查看哪一台服务器是master节点呢?
我们可以通过查看这三台服务器哪一台服务器监听8161端口,来判断哪台服务器是master节点。
现在在切换到服务器上查看监听的端口,如下:
netstat -tunlp |grep 8161
通过上图,我们可以很明显的看出,目前只有10.1.1.127这台服务器监听8161端口的。那就说明目前10.1.1.127是master节点。其他两个节点是slave节点,处于待机状态,没有监听8161端口。
现在我们再来看访问10.1.1.127服务器ActiveMQ管理控制台看看,如下:
到此说明ActiveMQ集群已经部署完毕。
五、验证ActiveMQ集群高可用
要验证ActiveMQ集群的高可用,我们只需要关闭能访问http://ip:8161/admin/的ActiveMQ服务,然后访问其他两个。
如果其中有一个能访问,那就说明ActiveMQ+ZooKeeper集群高可用已经配置成功。
通过第四章节,我们知道目前master节点是10.1.1.127这台服务器。现在我们来关闭10.1.1.127这台服务器的ActiveMQ服务,看看ActiveMQ集群,是否能正常访问。如下:
ps -ef |grep mq
kill -9 3889
上图中,我们已经把10.1.1.127这台服务器的ActiveMQ服务已经关闭了。
现在我们再来看看目前哪台服务器是master节,也即是查看哪台服务器的8161端口对外提供服务器。如下:
netstat -tunlp |grep 8161
ps -ef |grep mq
通过上图,我们可以很明显的看出目前10.1.1.128这台服务器是master节点。现在我再来通过管理控制台访问10.1.1.128的8161端口看看。如下:
http://10.1.1.128:8161/admin/
通过上图,我们可以很明显的看出10.1.1.127这台服务器的ActiveMQ服务停止后,并没有影响ActiveMQ集群的正常运行。这也就说明了ActiveMQ集群是正常工作的。
到此,有关ActiveMQ集群的搭建与配置已经全部完毕。
以上是关于烂泥:ActiveMQ的集群安装与配置的主要内容,如果未能解决你的问题,请参考以下文章
ActiveMQ 笔记Windows部署:单机与集群部署流程