01月20, 2017

rabbitmq 与 erlang 版本匹配问题

最近我们将 OpenStack 从 Kilo 版本升级到 Mitaka 版本,多个 OpenStack 环境中 rabbitmq 都出现了一个内存疯长的问题,导致消息队列都不能正常提供服务。

软件版本

rabbitmq-server-3.6.1-1.noarch
erlang-18.3-1.el7.centos.x86_64

部署模式: 三节点的mirror(镜像模式)

现象

计算节点的nova-compute.log中出现如下异常

2017-01-06 10:36:31.769 9447 ERROR oslo.messaging._drivers.impl_rabbit [req-77a5f52b-f224-4807-98b7-1bfd489ce1aa - - - - -] AMQP server on *:5672 is unreachable: timed out. Trying again in 1 seconds.
2017-01-06 10:37:13.156 9447 ERROR oslo.messaging._drivers.impl_rabbit [-] The broker has blocked the connection: low on memory
2017-01-06 10:38:31.775 9447 ERROR oslo.messaging._drivers.impl_rabbit [req-77a5f52b-f224-4807-98b7-1bfd489ce1aa - - - - -] The broker has blocked the connection: low on memory
2017-01-06 10:38:45.580 9447 ERROR oslo.messaging._drivers.impl_rabbit [-] AMQP server on *:5672 is unreachable: timed out. Trying again in 1 seconds.

然后到rabbitmq的dashboard看 alt 从提示来看是 rabbitmq 管理插件导致的内存疯长,而且还给出了修复的建议。按照建议我们修改了参数重启 rabbitmq 但是问题并没有得到解决,内存还是增长的很快。

问题解决

在网上搜了一些解决方案,rabbitmq 社区说是 erlang 版本不匹配的导致,索性我们换个erlang版本试试。

我们使用的是 epel 源中的版本

erlang-R16B-03.17.el7.x86_64

rabbitmq 不变

升级步骤

三台 rabbitmq 节点同时停止服务

systemctl stop rabbitmq-server.service

kill 掉 epmd 进程

[huomingming@w-openstack01 ~]$ ps -ef |grep epmd | grep daemon
rabbitmq  5502     1  0 Jan04 ?        00:01:05 /usr/lib64/erlang/erts-5.10.4/bin/epmd -daemon

kill 5502

卸载 erlang 软件包

通过yum remove erlang-18.3-1.el7.centos.x86_64 时,你会发现它会一并将依赖的 rabbitmq 删除,这肯定是不行的,为了减少维护的时间和对业务的影响,我们通过已卸载依赖的方式

rpm -e  erlang-18.3-1.el7.centos.x86_64 --nodpes

然后安装指定版本的 erlang

yum install erlang-R16B-03.17.el7.x86_64

最后同时重启三台 rabbitmq 节点服务

systemctl start rabbitmq-server.service

经过长时间的观察,rabbitmq 状态很稳定,平台恢复正常。

加我微信 alt

关注我们团队公众号 alt

本文链接:https://www.opsdev.cn/post/rabbitmq-erlang.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。