[ 英语 | 日本語 | Deutsch | Indonesia ]
RabbitMQ 故障排除¶
本节提供解决常见 RabbitMQ 问题的技巧。
RabbitMQ 服务挂起¶
RabbitMQ 服务在重启或停止时挂起的情况很常见。因此,强烈建议您手动重启每个控制器节点上的 RabbitMQ。
注意
RabbitMQ 服务名称可能因您的操作系统或提供 RabbitMQ 服务的供应商而异。
在第一个控制器节点上重启 RabbitMQ 服务。在某些情况下,service rabbitmq-server restart 命令可能无法工作,因此最好使用
# service rabbitmq-server stop # service rabbitmq-server start
如果服务拒绝停止,则运行 pkill 命令停止服务,然后重启服务
# pkill -KILL -u rabbitmq # service rabbitmq-server start
验证 RabbitMQ 进程是否正在运行
# ps -ef | grep rabbitmq # rabbitmqctl list_queues # rabbitmqctl list_queues 2>&1 | grep -i error
如果出现错误,请运行 cluster_status 命令,以确保没有分区
# rabbitmqctl cluster_status
有关更多信息,请参阅 RabbitMQ 文档。
返回第一步,然后尝试再次重启 RabbitMQ 服务。如果仍然出现错误,请在停止和启动 RabbitMQ 服务之间删除
/var/lib/rabbitmq/mnesia/目录中的内容。如果没有错误,请在下一个控制器节点上重启 RabbitMQ 服务。
自 Liberty 版本发布以来,OpenStack 服务将自动从 RabbitMQ 中断中恢复。您应该仅在检查 RabbitMQ 心跳功能是否启用,以及 OpenStack 服务是否正在从 RabbitMQ 队列中获取消息后,才考虑重启 OpenStack 服务。
RabbitMQ 警报¶
如果您收到 RabbitMQ 的警报,请采取以下步骤进行故障排除和解决问题
确定 RabbitMQ 警报来自哪些服务器。
尝试在受影响的环境中启动 nova 实例。
如果无法启动实例,请继续排除故障。
登录到受影响环境的每个控制器节点,并检查
/var/log/rabbitmq日志文件是否有任何报告的问题。查找日志文件中标识的连接问题。
对于您环境中的每个控制器节点,查看
/etc/init.d目录,以检查其中是否包含 nova*、cinder*、neutron* 或 glance*。 另外,检查 RabbitMQ 消息队列是否正在增长,而没有被消费,这将指示受影响的 OpenStack 服务。重启受影响的 OpenStack 服务。对于您环境中的每个计算节点,查看
/etc/init.d目录,并检查其中是否包含 nova*、cinder*、neutron* 或 glance*。 另外,检查 RabbitMQ 消息队列是否正在增长,而没有被消费,这将指示受影响的 OpenStack 服务。重启受影响的 OpenStack 服务。打开 OpenStack Dashboard 并启动一个实例。如果实例启动,则问题已解决。
如果无法启动实例,请检查
/var/log/rabbitmq日志文件是否有报告的连接问题。在所有控制器节点上重启 RabbitMQ 服务
# service rabbitmq-server stop # service rabbitmq-server start
注意
如果已经只重启了 OpenStack 组件,并且无法连接到 RabbitMQ 服务,则适用此步骤。
重复步骤 7-8。
数据库管理内存消耗过大¶
自 Liberty 版本发布以来,使用 RabbitMQ 3.4.x 或 3.6.x 的 OpenStack 存在管理数据库消耗分配给 RabbitMQ 的内存的问题。这是由统计信息收集和处理引起的。当具有 RabbitMQ 的单个节点达到其内存阈值时,所有交换和队列处理都会停止,直到内存警报恢复。
要解决此问题
检查内存消耗
# rabbitmqctl status
编辑
/etc/rabbitmq/rabbitmq.config配置文件,并将collect_statistics_interval参数更改为 30000-60000 毫秒。或者,您可以将collect_statistics参数设置为“none”来关闭统计信息收集。
扩展云环境时文件描述符限制¶
扩展到一定大小的云环境需要调整文件描述符限制。
运行 rabbitmqctl status 以查看当前的文件描述符限制
"{file_descriptors,
[{total_limit,3996},
{total_used,135},
{sockets_limit,3594},
{sockets_used,133}]},"
在 /etc/security/limits.conf 配置文件中调整适当的限制。