RabbitMQ在Ubuntu上的常见故障及排查步骤
systemctl status rabbitmq-server确认服务是否处于active (running)状态。若未运行,尝试启动服务sudo systemctl start rabbitmq-server。/var/log/rabbitmq/rabbit@<hostname>.log(<hostname>为服务器主机名),通过sudo tail -f /var/log/rabbitmq/rabbit@<hostname>.log实时查看启动或运行时的错误信息(如配置错误、端口冲突)。sudo systemctl restart rabbitmq-server重启,注意观察重启后的状态提示。5672(AMQP协议)、15672(管理界面)端口。使用sudo netstat -tulnp | grep 5672或sudo ss -tulnp | grep 5672查看端口占用情况。若端口被占用,可通过sudo lsof -i :5672找到占用进程并终止(sudo kill -9 <PID>),或修改RabbitMQ配置文件(/etc/rabbitmq/rabbitmq.conf)中的listeners.tcp.default为其他端口(如5673)。ufw)允许RabbitMQ端口通过:sudo ufw allow 5672/tcp(AMQP)、sudo ufw allow 15672/tcp(管理界面),并启用防火墙sudo ufw enable。/etc/rabbitmq/rabbitmq.conf(若不存在则使用默认配置)。确保文件语法正确(如listeners.tcp.default = 5672),避免注释符号(#)错误或参数格式错误(如缺少引号)。listeners.tcp.default)是否正确;vhosts)配置是否符合应用需求;vm_memory_high_watermark,默认0.4,建议0.4-0.5)是否合理;disk_free_limit,默认50MB,建议调整为1GB以上)。/var/lib/rabbitmq,配置文件目录为/etc/rabbitmq。确保rabbitmq用户(默认运行用户)对这些目录有读写权限:sudo chown -R rabbitmq:rabbitmq /var/lib/rabbitmq、sudo chown -R rabbitmq:rabbitmq /etc/rabbitmq。sudo systemctl restart rabbitmq-server。erl -version查看Erlang版本,若版本过低,需卸载旧版本并安装兼容版本(参考RabbitMQ官方Erlang要求)。sudo apt-get remove --purge erlang*卸载,再按照官方文档安装正确版本。df -h查看系统磁盘使用情况,重点关注/var/lib/rabbitmq所在分区(通常为/或/var)。若可用空间不足(如小于1GB),需清理无用文件(如日志、临时文件)或扩展磁盘空间。/var/lib/rabbitmq/mnesia),但会清除所有队列、交换机等数据。操作前需备份重要数据:sudo systemctl stop rabbitmq-server → sudo rm -rf /var/lib/rabbitmq/mnesia → sudo systemctl start rabbitmq-server。ping <服务器IP>测试客户端与服务器之间的网络可达性;使用telnet <服务器IP> 5672测试AMQP端口是否开放。guest仅能从localhost访问,若需远程访问,需创建新用户并授予权限:sudo rabbitmqctl add_user admin yourpassword # 创建用户
sudo rabbitmqctl set_user_tags admin administrator # 设置用户标签(管理员)
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" # 授权(虚拟主机/、读/写/配置权限)
注意:避免使用guest用户进行远程连接。/)存在且有访问权限。通过管理界面(http://服务器IP:15672)查看虚拟主机列表,或使用命令sudo rabbitmqctl list_vhosts。hostnamectl set-hostname <节点名>,如node1),并在/etc/hosts文件中添加IP与主机名的映射(如192.168.1.2 node1、192.168.1.3 node2)。/etc/hosts后,停止节点应用sudo rabbitmqctl stop_app,再加入集群(指定集群节点名称,如sudo rabbitmqctl join_cluster rabbit@node2),最后启动应用sudo rabbitmqctl start_app。