文章目录
- 一、预先准备
- 1. 技术选型
- 2. zk集群搭建
- 3. MQ集群规划
- 二、预先准备
- 2.1. MQ下载
- 2.2. 解压
- 2.3. 复制3分
- 2.4. 修改jetty.xml
- 2.5. 统一所有主从节点 Broker 命名
- 2.6. 修改持久化配置
- 2.7. 修改服务端口
- 2.8. 配置防火墙
- 2.9. MQ启动
- 2.10. 查看 MQ状态
- 三、集群验证测试
- 3.1. 实现思路
- 3.2. 默认测试
- 3.3. 停止8163服务测试
- 四、查看主从状态
- 4.1. 连接 Zk
- 4.2. 查看状态信息
- 4.3. java中的代码
- 五、activeMq主从集群
- 5.1. 准备多份主从模型
- 5.2. 案例
- 六、常用操作
- 6.1. 常用命令
- 6.2. 清除数据
一、预先准备
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