Zookeeper+ActiveMQ搭建集群实现高可用
一、搭建Zookeeper集群
Zookeeper搭建方案
服务器编号 | 服务器IP地址 | LF通信端口 | LF选举端口 | 客户端端口 |
1 | 192.168.229.131 | 2888 | 3888 | 2180 |
2 | 192.168.229.134 | 2888 | 3888 | 2180 |
3 | 192.168.229.133 | 2888 | 3888 | 2180 |
具体的Zookeeper集群搭建可以参考这篇博客https://www.cnblogs.com/xiaomaomao/p/13800523.html
二、搭建ActiveMQ集群
1、ActiveMQ搭建方案
服务器IP地址 | ActiveMQ后台端口 | ActiveMQ管理控制台端口 |
192.168.229.131 | 61617 | 8161 |
192.168.229.134 | 61618 | 8161 |
192.168.229.133 | 61619 | 8161 |
2、拷贝压缩包到 /otp 目录下,之所以放置在 /opt 目录下,是为了备份一个压缩包,方便以后再用
1 2 | // 复制压缩包到安装目录下,我这里的安装目录是自己在 /usr/local/下新建的一个activemq目录 cp -r apache-activemq- 5.15 . 5 -bin.tar.gz /usr/local/activemq/ |
3、解压缩到当前目录
4、进入解压后的文件目录
5、修改activemq.xml配置文件,使用性能比较好的LevelDB替换掉默认的KahaDB
配置项 | 说明 |
directory | 持久化数据存放地址(默认的情况下${activemq.data}下是没有leveldb目录的,要自己创建) |
replicas | 集群中节点的个数(由于我们是三台服务器搭建的ActiveMQ,所以replicas的数量是3) |
bind | 集群通信端口 |
zkAddress | ZooKeeper集群地址 |
hostname | 当前服务器的IP地址,如果集群启动的时候报未知主机名错误,那么就需要配置主机名到IP地址的映射关系 |
zkPath | ZooKeeper数据挂载点(集群启动成功之后,会在zookeeper下自动注册该节点) |
配置主机名到IP地址的映射关系具体可以参考这篇博文 https://www.cnblogs.com/xiaomaomao/p/13810251.html
三台ActiveMQ服务器的配置如下:
192.168.229.131服务器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <!-- 三台服务器的brokerName一定要保持一致 --> <broker xmlns= "http://activemq.apache.org/schema/core" brokerName= "activemq-zookeeper-test" dataDirectory= "${activemq.data}" > <persistenceAdapter> <!--注释掉或者删除掉kahaDB--> <!--kahaDB directory= "${activemq.data}/kahadb" / --> <replicatedLevelDB directory= "${activemq.data}/leveldb" replicas= "3" bind= "tcp://0.0.0.0:61617" zkAddress= "192.168.229.131:2180,192.168.229.134:2180,192.168.229.133:2180" hostname= "CentOS001" zkPath= "/activemq/leveldb-stores" /> </persistenceAdapter> |
192.168.229.134服务器
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- 三台服务器的brokerName一定要保持一致 --> <broker xmlns= "http://activemq.apache.org/schema/core" brokerName= "activemq-zookeeper-test" dataDirectory= "${activemq.data}" > <replicatedLevelDB <!--kahaDB directory= "${activemq.data}/kahadb" / --> directory= "${activemq.data}/leveldb" replicas= "3" bind= "tcp://0.0.0.0:61618" zkAddress= "192.168.229.131:2180,192.168.229.134:2180,192.168.229.133:2180" hostname= "CentOS002" zkPath= "/activemq/leveldb-stores" /> </persistenceAdapter> |
192.168.229.133服务器
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- 三台服务器的brokerName一定要保持一致 --> <broker xmlns= "http://activemq.apache.org/schema/core" brokerName= "activemq-zookeeper-test" dataDirectory= "${activemq.data}" > <replicatedLevelDB <!--kahaDB directory= "${activemq.data}/kahadb" / --> directory= "${activemq.data}/leveldb" replicas= "3" bind= "tcp://0.0.0.0:61619" zkAddress= "192.168.229.131:2180,192.168.229.134:2180,192.168.229.133:2180" hostname= "CentOS003" zkPath= "/activemq/leveldb-stores" /> </persistenceAdapter> |
三、启动集群
1、操作之前保证关闭防火墙,并且windows和Linux相互之间是可以ping通的
2、先启动ZooKeeper集群,因为只有zookeeper集群启动之后,你才能将ActiveMQ服务在zookeeper上注册
3、然后再分别启动三台ActiveMQ服务器
四、测试
使用ZooInspector工具来查看具体的内容,可以参考https://www.cnblogs.com/xiaomaomao/p/13810168.html这篇博客来了解关于ZooInspector的使用
通过查看Zookeeper的节点信息情况,可以得出192.168.229.131被选举成了主机,那么使用该主机去登录ActiveMQ的客户端,可以登录成功
使用命令 ./activemq stop 关闭 192.168.229.131这台主机,查看ZooInspector,发现zookeeper通过选举机制推举出了新的主机 192.168.229.134,使用该主机访问ActiveMQ的控制台,发现可以登录ActiveMQ的管理控制台
重新启动192.168.229.131这台服务器,保证三台服务器同时在线,然后手动down掉一台slaver,发现ActiveMQ依旧可以提供服务,如果半数的服务器是正常的情况下,整个集群就能正常工作,这样就保证了高可用
至此,整个集群的搭建就完成了.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~