作者:王忘傑
一、環境準備
使用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/
三、部署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
將
修改為
持久化配置
採用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能夠負載均衡
只修改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高可用+負載均衡叢集搭建完畢。