前言

  本章学习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>

<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宕机,看是否会选出新的主机,我这里试下来是没问题的。

/usr/local/activemq/bin/activemq start

/usr/local/activemq/bin/activemq stop

/usr/local/activemq/bin/zkCli.sh
tail /usr/local/activemq/data/activemq.log
/usr/local/zookeeper/bin/zkServer.sh status
/bin/zkCli.sh
/usr/local/zookeeper/bin/zkCli.sh
/activemq/leveldb-stores

cd /usr/local/activemq/conf

————————————————
版权声明:本文为CSDN博主「程序猴jwang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_21046965/java/article/details/88383895