3. 单节点部署与基础运维:在 Linux/CentOS 上安装 RabbitMQ,启用管理插件,基础命令行操作

本章是 RabbitMQ 实践的第一站。我们将从零开始,在 CentOS 7/8 上完成 RabbitMQ 的单节点部署,启用 Web 管理界面,并掌握最核心的命令行运维操作。这是后续集群搭建与读写分离架构的基础。

3.1 环境准备与版本选型

RabbitMQ 基于 Erlang/OTP 构建,因此安装前必须确认 Erlang 版本与 RabbitMQ 版本的兼容性。下表列出了当前主流版本的对应关系:

RabbitMQ 版本 最低 Erlang 版本 推荐 Erlang 版本 CentOS 支持
3.12.x 25.x 26.x 7 / 8 / 9
3.11.x 24.x 25.x 7 / 8
3.10.x 23.x 24.x 7 / 8
3.9.x 23.x 24.x 7
生产建议: 推荐使用 RabbitMQ 3.12.x + Erlang 26.x 组合。CentOS 7 用户需注意,系统自带的 Erlang 版本过低,必须通过官方仓库或源码编译安装高版本 Erlang。

3.2 安装步骤(基于 CentOS 7/8)

以下步骤使用 RabbitMQ 官方提供的 RPM 仓库进行安装,确保依赖自动解决。

3.2.1 安装 Erlang

# 导入 Erlang 解决方案仓库
wget https://packages.erlang-solutions.com/erlang-solutions-2.0-1.noarch.rpm
rpm -Uvh erlang-solutions-2.0-1.noarch.rpm

# 安装 Erlang(包含所有组件)
yum install -y erlang

# 验证安装
erl -version

3.2.2 安装 RabbitMQ Server

# 导入 RabbitMQ 签名密钥
rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc

# 添加 RabbitMQ 仓库(以 CentOS 8 为例)
cat <<EOF > /etc/yum.repos.d/rabbitmq.repo
[rabbitmq]
name=rabbitmq
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.12.x/el/8/
gpgcheck=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
enabled=1
EOF

# 安装 RabbitMQ
yum install -y rabbitmq-server

# 启动服务并设置开机自启
systemctl start rabbitmq-server
systemctl enable rabbitmq-server

# 检查服务状态
systemctl status rabbitmq-server
常见错误: 如果启动失败,请检查 /var/log/rabbitmq/ 下的日志文件。最常见的原因是 Erlang 版本不匹配或主机名解析问题。确保 /etc/hosts 中包含本机主机名的正确映射。

3.3 启用管理插件与 Web 界面

RabbitMQ 提供了一套强大的 Web 管理插件 rabbitmq_management,它集成了监控、队列管理、用户权限控制等功能。

# 启用管理插件
rabbitmq-plugins enable rabbitmq_management

# 重启服务使插件生效
systemctl restart rabbitmq-server

# 确认插件已启用
rabbitmq-plugins list | grep management

插件启用后,Web 管理界面默认监听 15672 端口。通过浏览器访问 http://服务器IP:15672 即可进入登录页面。

默认凭据: 用户名 guest,密码 guest。注意: 出于安全考虑,guest 用户默认只能在 localhost 登录。远程访问前必须创建新用户或修改配置。
单节点 RabbitMQ 部署架构与组件关系 CentOS 7/8 操作系统 systemd 管理 · 防火墙开放 5672/15672 端口 Erlang/OTP 运行时 (BEAM 虚拟机) 进程调度 · 内存管理 · 分布式通信 RabbitMQ Server 核心进程 虚拟主机 · 交换机 · 队列 · 绑定 · 消息路由 rabbitmq_management 插件 Web UI (15672) · REST API (15672) AMQP 客户端端口:5672 生产消费消息 管理界面端口:15672 Web 管理 · REST API

3.4 基础命令行操作

掌握以下核心命令,是日常运维的必备技能。我们将命令按功能分类整理。

3.4.1 服务管理

操作 命令 说明
启动 systemctl start rabbitmq-server 启动 RabbitMQ 服务
停止 systemctl stop rabbitmq-server 优雅关闭服务
重启 systemctl restart rabbitmq-server 重启服务(配置变更后常用)
状态 systemctl status rabbitmq-server 查看运行状态与最近日志
开机自启 systemctl enable rabbitmq-server 设置开机自动启动

3.4.2 插件管理

# 列出所有插件及启用状态
rabbitmq-plugins list

# 启用插件(例如管理插件)
rabbitmq-plugins enable rabbitmq_management

# 禁用插件
rabbitmq-plugins disable rabbitmq_management

# 查看已启用插件列表
rabbitmq-plugins list -e

3.4.3 用户与权限管理

# 创建新用户
rabbitmqctl add_user admin StrongPassword123

# 设置用户标签(admin 标签赋予管理界面访问权限)
rabbitmqctl set_user_tags admin administrator

# 设置用户权限(格式:vhost 配置 写 读)
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

# 列出所有用户
rabbitmqctl list_users

# 修改密码
rabbitmqctl change_password admin NewPassword456

# 删除用户
rabbitmqctl delete_user guest
权限模型速记: RabbitMQ 的权限控制基于 虚拟主机(vhost)。每个用户对每个 vhost 可以分别设置配置(交换机/队列的声明与删除)、写(消息发布)、读(消息消费)三种权限。生产环境建议遵循最小权限原则。

3.4.4 虚拟主机管理

# 创建虚拟主机
rabbitmqctl add_vhost my_vhost

# 列出所有虚拟主机
rabbitmqctl list_vhosts

# 删除虚拟主机
rabbitmqctl delete_vhost my_vhost

3.4.5 队列与消息监控

# 列出所有队列(含消息数量)
rabbitmqctl list_queues

# 列出队列详细信息(名称、消息数、消费者数、内存占用)
rabbitmqctl list_queues name messages consumers memory

# 列出所有交换机
rabbitmqctl list_exchanges

# 列出所有绑定关系
rabbitmqctl list_bindings

# 查看节点状态(集群信息、内存、磁盘)
rabbitmqctl status

3.5 基础运维检查清单

部署完成后,建议按以下清单进行验证,确保环境健康可用:

  1. 服务状态检查: systemctl status rabbitmq-server 显示 active (running)。
  2. 端口监听检查: ss -tlnp | grep -E '5672|15672' 确认端口已监听。
  3. 管理界面访问: 浏览器打开 http://IP:15672,使用 admin 用户登录成功。
  4. 消息收发测试: 使用 rabbitmqadmin 工具或编写简单 Python 脚本发送/消费一条消息。
  5. 日志检查: 查看 /var/log/rabbitmq/rabbit@hostname.log 无 ERROR 级别日志。
  6. 资源限制确认: rabbitmqctl status 中 disk_free_limit 和 vm_memory_high_watermark 符合预期。
RabbitMQ 基础运维命令分类与操作流程 rabbitmqctl / rabbitmq-plugins 服务管理 start/stop/status 插件管理 enable/disable/list 用户权限 add/set/delete 队列监控 list_queues/status 日常运维操作流程 状态检查 → 日志分析 → 用户权限调整 → 队列监控 → 资源告警处理 生产环境建议:将常用命令封装为运维脚本,配合监控系统自动执行 例如:每日凌晨执行 rabbitmqctl list_queues 记录消息积压量

3.6 常见问题与排障

问题现象 可能原因 解决方案
服务启动失败,日志显示 epmd error Erlang 端口映射守护进程未启动 systemctl start epmd 或重启 Erlang 服务
Web 管理界面无法访问 防火墙未放行 15672 端口 firewall-cmd --add-port=15672/tcp --permanent
远程无法用 guest 登录 guest 用户默认仅限 localhost 创建 admin 用户并赋予 administrator 标签
队列消息积压,消费者不消费 消费者连接断开或 Qos 设置不合理 检查消费者日志,调整 prefetch count
磁盘告警 disk_free_limit 磁盘空间不足或限制设置过高 清理磁盘或调整 disk_free_limit 配置
排障黄金法则: 遇到问题先看日志!RabbitMQ 的日志位于 /var/log/rabbitmq/ 目录下,文件名格式为 rabbit@hostname.log。日志中会明确记录错误原因和堆栈信息,是定位问题的第一手资料。

3.7 本章小结

通过本章的学习,你已经完成了以下关键任务:

  • 在 CentOS 上成功安装了 Erlang 和 RabbitMQ Server
  • 启用了 rabbitmq_management 插件并访问 Web 管理界面
  • 掌握了服务管理、插件管理、用户权限、队列监控等核心命令
  • 了解了常见问题的排障思路