ActiveMQ LevelDB/Zookeeper bug

本文详细记录了一次ActiveMQ在使用Replicated LevelDB Store + Zookeeper部署时遇到的问题,包括队列pending消息积压、重启失败、数据丢失等。在排查过程中,发现可能是LevelDB的问题,官方已不再维护。最后采取临时解决方案,监控MQ状态并在故障时重启,同时计划转向NFS部署。问题解决过程强调了线上环境一致性、问题现场保留和关注开源软件官方文档的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ActiveMQ问题排查

问题出现前使用activemq 5.11.1,排查问题中改用5.13.3

  • 背景
  • 排查经过
  • 结果
  • 解决方案
  • 总结

背景

公司内使用ActiveMQ(以下简称“MQ”)作为消息中间件进行模块间的消息传递。特别地,我使用MQ作为实时检索系统增量接收的消息中间件。MQ按Replicated LevelDB Store + zookeeper master/slave方式部署。

一开始上线并没有发现什么问题,过了大概一个月,发现线上增量无法及时更新了。通过MQ的console查看发现队列的pending消息数保持在4000多,几乎不会变,偶尔会上下跳动1。

由于是线上服务,想着尽快恢复线上服务,想到了重启,然而简单地执行以下命令重启MQ服务,

> cd /home/work/MQHome
> ./bin/linux-x86-64/activemq stop
> ./bin/linux-x86-64/activemq start

重启失败,囧。。

看了下MQ的日志,好像是3台机器间数据同步出了问题,那删了所有数据重启吧

> ...
> rm -rf data # 好危险,慎用!!!
> ./bin/linux-x86-64/activemq start

重启成功,线上服务算是恢复了(不过应该是丢了数据),开始排查问题了

排查经过

这时才发现线上日志也给删掉了(在data目录里),无语。。

遇到问题首先想的是能以最快的速度解决问题。考虑到MQ是开源软件,而且社区比较活跃,抱着试试看的态度查看了MQ的发布记录,确实MQ有大版本更新。于是,我们第一时间做了升级,从5.11.1升到5.13.3。不幸的是,同样的情况在大概3周后又出现了。TT

没办法,线下复现吧。

在一台线下机搭了MQ服务,首先怀疑是压力过大把MQ压垮了。通过console发送消息
MQ console
然而以10000的压力,压了半小时,并没有压垮,而线上远远没到这个压力,故压力过大的情况暂时排除。

进而怀疑是写queue客户端的问题,使用线上的客户端代码做压测,压了半小时,仍然没有出现问题。

单机部署的情况都很稳定,有了第三个怀疑:集群部署方式有问题。因为线下没有3台物理机,故尽管有这个怀疑,也迟迟没有做验证。排除了以上两种可能,只能在做这第三个怀疑的验证了。在提供线上服务的3台机器上,另外搭了一套MQ,与线上服务MQ仅端口不同。

继续压测,悲剧的是,压测了半个小时仍然没出问题,怀疑是压的时间不够,便又继续压了两天,还是没出问题。

这次是真的没办法了,只能线上复现了,若线上复现,保留好现场,然后分析日志。

幸运的是,线上环境在重启后3周复现了,重点日志如下:
重点日志

结果

将日志相关内容在google中搜索一番后,发现
https://issues.apache.org/jira/browse/AMQ-5082
这个问题早在14年3月5日就有人提过,现在还是open状态。(发稿时已是closed,并标记为won’t fix)

在官网搜索一番发现,
leveldb deprecated

进一步发现,
http://blog.klocwork.com/open-source/activemq-community-deprecates-leveldb-what-you-need-to-know/
LevelDB废弃原因
官方将不再维护LevelDB部署方式,包括leveldb/zookeeper方式。对于现有的bug也不再修复。

解决方案

最终只能采取一种临时方案,监控MQ的状态,发现不能正常写入MQ时,则重启MQ。

接下来考虑采用公司内部的nfs部署master/slave集群。

总结

整个问题追查及修复的过程发现:
1)线上环境不一致(java环境不同),不利于系统的维护;
2)出现问题时,未能保留好现场,对于这种非稳定复现的问题,保留好现场对定位问题是至关重要的;
最后,想说的是,在使用开源软件之前还是应该多看看官方文档,注意官方用语,“recommend”什么,”should”怎样
官方使用说明

我们崇尚技术,追求新的技术,但在生成环境做类似的尝试还是要慎重再慎重。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值