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

改為

啟動服務

。/apache-activemq-5。16。4/bin/activemq start

登入web平臺,賬號密碼admin

http://192。168。30。140:8161/

ActiveMQ高可用叢集部署方案

三、部署Master-Slave模式

使用Shared Filesystem Master-Slave KahaDB檔案鎖方式

ActiveMQ高可用叢集部署方案

規劃如下,僅以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

修改為

持久化配置

採用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

修改為

修改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

imumConnections=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

分別改為

啟動叢集

/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能夠負載均衡

ActiveMQ高可用叢集部署方案

只修改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標籤前配置

重新啟動所有節點即完成配置,配置開機啟動和程序守護等內容本文不再贅述。

至此,ActiveMQ高可用+負載均衡叢集搭建完畢。

頂部