ActiveMQ高可用集群部署方案

一、環(huán)境準(zhǔn)備
使用vm虛擬機(jī)安裝兩臺(tái)centos7虛擬機(jī),IP分別為192.168.30.139和140
注意防火墻問(wèn)題,實(shí)驗(yàn)環(huán)境可選擇關(guān)閉防火墻
systemctl stop firewalld
systemctl disable firewalld
二、軟件準(zhǔn)備
1、安裝jdk8
查詢yum庫(kù)中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
當(dāng)前官網(wǎng)ActiveMQ版本有兩個(gè),ActiveMQ 5.17.0
和?5.16.4
,其支持的功能和環(huán)境不同,我這里使用5.16.4
下載并上傳到兩臺(tái)服務(wù)器
https://activemq.apache.org/components/classic/download/
解壓縮tar xvzf apache-activemq-5.16.4-bin.tar.gz
3、單機(jī)測(cè)試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"/>
啟動(dòng)服務(wù)./apache-activemq-5.16.4/bin/activemq start
登錄web平臺(tái),賬號(hào)密碼admin
http://192.168.30.140:8161/

三、部署Master-Slave模式
使用Shared Filesystem Master-Slave KahaDB文件鎖方式

規(guī)劃如下,僅以openwire舉例,其他服務(wù)如MQTT其實(shí)道理完全相同
節(jié)點(diǎn)IPopenwireadmin端口mq1192.168.30.139616168161mq2192.168.30.139616178162mq3192.168.30.139616188163mq4192.168.30.140616198164mq5192.168.30.140616208165mq6192.168.30.140616218166
注意:Master-Slave模式是在一臺(tái)機(jī)器上運(yùn)行三個(gè)程序提供提供3選1的可用性,因此只在192.168.30.159上配置
在/usr/local
目錄下創(chuàng)建mqcluster
目錄,然后在該目錄中創(chuàng)建mq1
,mq2
,mq3
的文件夾
mkdir /usr/local/mqcluster/mq1 -p
mkdir /usr/local/mqcluster/mq2 -p
mkdir /usr/local/mqcluster/mq3 -p
將ActiveMQ安裝包放入上面三個(gè)目錄中
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文件鎖方式,讓三個(gè)服務(wù)共用一個(gè)KahaDB文件,當(dāng)主服務(wù)崩潰后,備用服務(wù)會(huì)自動(dòng)運(yùn)行。
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
等原理相同,如果使用需要保證端口不重復(fù),如果不使用請(qǐng)刪除!
修改Jetty端口,即web服務(wù)端口
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"/>
啟動(dòng)集群
/usr/local/mqcluster/mq1/bin/activemq start
/usr/local/mqcluster/mq2/bin/activemq start
/usr/local/mqcluster/mq3/bin/activemq start
測(cè)試集群是否生效
第一種方式:
通過(guò)web端口,同時(shí)只有一個(gè)端口能夠訪問(wèn),如mq1能夠訪問(wèn),通過(guò)/usr/local/mqcluster/mq1/bin/activemq stop
后,mq2
和mq3
中會(huì)選出一個(gè)繼續(xù)提供端口訪問(wèn)。
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
此時(shí)主服務(wù)器的日志為
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
備用服務(wù)器日志為
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集群
準(zhǔn)備工作:
將第二臺(tái)服務(wù)器按Master-Slave
模式搭建完,注意搭建的是192.168.30.140
上的mq4
、mq5
、mq6
配置Broker-Cluster集群,使兩組Master-Slave能夠負(fù)載均衡

只修改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
標(biāo)簽前配置
<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>
重新啟動(dòng)所有節(jié)點(diǎn)即完成配置,配置開(kāi)機(jī)啟動(dòng)和進(jìn)程守護(hù)等內(nèi)容本文不再贅述。
至此,ActiveMQ高可用+負(fù)載均衡集群搭建完畢。