ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

CentOS 7下RabbitMQ与Erlang官方RPM包安装部署指南

2026/8/17 8:03:05 拓冰建站 浏览量
CentOS 7下RabbitMQ与Erlang官方RPM包安装部署指南 1. 项目概述与核心价值最近在给一个微服务项目做部署环境是CentOS 7需要安装RabbitMQ作为消息中间件。这活儿听起来简单不就是下载个.rpm包然后yum install一下吗但真上手了才发现RabbitMQ和它的“灵魂伴侣”Erlang在Linux下的安装尤其是通过官方.rpm包的方式坑点还真不少。网上教程五花八门有的直接用EPEL仓库的旧版本有的编译安装Erlang搞得环境乱七八糟对于生产环境来说版本可控、依赖清晰、卸载干净才是硬道理。所以我决定把这次通过官方.rpm文件安装RabbitMQ和Erlang的完整过程、背后的原理以及踩过的那些坑系统地梳理一遍。如果你也在寻求一种干净、可控、适合生产环境的安装方式这篇记录应该能帮到你。简单来说这个方法的核心价值在于绕过系统仓库可能存在的版本滞后问题直接从RabbitMQ和Erlang官方获取指定版本的.rpm包进行安装实现版本精准控制并且保持依赖管理的清晰性便于后续的升级和维护。整个过程会涉及Erlang解决方案的选择、GPG密钥验证、系统依赖检查等关键步骤我会逐一拆解。2. 核心思路与方案选型解析2.1 为什么选择.rpm包而非源码编译或仓库安装在Linux下安装软件常见的有三种方式源码编译、通过系统仓库如yum安装、使用预编译的二进制包如.rpm, .deb。对于RabbitMQ这种包含复杂运行时Erlang的服务选择需要慎重。源码编译最灵活可以极致优化。但编译Erlang本身就是一个耗时且容易出错的过程需要解决大量依赖如ncurses-devel, openssl-devel等。对于生产环境我们追求的是稳定和可重复性而不是极致的性能调优因此源码编译通常不是首选。系统仓库安装最方便一条命令yum install rabbitmq-server即可。但缺点非常明显版本严重滞后。CentOS/RHEL系以稳定著称其官方仓库中的软件版本往往比上游社区晚好几个大版本。你可能安装到一个非常老的RabbitMQ无法使用新特性甚至存在已知的安全漏洞。EPEL仓库情况稍好但版本仍然不够新且可能与系统其他组件存在不可预见的依赖冲突。官方.rpm包安装这是我们本次采用的方法。它平衡了可控性和便利性。优势直接从软件官方获取版本最新或可自由选择历史版本依赖关系明确包内已声明安装、卸载、查询都由RPM包管理系统统一管理干净利落。挑战需要手动处理Erlang运行时依赖需要从两个不同的官方源下载包需要关注GPG签名验证以确保包的安全性。结论对于需要较新版本、且希望部署过程清晰可追溯的生产环境直接使用官方.rpm包是最佳实践。2.2 Erlang版本匹配RabbitMQ的“生命线”这是安装RabbitMQ前最重要的一步。RabbitMQ是用Erlang语言编写的它运行在Erlang虚拟机BEAM上。并非任何Erlang版本都能运行任何RabbitMQ版本两者有严格的兼容性要求。RabbitMQ官方维护着一个详细的 兼容性矩阵 。在决定安装版本前必须去这个页面核对。例如RabbitMQ 3.13.x通常要求Erlang 25.2或更高版本并且对26.x也有明确支持。重要提示永远不要使用系统仓库里陈旧的Erlang比如CentOS 7默认的Erlang 18/19来运行新版的RabbitMQ这会导致服务无法启动或运行时出现诡异错误。我们的方案是根据选定的RabbitMQ版本去Erlang官方仓库下载对应兼容的、专门为RabbitMQ构建的Erlang .rpm包。RabbitMQ团队贴心地为一些主流Erlang版本提供了优化构建的包这些包通常标记为eslErlang Solutions或直接来自Erlang官方仓库。2.3 系统环境准备与依赖检查在开始下载安装包之前我们需要确保系统环境是干净的并且具备必要的工具。我们将在一台全新的CentOS 7.9最小化安装系统上操作。首先更新系统并安装一些基础工具sudo yum update -y sudo yum install -y wget socat logrotatewget用于从网络下载文件。socatRabbitMQ管理插件可能依赖的网络工具。logrotate系统日志轮转工具RabbitMQ会使用它来管理自己的日志。检查是否已有旧版本Erlang或RabbitMQ# 检查Erlang erl -version 2/dev/null || echo “Erlang not found” # 检查RabbitMQ rpm -qa | grep -E “rabbitmq|erlang”如果发现有旧版本特别是通过非RPM方式安装的需要先彻底清理避免冲突。使用yum remove卸载RPM包并手动清理残留配置和数据目录/var/lib/rabbitmq/,/etc/rabbitmq/。3. 实操步骤详解下载与安装接下来我们进入核心实操环节。假设我们计划安装RabbitMQ 3.13.0根据兼容性表我们选择与之匹配的Erlang 26.2.1。3.1 下载Erlang官方RPM包Erlang的官方包存放于https://packages.erlang-solutions.com/erlang/。我们需要找到适用于CentOS 7EL 7的RPM包。确定包名Erlang RPM包命名通常有固定模式例如esl-erlang_26.2.1-1~centos~7_amd64.rpm。其中esl-erlang是包名26.2.1是版本1是发布版本号centos~7指代系统amd64是架构。执行下载我们可以使用wget直接下载。为了确保可重复性建议将下载命令写在脚本里或记录下完整URL。# 创建软件包存放目录 sudo mkdir -p /opt/software cd /opt/software # 下载Erlang 26.2.1 RPM包 (请注意具体URL可能随版本更新而变化以下为示例) sudo wget https://packages.erlang-solutions.com/erlang/esl-erlang/FLAVOUR_1_general/esl-erlang_26.2.1-1~centos~7_amd64.rpm实操心得Erlang Solutions的仓库结构有时会调整。如果上述URL失效最可靠的方法是访问https://packages.erlang-solutions.com/erlang/在页面中导航找到对应版本和系统的目录然后复制链接。对于生产环境建议将重要的RPM包备份到内部文件服务器或制品仓库如Nexus中。3.2 下载RabbitMQ官方RPM包RabbitMQ的官方RPM包托管在GitHub Releases上地址规律是https://github.com/rabbitmq/rabbitmq-server/releases/download/v{版本}/rabbitmq-server-{版本}-1.el7.noarch.rpm。执行下载# 继续在 /opt/software 目录下操作 # 下载RabbitMQ 3.13.0 RPM包 sudo wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.13.0/rabbitmq-server-3.13.0-1.el7.noarch.rpmnoarch表示这个包是架构无关的因为RabbitMQ是Erlang字节码在任何架构的Erlang虚拟机上都能运行。1.el7是发布版本号针对EL7RHEL/CentOS 7系统。3.3 安装Erlang RPM包安装下载好的Erlang包。这里可能会遇到依赖问题因为Erlang的RPM包可能依赖一些特定的系统库。cd /opt/software sudo rpm -ivh esl-erlang_26.2.1-1~centos~7_amd64.rpm如果使用rpm -ivh安装时报告依赖错误例如缺少libcrypto.so.1.1或libstdc等不要慌张。这通常是因为系统自带的库版本过低。解决方案方案A推荐使用yum localinstall它会自动尝试从配置的Yum仓库中解决依赖。sudo yum localinstall -y esl-erlang_26.2.1-1~centos~7_amd64.rpm方案B如果yum localinstall也无法解决可能是需要配置额外的仓库如EPEL或更新基础库。确保EPEL仓库已启用sudo yum install -y epel-release sudo yum update -y然后再次尝试yum localinstall。验证Erlang安装erl -version # 或进入Erlang shell查看版本信息 erl 1 erlang:system_info(otp_release). “26” 2 halt().看到正确的版本号输出说明Erlang安装成功。3.4 安装RabbitMQ RPM包Erlang就绪后安装RabbitMQ就简单多了。cd /opt/software sudo yum localinstall -y rabbitmq-server-3.13.0-1.el7.noarch.rpmyum localinstall会检查RabbitMQ包的依赖此时核心依赖esl-erlang我们已经安装所以过程会很顺利。安装完成后RabbitMQ的相关文件会部署到以下标准位置配置文件目录/etc/rabbitmq/初始可能只有一个rabbitmq-env.conf示例文件数据与日志目录/var/lib/rabbitmq/,/var/log/rabbitmq/服务管理脚本/usr/lib/systemd/system/rabbitmq-server.service(Systemd)命令行工具/usr/sbin/rabbitmqctl,/usr/sbin/rabbitmq-plugins,/usr/sbin/rabbitmq-server等3.5 管理服务与基础配置启动服务并设置开机自启sudo systemctl daemon-reload # 重新加载Systemd配置 sudo systemctl enable rabbitmq-server # 启用开机自启 sudo systemctl start rabbitmq-server # 启动服务 sudo systemctl status rabbitmq-server # 检查状态看到active (running)状态即为成功。启用Web管理插件RabbitMQ自带一个基于Web的管理控制台非常方便。sudo rabbitmq-plugins enable rabbitmq_management执行后会提示安装一些依赖插件如cowboy,rabbitmq_web_dispatch等确认即可。创建管理用户默认的guest用户只能在本地登录。我们需要创建一个新管理员用户。# 添加用户用户名‘admin’密码‘YourStrongPassword123!’ sudo rabbitmqctl add_user admin ‘YourStrongPassword123!’ # 设置标签为‘administrator’拥有所有权限 sudo rabbitmqctl set_user_tags admin administrator # 设置虚拟主机‘/’上的所有权限 sudo rabbitmqctl set_permissions -p / admin “.*” “.*” “.*”安全警告务必使用强密码并在生产环境中考虑使用rabbitmqctl add_user admin以交互方式输入密码避免在命令行历史中留下明文密码。访问管理界面打开浏览器访问http://你的服务器IP:15672。使用上面创建的admin账号登录。4. 深入解析GPG验证与仓库化安装4.1 为什么要进行GPG验证直接从网上下载二进制包安装存在被篡改的风险。GPGGNU Privacy Guard签名验证可以确保你下载的软件包确实来自官方且未被中间人修改。这是一种重要的安全实践。RabbitMQ和Erlang的GPG密钥验证流程导入公钥首先需要将软件官方的GPG公钥导入到系统的RPM密钥环中。验证签名在安装RPM包时使用rpm命令的--checksig或-K选项来验证包的签名。以RabbitMQ为例RabbitMQ团队的GPG密钥ID通常可以在其GitHub仓库或下载页面找到。导入密钥示例具体密钥ID需查阅官方文档sudo rpm --import https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc验证包签名rpm -K rabbitmq-server-3.13.0-1.el7.noarch.rpm输出中应包含digests signatures OK或gpg OK字样。对于Erlang Solutions的包过程类似需要从其官网找到对应的公钥进行导入。虽然手动安装时有时会跳过这一步但对于生产环境尤其是安全要求严格的场景GPG验证是必须的。4.2 从“手动下载”到“配置Yum仓库”我们上面演示的是手动下载单个RPM包。在实际的运维中如果服务器数量多或者需要频繁升级手动下载的方式效率低下。更优雅的做法是在服务器上直接配置官方的Yum仓库。这样你就可以像安装系统软件一样使用yum install rabbitmq-server并且能方便地进行yum update。配置RabbitMQ官方Yum仓库下载仓库定义文件sudo wget -O /etc/yum.repos.d/rabbitmq.repo https://packagecloud.io/rabbitmq/rabbitmq-server/el/7.repo注意RabbitMQ的仓库托管在packagecloud.io上述是EL7的地址其他版本需调整导入RabbitMQ的GPG密钥如果仓库配置里没有自动包含sudo rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey # 或者从其GitHub导入 sudo rpm --import https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc清理并重建Yum缓存sudo yum clean all sudo yum makecache此时就可以搜索和安装了sudo yum list available | grep rabbitmq sudo yum install -y rabbitmq-serverYum会自动解决Erlang依赖通常是从RabbitMQ仓库或EPEL仓库安装。配置Erlang Solutions Yum仓库 类似地也可以配置Erlang的官方仓库确保能安装到指定版本的Erlang。具体步骤参考Erlang Solutions官网的文档通常涉及安装一个包含仓库配置的RPM包。两种方式对比方式优点缺点适用场景手动下载.rpm版本控制绝对精准离线环境可用安装过程透明。依赖需手动解决升级麻烦多台服务器部署效率低。单次部署、特定版本要求、无外网或严格隔离的环境。配置官方仓库安装升级极其方便自动依赖解决适合自动化运维。需要服务器能访问外网特定地址受仓库中版本可用性限制。多服务器、需要持续更新、具备外网访问或内部镜像的环境。5. 常见问题排查与运维技巧即使按照步骤操作也可能会遇到问题。这里记录几个我踩过的坑和解决方案。5.1 服务启动失败排查如果systemctl status rabbitmq-server显示失败按以下顺序排查检查Erlang版本这是最常见的问题。运行erl -version确认版本是否符合RabbitMQ要求。如果不符合需要卸载错误版本的Erlang安装正确版本。# 查看当前已安装的erlang包 rpm -qa | grep erlang # 卸载注意包名可能不是‘esl-erlang’可能是‘erlang’ sudo yum remove esl-erlang-...检查日志RabbitMQ的启动日志位于/var/log/rabbitmq/目录下查看以rabbithostname开头并以.log结尾的最新文件。sudo tail -f /var/log/rabbitmq/rabbit$(hostname -s).log常见的错误信息会直接打印在日志里例如节点名冲突、Cookie文件问题、磁盘空间不足等。检查Cookie文件Erlang分布式节点通过一个共享的Cookie文件进行认证。RabbitMQ节点和rabbitmqctl工具必须使用相同的Cookie。文件路径/var/lib/rabbitmq/.erlang.cookie该文件必须仅对所有者可读权限400且所有者必须是rabbitmq用户。sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie检查端口占用RabbitMQ默认使用5672AMQP、15672管理等端口。确保这些端口没有被其他进程占用。sudo netstat -tlnp | grep -E ‘:5672|:15672’5.2 性能与生产环境调优建议安装成功只是第一步要让RabbitMQ在生产环境稳定运行还需要一些调优。配置文件/etc/rabbitmq/rabbitmq.conf这是一个主要的配置项来源新版本格式。你可以设置内存阈值、磁盘告警阈值、默认vhost等。# 示例设置内存使用告警阈值为0.770% # vm_memory_high_watermark.relative 0.7 # 设置磁盘空闲空间告警阈值为1GB # disk_free_limit.absolute 1GB建议从示例配置/usr/share/doc/rabbitmq-server-3.13.0/rabbitmq.conf.example复制一份进行修改。环境变量文件/etc/rabbitmq/rabbitmq-env.conf可以在这里设置节点名、配置文件路径、启动参数等。# 示例设置节点名称 # NODENAMErabbitmyhost # 指定Erlang虚拟机启动参数例如增加内存分配 # ERL_ARGS“P 1000000 K true A 128”启用持久化与确认机制这是保证消息不丢失的关键。在生产者端发布消息时设置delivery_mode2持久化在声明队列时设置durabletrue在消费者端使用手动确认模式auto_ackfalse。监控除了自带的管理界面可以结合Prometheus Grafana进行更专业的监控。RabbitMQ提供了 Prometheus插件 。5.3 卸载与彻底清理如果需要卸载为了干净地重装请按顺序执行# 1. 停止服务 sudo systemctl stop rabbitmq-server # 2. 卸载RabbitMQ软件包 sudo yum remove rabbitmq-server # 3. 卸载Erlang软件包 (谨慎操作确保没有其他应用依赖它) sudo yum remove esl-erlang # 4. 手动删除残留数据和配置非常重要 sudo rm -rf /var/lib/rabbitmq/ sudo rm -rf /var/log/rabbitmq/ sudo rm -rf /etc/rabbitmq/执行完这些RabbitMQ和Erlang就从系统中被彻底清除了。下次安装就是一个全新的环境。