前言
本章学习ActiveMQ的主从搭建
方法
1.概念
我们之前学习过Redis的主从复制,那么ActiveMQ的主从也是一样的。
Redis需要哨兵监控,而我们的ActiveMQ则需要zookeeper的帮助。下面让我们慢慢学习。
zookeeper(zk):
zooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
简单的说,zk的功能就是为我们的ActiveMQ提供集群服务,监控MQ的主从节点,MQ主机宕机自动进行选举。
为了实现高可用,我们的zk也需要进行集群的搭建,本次选择三个zk进行搭建,一般是奇数个。
2.zookeeper集群搭建
注意:前提需要有JDK事先安装完毕
1)zookeeper的下载
网址:https://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/
2)将下载好的安装包拷贝到linux服务器中
3)解压缩
tar -zxvf zookeeper-3.4.9.tar.gz -C /usr/local/
4)进入到zk的配置目录找到zk的核心配置文件模板复制一份作为其配置文件
5)创建zk临时数据目录,在目录中存放服务器唯一标识
另外两个服务器的myid为2和3
6)配置zk配置文件zoo.cfg
第一步:配置zoo.cfg的数据目录为之前我们建立的data目录
第二步:配置集群所需要的配置。需要 server.编号= ip:投票端口:选举端口
投票端口:用来决定正在运行的主机是否宕机
选举端口:用来决定哪一个zk作为主机
以上配置保证了ZK的高可用,避免一个ZK宕机造成的严重后果。
上述投票端口以及选举端口可以进行自定义配置!
上述代表配置三个zk,ip以及对应的投票端口和选举端口
7)启动zk
8)验证zookeeper集群
使用如下命令查找主从:
192.168.1.103:
192.168.1.104:
192.168.1.105:
通过上面我们不难看出,104是主机,103和105是从机,它们一起构成了zk集群服务。
3.ActiveMQ主从搭建
我们将使用192.168.1.103,192.168.1.104以及192.168.1.105三台服务器实现MQ的主从搭建。
我们需要实现将MQ分别安装在这三台服务器中。
官方介绍了三种主从的搭建机制,这里我们选择第三种
从上面可以看出,因为快所以我们建议使用这个。
1)配置MQ配置文件activemq.xml
这里我们将采用LevelDB的持久化机制,并配合zookeeper实现主从搭建。
首先需要修改对应三台MQ的broker的name保持一致,本次指定为mq-cluster:
其次需要对MQ的服务端口进行修改,三个分别为:61616,61617,61618
最后,在这里<persistenceAdapter>下加入如下配置:
<persistenceAdapter>
<replicatedLevelDB
directory="${activemq.data}/leveldb"
replicas="3"
bind="tcp://0.0.0.0:62623"
zkAddress="192.168.1.103:2181,192.168.1.104:2181,192.168.1.105:2181"
hostname="192.168.1.103"
zkPath="/activemq/leveldb-stores"/>
</persistenceAdapter>
主要配置讲解:
- directory:表示leveldb数据库持久化文件的存储位置
- replicas:表示MQ的节点个数
- bind:该处绑定MQ之间的通信端口,为了避免冲突分别设置为62623,62624,62625
- zkAddress:该处绑定zk的ip和端口号,本次是三个zk
- hostname:该处表示主机的ip,103即设置为192.168.1.103
- zkPath:该处表示主从节点信息存储的位置,默认位置为zk目录下的/activemq/leveldb-stores
2)配置jetty.xml文件
为了避免我们的web应用管理界面发生端口冲突,我们对三个MQ分别进行修改,分别为8161,8162,8163
3)分别启动三个MQ
观察各自的MQ是否成功启动:
4)查询MQ的主从节点信息
进入到zk的bin目录下,运行如下指令:
进入到对应的MQ节点信息存储目录:
我们可以发现三个节点,15,16,17
那么到底哪个MQ是主节点呢,我们使用如下命令查看节点信息:
17节点信息如下:
从上面可以看出,该节点不是主节点,而是从节点,因为它的elected的属性值是null
15节点信息如下:
从上面可以看出,该节点是主节点,因为它的elected的属性值存在
主节点为104,从节点那就是103和105了。
访问主机的web应用地址:
那么,大家可以试试将主MQ宕机,看是否会选出新的主机,我这里试下来是没问题的。