环境信息
- Java17
- CentOS 7.9
- Apache Zookeeper-3.5.7
- Apache Activemq-5.15.9
服务器编号 | 服务器IP | 主机名称 | 系统 |
---|---|---|---|
1 | 192.168.100.110 | host110 | CentOS 7.9 |
2 | 192.168.100.111 | host111 | CentOS 7.9 |
3 | 192.168.100.112 | host112 | CentOS 7.9 |
Zookeeper集群搭建
服务器编号 | 服务器IP | LF通信端口 | LF选举端口 | 客户端端口 |
---|---|---|---|---|
1 | 192.168.100.110 | 2888 | 3888 | 2180 |
2 | 192.168.100.111 | 2888 | 3888 | 2180 |
3 | 192.168.100.112 | 2888 | 3888 | 2180 |
Zookeeper集群不在本文中配置,默认已配置完毕
搭建ActiveMQ集群
服务器编号 | 服务器IP | ActiveMQ后台端口 | ActiveMQ管理控制台端口 |
---|---|---|---|
1 | 192.168.100.110 | 61616 | 8161 |
2 | 192.168.100.111 | 61616 | 8161 |
3 | 192.168.100.112 | 61616 | 8161 |
启动Linux服务器
分别在三台Linux服务器中创建集群目录
mkdir /opt/activemq/cluster_node
将ActiveMQ安装目录解压到集群目录中
apache-activemq-5.15.9-bin.tar.gz
cp yourPath/apache-activemq-5.15.9-bin.tar.gz /opt/activemq/cluster_node
tar -zxvf apache-activemq-5.15.9-bin.tar.gz
修改ActiveMQ配置文件
配置持久化器
使用LevelDB替换默认KahaDB配置
将一下默认配置注释
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
加入LevelDB配置
<persistenceAdapter>
<replicatedLevelDB
directory="${activemq.data}/leveldb"
replicas="3"
bind="tcp://0.0.0.0:62621"
zkAddress="192.168.100.110:2181,192.168.100.111:2181,192.168.100.112:2181"
hostname="host110"
zkPath="/activemq/leveldb-stores"/>
</persistenceAdapter>
参数说明:
配置项 | 说明 |
---|---|
directory | 持久化数据存放位置(会在${activemq.data}/中创建leveldb目录) |
replicas | 集群中节点个数(由于是三台服务器搭建集群,所以设置为3) |
bind | 集群通信端口 |
zkAddress | Zookeeper集群地址 |
hostname | 主机名称 (使用本机IP或主机名称,如果使用主机名称一定在hosts文件中配置IP映射) |
zkPath | Zookeeper数据挂载点(启动后会在Zookeeper下注册此节点) |
此配置在拷贝到三台设备时需修改
hostname
为各自的主机名称或IP
配置BrokerName
集群中三台服务器的brokerName一定要一致
在activemq.xml配置文件中修改以下节点
<!--
The <broker> element is used to configure the ActiveMQ broker.
-->
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="mqCluster" dataDirectory="${activemq.data}">
将brokerName修改为你自定义名称
将此配置同步拷贝到三台服务器配置中
主机名映射配置
如果配置持久化器时hostname
选用为主机名称则需要在三台服务器的hosts文件中配置相互之间的主机名称映射
以本案例为例:
hostname="host110"
hostname分别为host110,host111,host112(见开头环境信息)
需要配置hosts的IP到主机名映射以便集群中主机相互通信
向hosts文件中添加信息:
vim /etc/hosts
在文件末尾如下信息(根据你的配置来):
192.168.100.110 host110
192.168.100.111 host111
192.168.100.112 host112
三台服务器都要这样设置
启动
启动Zookeeper集群
分别在三台服务器上启动Zookeeper
启动ActiveMQ集群
分别在三台服务器上启动ActiveMQ
cd /opt/activemq/cluster_node/apache-activemq-5.15.9-bin/bin/
activemq start
访问
登录Zookeeper查看哪台主机被选举为了master
>zkCli.sh -server host110
>ls /activemq/leveldb-stores # 查看集群当前在线的ActiveMQ节点
[00000000023, 00000000024, 00000000025] # 在线的三个MQ节点
>get /activemq/leveldb-stores/00000000023 # 查看节点信息
{"id":"mqCluster","container":null,"address":"tcp://host110:62621","position":-1,"weight":1,"elected":"0000000023"}
>get /activemq/leveldb-stores/00000000024
{"id":"mqCluster","container":null,"address":null,"position":-1,"weight":1,"elected":null}
>get /activemq/leveldb-stores/00000000025
{"id":"mqCluster","container":null,"address":null,"position":-1,"weight":1,"elected":null}
通过elected
得出选举出的主机为host110
浏览器访问host110:8161即可查看集群参数