一、预先准备
1. 技术选型
环境 版本详细
zookeeper版本 zookeeper-3.4.12
Linux环境 腾讯云
jdk版本 1.8.0_332
MQ版本 5.16.5
2. zk集群搭建

根据自己的实际情况选择参考

腾讯云~伪集群环境
腾讯云~ zookeeper集群安装、配置、验证

centos7~集群环境

Linux 环境 zookeeper集群安装、配置、验证

3. MQ集群规划

在同一个Linux中安装三个 ActiveMQ 实例, 使用不同端口实现同时启动。 端口分配如下:

主机 集群端口 消息端口 管控台端口 目录
192.168.43.80 62626 61616 8161 /app/mq_01
192.168.43.80 62627 61616 8162 /app/mq_02
192.168.43.80 62628 61616 8163 /app/mq_03
二、预先准备
2.1. MQ下载

官网链接
https://activemq.apache.org/components/classic/download/
在这里插入图片描述

cd /app
wget https://dlcdn.apache.org//activemq/5.16.5/apache-activemq-5.16.5-bin.tar.g z
2.2. 解压
cd /app
tar -zxvf apache-activemq-5.16.5-bin.tar.gz
2.3. 复制3分
cp apache-activemq-5.16.5 mq_01 -r
cp apache-activemq-5.16.5 mq_02 -r
cp apache-activemq-5.16.5 mq_03 -r

在这里插入图片描述

2.4. 修改jetty.xml

打开3个窗口依次操作,修改conf/jetty.xml 中的host地址和端口配置。
host值都为0.0.0.0 ,jetty端口分别是8161、 8162、 8163

vim /app/mq_01/conf/jetty.xml
vim /app/mq_02/conf/jetty.xml
vim /app/mq_03/conf/jetty.xml

mq_01
在这里插入图片描述
mq_02
在这里插入图片描述
mq_03
在这里插入图片描述

host值设置为0.0.0.0是为了windows访问控制台

2.5. 统一所有主从节点 Broker 命名
vim /app/mq_01/conf/activemq.xml
vim /app/mq_02/conf/activemq.xml
vim /app/mq_03/conf/activemq.xml

搜索brokerName,统一为mq-cluster

mq_01
在这里插入图片描述
mq_02
在这里插入图片描述
mq_03
在这里插入图片描述

2.6. 修改持久化配置

修改 conf/activemq.xml 文件
修改 broker标签中子标签 persistenceAdapter相关内容:

replicas属性代表当前主从模型中的节点数量。 按需配置。
bind 属性中的端口为主从实例之间的通讯端口。 代表当前实例对外开放端口是什么, 三个实例分别使用 62626、 62627、 62628端口。
zkAddress 属性代表ZooKeeper安装位置, 安装具体情况设置。
zkPath 是 ActiveMQ 主从信息保存到 ZooKeeper中的什么目录内。
hostname为 ActiveMQ实例安装 Linux的主机名, 可以在/etc/hosts 配置文件中设置。 设置格式为: IP 主机名。 如:127.0.0.1 mq-server

vim /app/mq_01/conf/activemq.xml
vim /app/mq_02/conf/activemq.xml
vim /app/mq_03/conf/activemq.xml

搜索persistenceAdapter
mq_01

 <persistenceAdapter>
        <!-- <kahaDB directory="${activemq.data}/kahadb"/> -->
             <replicatedLevelDB
                directory="${activemq.data}/levelDB"
                replicas="3"
                bind="tcp://0.0.0.0:62626"
                zkAddress="192.168.43.80:2181,192.168.43.80:2182,192.168.43.80:2183"
                zkPath="/activemq/leveldb-stores"
                hostname="mq-server"/>
        </persistenceAdapter>

在这里插入图片描述

mq_02

 <!-- <kahaDB directory="${activemq.data}/kahadb"/> -->
             <replicatedLevelDB
                directory="${activemq.data}/levelDB"
                replicas="3"
                bind="tcp://0.0.0.0:62627"
                zkAddress="192.168.43.80:2181,192.168.43.80:2182,192.168.43.80:2183"
                zkPath="/activemq/leveldb-stores"
                hostname="mq-server"/>
        </persistenceAdapter>

在这里插入图片描述
mq_03

 <persistenceAdapter>
        <!-- <kahaDB directory="${activemq.data}/kahadb"/> -->
             <replicatedLevelDB
                directory="${activemq.data}/levelDB"
                replicas="3"
                bind="tcp://0.0.0.0:62628"
                zkAddress="192.168.43.80:2181,192.168.43.80:2182,192.168.43.80:2183"
                zkPath="/activemq/leveldb-stores"
                hostname="mq-server"/>
        </persistenceAdapter>

在这里插入图片描述

  • 配置host
vim /etc/hosts

添加映射关系

127.0.0.1 mq-server
2.7. 修改服务端口

修改 ActiveMQ对外提供的服务端口。 原默认端口为 61616。
当前环境使用的端口为:61616、 61617、 61618。
修改conf/activemq.xml配置文件。 修改broker 标签中子标签transportConnectors的相关配置

vim /app/mq_01/conf/activemq.xml
vim /app/mq_02/conf/activemq.xml
vim /app/mq_03/conf/activemq.xml

搜索61616
mq_01 保持不变
在这里插入图片描述

mq_02
在这里插入图片描述

mq_03
在这里插入图片描述

2.8. 配置防火墙

控制台端口+通讯端口+集群端口+tcp端口62621

firewall-cmd --zone=public --add-port=8161/tcp --permanent
firewall-cmd --zone=public --add-port=8162/tcp --permanent
firewall-cmd --zone=public --add-port=8163/tcp --permanent
firewall-cmd --zone=public --add-port=5672/tcp --permanent
firewall-cmd --zone=public --add-port=62626/tcp --permanent
firewall-cmd --zone=public --add-port=62627/tcp --permanent
firewall-cmd --zone=public --add-port=62628/tcp --permanent
firewall-cmd --zone=public --add-port=61616/tcp --permanent
firewall-cmd --zone=public --add-port=61617/tcp --permanent
firewall-cmd --zone=public --add-port=61618/tcp --permanent
firewall-cmd --reload

在这里插入图片描述

2.9. MQ启动

mq_01

/app/mq_01/bin/activemq start & tail -f /app/mq_01/data/activemq.log

mq_02

/app/mq_02/bin/activemq start & tail -f /app/mq_02/data/activemq.log

mq_03

/app/mq_03/bin/activemq start & tail -f /app/mq_03/data/activemq.log
2.10. 查看 MQ状态
/app/mq_01/bin/activemq status
/app/mq_02/bin/activemq status
/app/mq_03/bin/activemq status

在这里插入图片描述

三、集群验证测试
3.1. 实现思路
1. 只有一个MQ对外提供服务
2. 当MQ停止运行后,从机会对外提供服务
3. zk会帮助我们完成负载
3.2. 默认测试

测试地址:

http://192.168.43.80:8161/admin
http://192.168.43.80:8162/admin
http://192.168.43.80:8163/admin

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
账号密码都是admin
在这里插入图片描述
从上面测试来看,启动的MQ3个节点,默认只有8163端口对外提供服务

3.3. 停止8163服务测试
 ps -ef|grep mq

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、查看主从状态
4.1. 连接 Zk

${zkHome}/bin/zkCli.sh

cd /app/zookeeper-3.4.12/bin
./zkCli.sh
4.2. 查看状态信息

连接成功后, 可以使用命令ls查看ZooKeeper中的目录结构如:

ls /
ls /activemq/leveldb-stores

在这里插入图片描述

找到对应的内容后, 可以使用命令get 查看 ZooKeeper 中的数据内容

get /activemq/leveldb-stores/00000000028

在这里插入图片描述

get /activemq/leveldb-stores/00000000029

在这里插入图片描述

get /activemq/leveldb-stores/00000000027

在这里插入图片描述

4.3. java中的代码
//普通模式连接工厂
ConnectionFactory factory = new ActiveMQConnectionFactory("guest","guest","tcp://192.168.43.80:61616");
//集群模式连接工厂
// failover -失败转移,当任意节点宕机,自动转移
ConnectionFactory factory = new ActiveMQConnectionFactory("guest","guest",
"failover:(tcp://192.168.43.80:61616,tcp://192.168.43.80:61617,tcp://192.168.43.80:61618)?Randomize=false");
五、activeMq主从集群
5.1. 准备多份主从模型

在所有的 ActiveMQ节点中的 conf/activemq.xml中增加下述配置:
(每个主从模型中的 networkConnector都指向另外一个主从模型)
常用操作

<networkConnectors>
<networkConnector uri="static://(tcp://ip:port,tcp://ip:port)" duplex="false">
</networkConnector>
</networkConnectors>

duplex="false"的意思是不做复制,假入有两个模型,设置为fasle的话,其中得到消息的模型就不会复制到没有得到消息的模型里,如果设置为true,那么得到消息的模型会把消息复制到没有得到消息的模型中去
注意配置顺序,Networks相关配置必须在持久化相关配置之前。 如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://activemq.apache.org/schema/core">
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="mq-cluster"
dataDirectory="${activemq.data}" >
<networkConnectors>
<networkConnector uri=" static://(tcp://ip:port,tcp://ip:port)"/>
</networkConnectors>

<persistenceAdapter>
<replicatedLevelDB directory = "xxx"/>
</persistenceAdapter>
</broker>
</beans>
5.2. 案例

如: 主从模型1 -192.168.159.129主从模型 2 - 192.168.159.130,
在主从模型 1 的所有节点activemq.xml 配置文件中增加标签:

<networkConnectors>
<networkConnector uri="static://(tcp://192.168.159.130:61616,tcp://192.168.159.130:61617)"/>
</networkConnectors>

在模型 2 中所有节点增加配置:

<networkConnectors>
<networkConnector uri="static://(tcp://192.168.159.129:61616,tcp://192.168.159.129:61617)"/>
</networkConnectors>
六、常用操作
6.1. 常用命令

启动MQ

/app/mq_02/bin/activemq start & tail -f /app/mq_02/data/activemq.log

停止MQ

/app/mq_02/bin/activemq stop

查看MQ 状态

/app/mq_02/bin/activemq status

重新启动MQ

/app/mq_02/bin/activemq restart & tail -f /app/mq_02/data/activemq.log
6.2. 清除数据

用于搭建集群环境有问题,重新搭建,建议把zk数据一起清除

rm -rf /app/mq_01/data/levelDB/
rm -rf /app/mq_02/data/levelDB/
rm -rf /app/mq_03/data/levelDB/
cat /dev/null > /app/mq_01/data/activemq.log
cat /dev/null > /app/mq_02/data/activemq.log
cat /dev/null > /app/mq_03/data/activemq.log
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐