下面是 Zookeeper + ActiveMQ 集群搭建 的完整指南,适用于希望在生产或测试环境中实现 高可用 ActiveMQ 消息中间件 的用户。
📘 Zookeeper + ActiveMQ 集群搭建详解
🧩 一、组件说明
组件 | 作用 |
---|---|
Apache Zookeeper | 分布式协调服务,ActiveMQ 使用它实现 Master-Slave 选主、高可用等 |
Apache ActiveMQ(经典版) | 高性能、支持 JMS 的消息中间件 |
ActiveMQ Master-Slave 模式(基于 Zookeeper) | 通过 ZK 实现自动主备切换、故障恢复 |
🧱 二、集群结构概览
┌──────────────┐ ┌──────────────┐
│ Zookeeper #1 │ │ ActiveMQ #1 │ (候选Master)
└──────────────┘ └──────────────┘
┌──────────────┐ ┌──────────────┐
│ Zookeeper #2 │<──> │ ActiveMQ #2 │ (候选Slave)
└──────────────┘ └──────────────┘
┌──────────────┐ ┌──────────────┐
│ Zookeeper #3 │ │ ActiveMQ #3 │ (可选扩容)
└──────────────┘ └──────────────┘
主备通过 Zookeeper 进行选主。ZK 掉线,MQ 也失去协调能力。
🛠️ 三、环境准备
项目 | 版本推荐 |
---|---|
操作系统 | CentOS 7 / Ubuntu 20.04 |
Zookeeper | 3.6.x 或 3.7.x |
ActiveMQ | 5.16.x(经典版,非 Artemis) |
JDK | Java 8+ |
🔧 四、安装步骤
① 安装 Zookeeper 集群(3台)
1. 下载并解压
wget https://downloads.apache.org/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz
tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz
mv apache-zookeeper-3.7.1-bin /opt/zookeeper
2. 配置 zoo.cfg
cd /opt/zookeeper/conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
内容如下(3台机器):
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper/data
clientPort=2181
server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888
3. 设置每台机器唯一 ID
echo "1" > /opt/zookeeper/data/myid # zk1 上
echo "2" > /opt/zookeeper/data/myid # zk2 上
echo "3" > /opt/zookeeper/data/myid # zk3 上
4. 启动 Zookeeper
bin/zkServer.sh start
② 安装 ActiveMQ(2台起)
1. 下载并解压
wget https://archive.apache.org/dist/activemq/5.16.4/apache-activemq-5.16.4-bin.tar.gz
tar -zxvf apache-activemq-5.16.4-bin.tar.gz
mv apache-activemq-5.16.4 /opt/activemq
2. 修改配置文件 activemq.xml
路径:/opt/activemq/conf/activemq.xml
找到 <broker>
标签,修改如下:
<broker xmlns="http://activemq.apache.org/schema/core"
brokerName="amq1"
useJmx="true"
persistent="true"
schedulerSupport="true">
添加 Zookeeper 主从配置:
<replica>
<replicatedBroker
xmlns="http://activemq.apache.org/schema/core"
brokerName="amq1"
zkAddress="zk1:2181,zk2:2181,zk3:2181"
data="/opt/activemq/data">
</replicatedBroker>
</replica>
- 第二台 ActiveMQ 修改
brokerName="amq2"
即可
注意:每台机器要配置唯一 brokerName,否则冲突。
③ 启动 ActiveMQ
cd /opt/activemq/bin
./activemq start
启动日志将显示:
INFO [main] ReplicaZooKeeperMasterElector - Elected as master broker...
- 第一台选主为 Master
- 第二台则挂起为备机,等待接管
✅ 五、验证集群效果
🔍 检查选主情况
登录 Zookeeper CLI:
bin/zkCli.sh -server zk1:2181
执行:
ls /ActiveMQ/lock
get /ActiveMQ/lock
可看到当前 Master 信息。
✅ 模拟故障切换
# 停掉 amq1 主节点
/opt/activemq/bin/activemq stop
观察日志,amq2 自动接管并成为新 master。
🔐 六、Web 控制台访问
默认访问地址:
http://<activemq-host>:8161/
- 默认账号密码:
admin / admin
- 可以查看队列、主题、消费者连接等信息
📌 七、注意事项与建议
项 | 建议 |
---|---|
防火墙 | 开放端口:8161、61616、2181、2888、3888 |
高可用 | 至少部署 2 台 MQ + 3 台 ZK 才能避免单点 |
自动重启 | 可使用 supervisor 或 systemd 管理服务 |
ZK 容错 | Zookeeper ≥ 3 个节点,防止脑裂或挂起 |
Broker 识别 | brokerName 一定要不同,否则选主混乱 |
📚 八、延伸阅读
- 🔗 ActiveMQ 官方文档
- 🔗 Zookeeper 官方文档
- 🛠 推荐使用 Docker 快速构建(可额外提供 docker-compose 版本)
- 🚀 可考虑替代方案:ActiveMQ Artemis + JDBC HA、Kafka + ZK
发表回复