下面是 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
Zookeeper3.6.x 或 3.7.x
ActiveMQ5.16.x(经典版,非 Artemis)
JDKJava 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 一定要不同,否则选主混乱

📚 八、延伸阅读