ActiveMQ高可用集群部署方案
一、环境准备
使用vm虚拟机安装两台centos7虚拟机,IP分别为192.168.30.139和140
注意防火墙问题,实验环境可选择关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
二、软件准备
1、安装jdk8
查询yum库中java版本
yum list java*
需要安装java-1.8.0-openjdk.x86_64和java-1.8.0-openjdk-devel.x86_64
yum install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64
安装完成,查看java版本
java -version
openjdk version "1.8.0_322"
OpenJDK Runtime Environment (build 1.8.0_322-b06)
OpenJDK 64-Bit Server VM (build 25.322-b06, mixed mode)
2、安装ActiveMQ
当前官网ActiveMQ版本有两个,ActiveMQ 5.17.0和 5.16.4,其支持的功能和环境不同,我这里使用5.16.4
下载并上传到两台服务器
https://activemq.apache.org/components/classic/download/
解压缩
tar xvzf apache-activemq-5.16.4-bin.tar.gz
3、单机测试ActiveMQ
编辑 ./apache-activemq-5.16.4/conf/jetty.xml
将
<property name="host" value="127.0.0.1"/>
改为
<property name="host" value="0.0.0.0"/>
启动服务
./apache-activemq-5.16.4/bin/activemq start
登录web平台,账号密码admin
http://192.168.30.140:8161/
三、部署Master-Slave模式
使用Shared Filesystem Master-Slave KahaDB文件锁方式
规划如下,仅以openwire举例,其他服务如MQTT其实道理完全相同
节点IPopenwireadmin端口mq1192.168.30.139616168161mq2192.168.30.139616178162mq3192.168.30.139616188163mq4192.168.30.140616198164mq5192.168.30.140616208165mq6192.168.30.140616218166
注意:Master-Slave模式是在一台机器上运行三个程序提供提供3选1的可用性,因此只在192.168.30.159上配置
在/usr/local目录下创建mqcluster目录,然后在该目录中创建mq1,mq2,mq3的文件夹
mkdir /usr/local/mqcluster/mq1 -p
mkdir /usr/local/mqcluster/mq2 -p
mkdir /usr/local/mqcluster/mq3 -p
将ActiveMQ安装包放入上面三个目录中
cp -r ./apache-activemq-5.16.4/* /usr/local/mqcluster/mq1
cp -r ./apache-activemq-5.16.4/* /usr/local/mqcluster/mq2
cp -r ./apache-activemq-5.16.4/* /usr/local/mqcluster/mq3
配置brokername
vi /usr/local/mqcluster/mq1/conf/activemq.xml
vi /usr/local/mqcluster/mq2/conf/activemq.xml
vi /usr/local/mqcluster/mq3/conf/activemq.xml
将
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
修改为
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="brokerA" dataDirectory="${activemq.data}">
持久化配置
采用KahaDB文件锁方式,让三个服务共用一个KahaDB文件,当主服务崩溃后,备用服务会自动运行。
vi /usr/local/mqcluster/mq1/conf/activemq.xml
vi /usr/local/mqcluster/mq2/conf/activemq.xml
vi /usr/local/mqcluster/mq3/conf/activemq.xml
将
<kahaDB directory="${activemq.data}/kahadb"/>
修改为
<kahaDB directory="/usr/local/mqcluster/mq1/data/kahadb"/>
修改openwire端口
vi /usr/local/mqcluster/mq1/conf/activemq.xml
vi /usr/local/mqcluster/mq2/conf/activemq.xml
vi /usr/local/mqcluster/mq3/conf/activemq.xml
将
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
分别改为
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61617?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61618?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
注意:该行下面几列如mqtt、ws等原理相同,如果使用需要保证端口不重复,如果不使用请删除!
修改Jetty端口,即web服务端口
vi /usr/local/mqcluster/mq1/conf/jetty.xml
vi /usr/local/mqcluster/mq2/conf/jetty.xml
vi /usr/local/mqcluster/mq3/conf/jetty.xml
将
<property name="host" value="127.0.0.1"/>
<property name="port" value="8161"/>
分别改为
<property name="host" value="0.0.0.0"/>
<property name="port" value="8161"/>
<property name="host" value="0.0.0.0"/>
<property name="port" value="8162"/>
<property name="host" value="0.0.0.0"/>
<property name="port" value="8163"/>
启动集群
/usr/local/mqcluster/mq1/bin/activemq start
/usr/local/mqcluster/mq2/bin/activemq start
/usr/local/mqcluster/mq3/bin/activemq start
测试集群是否生效
第一种方式:
通过web端口,同时只有一个端口能够访问,如mq1能够访问,通过/usr/local/mqcluster/mq1/bin/activemq stop后,mq2和mq3中会选出一个继续提供端口访问。
http://192.168.30.139:8161/
http://192.168.30.139:8162/
http://192.168.30.139:8163/
第二种方式:
查看日志,
cat /usr/local/mqcluster/mq1/data/activemq.log
cat /usr/local/mqcluster/mq2/data/activemq.log
cat /usr/local/mqcluster/mq3/data/activemq.log
此时主服务器的日志为
2022-04-09 08:03:40,021 | INFO | ActiveMQ Jolokia REST API available at http://0.0.0.0:8161/api/jolokia/ | org.apache.activemq.web.WebConsoleStarter | main
备用服务器日志为
2022-04-09 08:06:01,001 | INFO | Database /usr/local/mqcluster/mq1/data/kahadb/lock is locked by another server. This broker is now in slave mode waiting a lock to be acquired | org.apache.activemq.store.SharedFileLocker | main
四、配置Broker-Cluster集群
准备工作:
将第二台服务器按Master-Slave模式搭建完,注意搭建的是192.168.30.140上的mq4、mq5、mq6
配置Broker-Cluster集群,使两组Master-Slave能够负载均衡
只修改192.168.30.139即brokerA组
vi /usr/local/mqcluster/mq1/conf/activemq.xml
vi /usr/local/mqcluster/mq2/conf/activemq.xml
vi /usr/local/mqcluster/mq3/conf/activemq.xml
在persistenceAdapter标签前配置
<networkConnectors>
<networkConnector name="brokerB" uri="static:(tcp://192.168.30.140:61619,tcp://192.168.30.140:61620,tcp://192.168.30.140:61621)" duplex="true" />
</networkConnectors>
重新启动所有节点即完成配置,配置开机启动和进程守护等内容本文不再赘述。
至此,ActiveMQ高可用+负载均衡集群搭建完毕。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~




AzraelF
校验提示文案
群众A
校验提示文案
biAji
校验提示文案
icedirlee
校验提示文案
最爱早睡的人
校验提示文案
cnadl
校验提示文案
阿瞳君
校验提示文案
gongdonghui
校验提示文案
阿瞳君
校验提示文案
cnadl
校验提示文案
gongdonghui
校验提示文案
最爱早睡的人
校验提示文案
AzraelF
校验提示文案
icedirlee
校验提示文案
biAji
校验提示文案
群众A
校验提示文案