3. 单节点部署与基础运维
本章是 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 登录。远程访问前必须创建新用户或修改配置。
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 基础运维检查清单
部署完成后,建议按以下清单进行验证,确保环境健康可用:
- 服务状态检查:
systemctl status rabbitmq-server显示 active (running)。 - 端口监听检查:
ss -tlnp | grep -E '5672|15672'确认端口已监听。 - 管理界面访问: 浏览器打开
http://IP:15672,使用 admin 用户登录成功。 - 消息收发测试: 使用
rabbitmqadmin工具或编写简单 Python 脚本发送/消费一条消息。 - 日志检查: 查看
/var/log/rabbitmq/rabbit@hostname.log无 ERROR 级别日志。 - 资源限制确认:
rabbitmqctl status中disk_free_limit和vm_memory_high_watermark符合预期。
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 管理界面 - 掌握了服务管理、插件管理、用户权限、队列监控等核心命令
- 了解了常见问题的排障思路