rabbitmq故障排查centos方法
CentOS 上 RabbitMQ 故障排查步骤
一 快速自检与定位
- 查看服务状态与系统日志
- 执行:
systemctl status rabbitmq-server、journalctl -xe -u rabbitmq-server,优先从报错关键词入手(如“Failed to load configuration”“nodedown”“epmd”等)。
- 执行:
- 本地连通性自检
- 管理界面:
wget http://localhost:15672或curl -I http://127.0.0.1:15672 - AMQP 端口:
telnet localhost 5672或nc -vz 127.0.0.1 5672
- 管理界面:
- 远程连通性自检
- 在客户端或另一台机器:
telnet < 服务器IP> 5672、telnet < 服务器IP> 15672 - 若远程不通但本机通,优先排查 firewalld/iptables 与云安全组策略。
- 在客户端或另一台机器:
- 端口监听与占用
ss -lntp | egrep '5672|15672|4369|25672'- 被占用时:
lsof -iTCP:5672或ss -lntp | grep 5672定位进程并处理。
二 常见故障与修复要点
- 配置与版本问题
-
配置文件名错误:RabbitMQ 默认读取 rabbitmq.conf(新格式)与 advanced.config(旧格式)。若误用
rabbitmq.config,会报语法错误(如 “syntax error before: ‘==’”)。修复:mv /etc/rabbitmq/rabbitmq.config /etc/rabbitmq/rabbitmq.conf后重启。 -
Erlang 与 RabbitMQ 版本不匹配:启动失败或 CLI 异常。处理:按官方兼容矩阵安装匹配版本,必要时彻底清理旧版后重装(见下一节)。
-
主机名与 /etc/hosts:节点名解析失败会导致插件启用超时、集群加入失败等。处理:确保
hostname与/etc/hosts有对应映射,例如:127.0.0.1 localhost < 你的主机名>- 或把主机名改为 localhost.localdomain 并重启(不推荐生产)。
-
管理插件启用失败(badrpc timeout):多与主机名解析或网络有关,优先修复 hosts 与本地解析后再启用:
rabbitmq-plugins enable rabbitmq_management。 -
管理界面或 API 返回 405:常见于 Nginx 反向代理对含 %2f(URL 编码的“/”)的路径处理不当。修复:在 location 中使用
proxy_pass .../$1;透传路径,不要丢失编码字符。
-
三 网络与防火墙排查
-
firewalld(CentOS 7+ 常用)
- 开放管理端口:
firewall-cmd --zone=public --add-port=15672/tcp --permanent - 开放 AMQP 端口:
firewall-cmd --zone=public --add-port=5672/tcp --permanent - 重新加载:
firewall-cmd --reload - 验证:
firewall-cmd --query-port=15672/tcp、firewall-cmd --query-port=5672/tcp
- 开放管理端口:
-
集群节点通信端口
- 必须放通 4369/tcp(epmd) 与 25672/tcp(节点间通信)。示例(iptables):
iptables -I INPUT -p tcp --dport 4369 -j ACCEPTiptables -I INPUT -p tcp --dport 25672 -j ACCEPT- 保存并重启防火墙(或按系统采用 firewalld 对应规则)。
- 必须放通 4369/tcp(epmd) 与 25672/tcp(节点间通信)。示例(iptables):
-
云环境
- 同时检查 安全组/NACL 是否放行 5672/15672/4369/25672。
四 用户权限与常见业务报错
- 用户与权限
- 查看用户:
rabbitmqctl list_users - 新建用户:
rabbitmqctl add_user < user> < pwd> - 设置角色:
rabbitmqctl set_user_tags < user> administrator - 赋权(示例对 vhost “/”):
rabbitmqctl set_permissions -p / < user> ".*" ".*" ".*"
- 查看用户:
- 常见业务报错
-
406 PRECONDITION_FAILED(如队列 durable 不一致):说明已存在同名队列且参数不同。处理:删除队列或保持创建参数一致,再重启应用。
-
消息丢失风险:开启生产者 Confirm、队列与消息 持久化(durable + delivery_mode=2),并配置 死信队列(DLQ) 与 镜像队列(HA) 提升可靠性。
-
五 无法启动时的清理与重装
- 彻底清理(重装前)
- 停止服务:
systemctl stop rabbitmq-server - 卸载软件包:
yum remove -y rabbitmq-server erlang erlang-* - 删除残留目录:
rm -rf /etc/rabbitmqrm -rf /usr/lib/rabbitmqrm -rf /var/lib/rabbitmqrm -rf /usr/lib64/erlang(如确定不再使用旧版 Erlang)
- 停止服务:
- 重新安装与验证
- 安装匹配版本的 Erlang 与 RabbitMQ(参考官方兼容矩阵),然后:
systemctl enable --now rabbitmq-serverrabbitmq-plugins enable rabbitmq_managementrabbitmqctl status、ss -lntp | egrep '5672|15672'复核监听与插件状态。
- 安装匹配版本的 Erlang 与 RabbitMQ(参考官方兼容矩阵),然后:
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: rabbitmq故障排查centos方法
本文地址: https://pptw.com/jishu/776716.html
