排查 RabbitMQ 故障

当 RabbitMQ 实例不健康、客户端无法连接、队列意外增长,或者升级或迁移未按预期运行时,请使用本指南。

对于每个问题,请先从症状入手,确认影响,运行建议的检查项,然后再选择修复措施。

Pod 运行中,但集群不健康

项目指南
症状Pod 处于 RunningReady 状态,但工作负载仍然失败,或者 broker 节点数低于预期。
影响Producer、consumer 或队列副本可能失败,或者路由不均衡。
常见原因Peer discovery 问题、存储问题、集群加入失败,或集群成员关系分裂。
检查kubectl get rabbitmqcluster <instance-name>, kubectl get pods -l app.kubernetes.io/name=<instance-name>, kubectl exec <pod> -- rabbitmqctl cluster_status
建议比较 status.conditionsrabbitmqctl cluster_status。如果 Pod 就绪状态与 broker 成员关系不一致,应将集群视为降级状态,直到 cluster_status 中出现所有预期的 broker 节点。

客户端无法进行身份验证或授权

项目指南
症状客户端报告访问被拒绝、权限不足,或无法打开 channel。
影响Producer 无法发布,consumer 无法消费。
常见原因用户错误、密码错误、缺少 virtual host,或 configurewriteread 权限不足。
检查rabbitmqadmin list users, rabbitmqadmin list vhosts, rabbitmqadmin list permissions, application 配置审查
建议验证应用是否使用了预期的 virtual host 和专用用户,并确认权限与所需的资源命名模式相匹配。

TLS 连接失败

项目指南
症状TLS 握手失败、未知 CA 错误,或主机名验证错误。
影响客户端和运维工具无法连接到 RabbitMQ。
常见原因缺少 CA 信任、证书中的 SAN 错误、在客户端更新之前禁用了明文监听器,或者端点端口错误。
检查kubectl explain rabbitmqcluster.spec.tls, kubectl exec <pod> -- rabbitmq-diagnostics listeners, 客户端侧 TLS 信任库审查
建议使用所需的服务名称和外部名称重新签发证书,分发 CA 证书,并验证客户端是否使用带有正确端口的 amqps:// 或 HTTPS。

发布被阻塞或变慢

项目指南
症状发布者停滞、连接吞吐量下降,或者应用日志显示连接被阻塞。
影响消息摄取落后或停止。
常见原因内存告警、磁盘告警,或队列积压增长。
检查kubectl exec <pod> -- rabbitmq-diagnostics status, rabbitmqadmin list queues name messages message_bytes consumers, platform monitoring dashboards
建议先解决磁盘或内存压力。然后调查消费者为何跟不上,以及是否需要添加 queue TTL 或长度限制。

队列增长而消费者未能跟上

项目指南
症状messages_readymessages_unacknowledged 在持续一段时间内增长。
影响磁盘使用量上升,发布延迟可能增加,消费者可能严重滞后。
常见原因Consumer 故障、prefetch 较低、下游依赖缓慢,或重试循环。
检查rabbitmqadmin list queues name messages consumers arguments, 应用 consumer 指标,重试和 DLQ 拓扑审查
建议恢复或扩展 consumer,检查重试逻辑,并在工作负载需要可控积压行为时添加 message-ttlmax-length 或 DLQ 路由等 queue policy。

升级或迁移卡住

项目指南
症状版本升级或 Shovel 迁移未按预期完成。
影响环境长时间处于变更窗口中。
常见原因变更前的集群健康问题、不兼容的插件、存储不足,或源 broker 或目标 broker 无法访问。
检查kubectl get rabbitmqcluster <instance-name> -o yaml, kubectl exec <pod> -- rabbitmq-plugins list -e, kubectl exec <pod> -- rabbitmqctl shovel_status, kubectl exec <pod> -- rabbitmq-diagnostics status
建议在继续之前重新确认基础健康状态,验证网络可达性和插件兼容性;如果集群无法维持健康的成员关系,则停止变更。

Management API 或 UI 不可用

项目指南
症状management 端点超时或返回错误。
影响rabbitmqadmin、management UI 和运维自动化无法使用 HTTP API。
常见原因Service 暴露问题、TLS 不匹配、management 监听器被禁用,或者 broker 过载。
检查kubectl get svc <instance-name>, kubectl get endpoints <instance-name>, kubectl exec <pod> -- rabbitmq-diagnostics listeners
建议确认 Service 类型和端口映射与访问方式一致,并验证是否启用了仅 TLS 的监听器。

相关信息