美文网首页系统性能优化
ActiveMQ高可用集群部署方案

ActiveMQ高可用集群部署方案

作者: 王忘杰 | 来源:发表于2022-04-09 21:04 被阅读0次

    一、环境准备

    使用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.139616168161

    mq2192.168.30.139616178162

    mq3192.168.30.139616188163

    mq4192.168.30.140616198164

    mq5192.168.30.140616208165

    mq6192.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&amp;wireFormat.maxFrameSize=104857600"/>

    分别改为

    <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"/>

    注意:该行下面几列如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高可用+负载均衡集群搭建完毕。

    相关文章

      网友评论

        本文标题:ActiveMQ高可用集群部署方案

        本文链接:https://www.haomeiwen.com/subject/uzfmsrtx.html