ActiveMQ高可用集群部署方案

2022-09-22 18:46:15 浏览数 (1)

一、环境准备

使用vm虚拟机安装两台centos7虚拟机,IP分别为192.168.30.139和140 注意防火墙问题,实验环境可选择关闭防火墙

代码语言:javascript复制
systemctl stop firewalld
systemctl disable firewalld

二、软件准备

1、安装jdk8 查询yum库中java版本

代码语言:javascript复制
yum list java*

需要安装java-1.8.0-openjdk.x86_64java-1.8.0-openjdk-devel.x86_64

代码语言:javascript复制
yum install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64

安装完成,查看java版本 java -version

代码语言:javascript复制
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.05.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

代码语言:javascript复制
<property name="host" value="127.0.0.1"/>

改为

代码语言:javascript复制
<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其实道理完全相同

节点

IP

openwire

admin端口

mq1

192.168.30.139

61616

8161

mq2

192.168.30.139

61617

8162

mq3

192.168.30.139

61618

8163

mq4

192.168.30.140

61619

8164

mq5

192.168.30.140

61620

8165

mq6

192.168.30.140

61621

8166

注意:Master-Slave模式是在一台机器上运行三个程序提供提供3选1的可用性,因此只在192.168.30.159上配置

/usr/local目录下创建mqcluster目录,然后在该目录中创建mq1,mq2,mq3的文件夹

代码语言:javascript复制
mkdir /usr/local/mqcluster/mq1 -p
mkdir /usr/local/mqcluster/mq2 -p
mkdir /usr/local/mqcluster/mq3 -p

将ActiveMQ安装包放入上面三个目录中

代码语言:javascript复制
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

代码语言:javascript复制
vi /usr/local/mqcluster/mq1/conf/activemq.xml
vi /usr/local/mqcluster/mq2/conf/activemq.xml
vi /usr/local/mqcluster/mq3/conf/activemq.xml

代码语言:javascript复制
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">

修改为

代码语言:javascript复制
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="brokerA" dataDirectory="${activemq.data}">

持久化配置 采用KahaDB文件锁方式,让三个服务共用一个KahaDB文件,当主服务崩溃后,备用服务会自动运行。

代码语言:javascript复制
vi /usr/local/mqcluster/mq1/conf/activemq.xml
vi /usr/local/mqcluster/mq2/conf/activemq.xml
vi /usr/local/mqcluster/mq3/conf/activemq.xml

代码语言:javascript复制
<kahaDB directory="${activemq.data}/kahadb"/>

修改为

代码语言:javascript复制
<kahaDB directory="/usr/local/mqcluster/mq1/data/kahadb"/>

修改openwire端口

代码语言:javascript复制
vi /usr/local/mqcluster/mq1/conf/activemq.xml
vi /usr/local/mqcluster/mq2/conf/activemq.xml
vi /usr/local/mqcluster/mq3/conf/activemq.xml

代码语言:javascript复制
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

分别改为

代码语言:javascript复制
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

<transportConnector name="openwire" uri="tcp://0.0.0.0:61617?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

<transportConnector name="openwire" uri="tcp://0.0.0.0:61618?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

注意:该行下面几列如mqttws等原理相同,如果使用需要保证端口不重复,如果不使用请删除!

修改Jetty端口,即web服务端口

代码语言:javascript复制
vi /usr/local/mqcluster/mq1/conf/jetty.xml
vi /usr/local/mqcluster/mq2/conf/jetty.xml
vi /usr/local/mqcluster/mq3/conf/jetty.xml

代码语言:javascript复制
 <property name="host" value="127.0.0.1"/>
        <property name="port" value="8161"/>

分别改为

代码语言:javascript复制
 <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"/>

启动集群

代码语言:javascript复制
/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后,mq2mq3中会选出一个继续提供端口访问。

代码语言:javascript复制
http://192.168.30.139:8161/
http://192.168.30.139:8162/
http://192.168.30.139:8163/

第二种方式: 查看日志,

代码语言:javascript复制
cat /usr/local/mqcluster/mq1/data/activemq.log
cat /usr/local/mqcluster/mq2/data/activemq.log
cat /usr/local/mqcluster/mq3/data/activemq.log

此时主服务器的日志为

代码语言:javascript复制
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

备用服务器日志为

代码语言:javascript复制
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上的mq4mq5mq6

配置Broker-Cluster集群,使两组Master-Slave能够负载均衡

只修改192.168.30.139brokerA

代码语言:javascript复制
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标签前配置

代码语言:javascript复制
<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高可用 负载均衡集群搭建完毕。

0 人点赞