本文章默认zookeeper集群已搭建完成,zookeeper集群的搭建请参考https://blog.csdn.net/u010229677/article/details/103811307
1.创建存放目录并下载activemq安装包
mkdir /home/activemq_cluster
cd /home/activemq_cluster
wget https://archive.apache.org/dist/activemq/5.14.0/apache-activemq-5.14.0-bin.tar.gz
2.解压并重命名
tar -xvf apache-activemq-5.14.0-bin.tar.gz
mv apache-activemq-5.14.0 activemq1
cp -r activemq1 activemq2
cp -r activemq1 activemq3
ll 确认activemq_cluster文件夹下有 activemq1,activemq2,activemq3三个文件夹
3.修改配置文件(conf/activemq.xml,conf/jetty.xml)
cd .. 返回activemq_cluster目录
vi activemq1/conf/activemq.xml
a.找到<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">给brokerName赋值为brokerName="ActiveMQ_Cluister",注意集群中的各节点brokerName的值必须一致
b.找到 <kahaDB directory="${activemq.data}/kahadb"/>,将父节点中的内容替换为
<persistenceAdapter>
<!--
<kahaDB directory="${activemq.data}/kahadb"/>
-->
<replicatedLevelDB
replicas="3" #节点数量
bind="tcp://0.0.0.0:61615" #监听端口,注意该端口不得出现在步骤c中,节点2为tcp://0.0.0.0:61614,节点3为tcp://0.0.0.0:61613
zkAddress="127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183" #zookeeper节点地址
directory="${activemq.data}/leveldb"
hostname="192.168.2.184" #本机地址
zkPath="/home/activemq_cluster/level-stores"/> #该目录必须可用
</persistenceAdapter>
c.找到 <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>,将父节点中的内容替换为
<transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<!--节点2为61617,节点3为61618 -->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616? tcp://0.0.0.0:61613maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<!--
<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
-->
</transportConnectors>
vi activemq1/conf/jetty.xml
找到<property name="port" value="8161"/>,将其以及上一行替换为
<property name="host" value="192.168.2.184"/> <!--本机地址-->
<property name="port" value="8161"/> <!--节点2为8162,节点2为8163-->
其他两个节点的配置,与上面内容相同,需要改变的地方已做说明
3.先启动zookeeper集群,后启动activemq集群
sh /home/zookeeper_cluster/zookeeper2/bin/zkServer.sh start
sh /home/zookeeper_cluster/zookeeper3/bin/zkServer.sh start
sh /home/zookeeper_cluster/zookeeper4/bin/zkServer.sh start
/home/activemq_cluster/activemq1/bin/activemq start
/home/activemq_cluster/activemq2/bin/activemq start
/home/activemq_cluster/activemq3/bin/activemq start
4.查看activemq的启动日志
cat /home/activemq_cluster/activemq1/data/activemq.log
INFO | Master started: tcp://192.168.2.184:61615 | org.apache.activemq.leveldb.replicated.MasterElector | ActiveMQ BrokerService[activemq_cluster] Task-2
2020-01-09 20:25:30,964 | INFO | Slave has connected: f7ff5156-277c-4d73-9546-aa1481610c75 | org.apache.activemq.leveldb.replicated.MasterLevelDBStore | hawtdispatch-DEFAULT-2
2020-01-09 20:25:31,109 | INFO | Slave has now caught up: f7ff5156-277c-4d73-9546-aa1481610c75 | org.apache.activemq.leveldb.replicated.MasterLevelDBStore | hawtdispatch-DEFAULT-2
从日志中可以看出节点1已被选为主节点,其他两个节点选为备份节点