[ 英语 | 日本語 | Deutsch | Indonesia ]

RabbitMQ 故障排除

本节提供解决常见 RabbitMQ 问题的技巧。

RabbitMQ 服务挂起

RabbitMQ 服务在重启或停止时挂起的情况很常见。因此,强烈建议您手动重启每个控制器节点上的 RabbitMQ。

注意

RabbitMQ 服务名称可能因您的操作系统或提供 RabbitMQ 服务的供应商而异。

  1. 在第一个控制器节点上重启 RabbitMQ 服务。在某些情况下,service rabbitmq-server restart 命令可能无法工作,因此最好使用

    # service rabbitmq-server stop
    # service rabbitmq-server start
    
  2. 如果服务拒绝停止,则运行 pkill 命令停止服务,然后重启服务

    # pkill -KILL -u rabbitmq
    # service rabbitmq-server start
    
  3. 验证 RabbitMQ 进程是否正在运行

    # ps -ef | grep rabbitmq
    # rabbitmqctl list_queues
    # rabbitmqctl list_queues 2>&1 | grep -i error
    
  4. 如果出现错误,请运行 cluster_status 命令,以确保没有分区

    # rabbitmqctl cluster_status
    

    有关更多信息,请参阅 RabbitMQ 文档

  5. 返回第一步,然后尝试再次重启 RabbitMQ 服务。如果仍然出现错误,请在停止和启动 RabbitMQ 服务之间删除 /var/lib/rabbitmq/mnesia/ 目录中的内容。

  6. 如果没有错误,请在下一个控制器节点上重启 RabbitMQ 服务。

自 Liberty 版本发布以来,OpenStack 服务将自动从 RabbitMQ 中断中恢复。您应该仅在检查 RabbitMQ 心跳功能是否启用,以及 OpenStack 服务是否正在从 RabbitMQ 队列中获取消息后,才考虑重启 OpenStack 服务。

RabbitMQ 警报

如果您收到 RabbitMQ 的警报,请采取以下步骤进行故障排除和解决问题

  1. 确定 RabbitMQ 警报来自哪些服务器。

  2. 尝试在受影响的环境中启动 nova 实例。

  3. 如果无法启动实例,请继续排除故障。

  4. 登录到受影响环境的每个控制器节点,并检查 /var/log/rabbitmq 日志文件是否有任何报告的问题。

  5. 查找日志文件中标识的连接问题。

  6. 对于您环境中的每个控制器节点,查看 /etc/init.d 目录,以检查其中是否包含 nova*、cinder*、neutron* 或 glance*。 另外,检查 RabbitMQ 消息队列是否正在增长,而没有被消费,这将指示受影响的 OpenStack 服务。重启受影响的 OpenStack 服务。

  7. 对于您环境中的每个计算节点,查看 /etc/init.d 目录,并检查其中是否包含 nova*、cinder*、neutron* 或 glance*。 另外,检查 RabbitMQ 消息队列是否正在增长,而没有被消费,这将指示受影响的 OpenStack 服务。重启受影响的 OpenStack 服务。

  8. 打开 OpenStack Dashboard 并启动一个实例。如果实例启动,则问题已解决。

  9. 如果无法启动实例,请检查 /var/log/rabbitmq 日志文件是否有报告的连接问题。

  10. 在所有控制器节点上重启 RabbitMQ 服务

    # service rabbitmq-server stop
    # service rabbitmq-server start
    

    注意

    如果已经只重启了 OpenStack 组件,并且无法连接到 RabbitMQ 服务,则适用此步骤。

  11. 重复步骤 7-8。

数据库管理内存消耗过大

自 Liberty 版本发布以来,使用 RabbitMQ 3.4.x 或 3.6.x 的 OpenStack 存在管理数据库消耗分配给 RabbitMQ 的内存的问题。这是由统计信息收集和处理引起的。当具有 RabbitMQ 的单个节点达到其内存阈值时,所有交换和队列处理都会停止,直到内存警报恢复。

要解决此问题

  1. 检查内存消耗

    # rabbitmqctl status
    
  2. 编辑 /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 配置文件中调整适当的限制。