跳到主要内容
版本:4.1

在基于 RPM 的 Linux 上安装 (RHEL, CentOS Stream, Fedora, Amazon Linux 2023)

概述

本指南涵盖了在基于 RPM 的 Linux (Red Hat Enterprise Linux, CentOS Stream, Fedora) 上安装 RabbitMQ。

标准 RPM 发行版仓库中包含的版本可能落后于最新的 RabbitMQ 版本,并且可能提供已经停止支持的 RabbitMQ 版本。

RabbitMQ 团队制作了自己的 RPM 软件包,并使用一组 *.rabbitmq.com 上的仓库镜像 分发它们。

安装这些 RPM 有两种方法

  • 使用 *.rabbitmq.com dnf/yum 仓库安装软件包(强烈推荐此选项)
  • 下载软件包并使用 rpm 安装。此选项将需要手动安装所有软件包依赖项,并使升级更加困难。

本指南涵盖的一些主题包括

等等。

支持的发行版

RabbitMQ 在几个主要的基于 RPM 的发行版上受支持,这些发行版仍由其主要供应商或开发人员组积极维护。

请注意,现代版本的 Erlang 可能与较旧的发行版(例如,三到四年以上的版本)不兼容,或者在较旧的发行版或 OS 内核版本上几乎或完全没有经过测试就发布。

较旧的发行版也可能缺少足够新的 OpenSSL 版本。支持的 Erlang 版本不能在不提供 OpenSSL 1.1 作为系统库的发行版上使用。CentOS 7 和旧于 26 的 Fedora 版本就是此类发行版的示例。

目前,受支持的基于 RPM 的发行版列表包括

如果满足依赖项,这些软件包可能在其他基于 RPM 的发行版上工作,但它们的测试和支持是在尽力而为的基础上完成的。

用户权限要求

RabbitMQ RPM 软件包将需要 sudo 权限才能安装和管理。在 sudo 不可用的环境中,请考虑使用通用二进制构建

安装 Erlang

在安装 RabbitMQ 之前,您必须安装受支持版本的 Erlang/OTP。标准的 Red Hat、CentOS Stream 和 CentOS 衍生仓库提供的 Erlang 版本通常已过时,不能用于运行最新的 RabbitMQ 版本。

在基于 RPM 的发行版上有三个现代 Erlang 的替代来源

来自 RabbitMQ 的零依赖 Erlang

用于运行 RabbitMQ 的零依赖 Erlang RPM 软件包可以从 GitHub 的直接下载以及 Yum 仓库安装,如其 README 中所述。

顾名思义,该软件包剥离了一些对于运行 RabbitMQ 非必要的 Erlang 模块和依赖项。

软件包依赖项

使用 Yum 安装时,只要兼容版本可用,Erlang/OTP 以外的所有依赖项都应自动解析和安装。如果不是这种情况,则必须手动安装依赖软件包。

但是,当通过 yum 安装本地 RPM 文件时,必须手动安装依赖项。依赖项是

使用 Cloudsmith 镜像 dnf/yum 仓库安装

提示

为什么本节讨论镜像?开源 RabbitMQ 发布基础设施将软件包发布到名为 Cloudsmith 的服务。

从那里,软件包被分发到欧盟和北美地区的两个镜像仓库。与 Cloudsmith 帐户不同,这些镜像仓库具有显著更高的流量配额,并且从它们下载不会因当月超出配额而被阻止。

请使用这些镜像,而不是直接从 Cloudsmith 安装软件包。

本节的其余部分将演示如何设置仓库文件,以从 *.rabbitmq.com 镜像之一安装 RabbitMQ 和 Erlang。

导入签名密钥

Yum 将验证它安装的任何软件包的签名,因此该过程的第一步是导入签名密钥

## primary RabbitMQ signing key
rpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc'
## modern Erlang repository
rpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key'
## RabbitMQ server repository
rpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key'

为 RabbitMQ 和现代 Erlang 添加 Yum 仓库

为了使用 Yum 仓库,必须在 /etc/yum.repos.d/ 目录下添加一个 .repo 文件(例如 rabbitmq.repo)。

重要提示

仓库文件的内容在不同的发行版系列之间略有不同。请确保使用下面的适当选项卡。

重要提示

这些仓库镜像仅提供 64 位 x86 (amd64) Erlang 软件包。64 位 ARM (aarch64) Erlang 软件包必须从 GitHub 下载,并使用 rpm 直接安装,如零依赖 Erlang RPM 软件包 README 中所述。

文件的内容在不同的发行版系列之间略有不同

  • 最新发行版:现代 Fedora 版本、Red Hat 9、CentOS Stream 9、Rocky Linux 9、Alma Linux 9
  • 较旧的发行版:RHEL 8、Rocky Linux 8、Alma Linux 8、Amazon Linux 2023、较旧的 Fedora 版本

以下示例设置了一个仓库,该仓库将从 Cloudsmith 镜像安装 RabbitMQ 及其 Erlang 依赖项,并以 RHEL 9、CentOS Stream 9、Amazon Linux 2023、现代 Fedora 版本、Rocky Linux 9、Alma Linux 9、Oracle Linux 9 为目标。

这些仓库镜像仅提供 64 位 x86 (amd64) Erlang 软件包。

# In /etc/yum.repos.d/rabbitmq.repo

##
## Zero dependency Erlang RPM
##

[modern-erlang]
name=modern-erlang-el9
# Use a set of mirrors maintained by the RabbitMQ core team.
# The mirrors have significantly higher bandwidth quotas.
baseurl=https://yum1.rabbitmq.com/erlang/el/9/$basearch
https://yum2.rabbitmq.com/erlang/el/9/$basearch
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md

[modern-erlang-noarch]
name=modern-erlang-el9-noarch
# Use a set of mirrors maintained by the RabbitMQ core team.
# The mirrors have significantly higher bandwidth quotas.
baseurl=https://yum1.rabbitmq.com/erlang/el/9/noarch
https://yum2.rabbitmq.com/erlang/el/9/noarch
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key
https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md

[modern-erlang-source]
name=modern-erlang-el9-source
# Use a set of mirrors maintained by the RabbitMQ core team.
# The mirrors have significantly higher bandwidth quotas.
baseurl=https://yum1.rabbitmq.com/erlang/el/9/SRPMS
https://yum2.rabbitmq.com/erlang/el/9/SRPMS
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key
https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1


##
## RabbitMQ Server
##

[rabbitmq-el9]
name=rabbitmq-el9
baseurl=https://yum2.rabbitmq.com/rabbitmq/el/9/$basearch
https://yum1.rabbitmq.com/rabbitmq/el/9/$basearch
repo_gpgcheck=1
enabled=1
# Cloudsmith's repository key and RabbitMQ package signing key
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md

[rabbitmq-el9-noarch]
name=rabbitmq-el9-noarch
baseurl=https://yum2.rabbitmq.com/rabbitmq/el/9/noarch
https://yum1.rabbitmq.com/rabbitmq/el/9/noarch
repo_gpgcheck=1
enabled=1
# Cloudsmith's repository key and RabbitMQ package signing key
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md

[rabbitmq-el9-source]
name=rabbitmq-el9-source
baseurl=https://yum2.rabbitmq.com/rabbitmq/el/9/SRPMS
https://yum1.rabbitmq.com/rabbitmq/el/9/SRPMS
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
gpgcheck=0
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md

使用 dnf (yum) 安装软件包

更新软件包元数据

dnf update -y

接下来,从标准仓库安装依赖项

## install these dependencies from standard OS repositories
dnf install -y logrotate

最后,安装现代 Erlang 和 RabbitMQ

## install RabbitMQ and zero dependency Erlang
dnf install -y erlang rabbitmq-server

基于 RPM 的发行版中的软件包版本锁定

yum 版本锁定插件可用于防止意外的软件包升级。使用它会带来使系统在更新方面落后的风险,包括重要的错误修复和安全补丁。

使用 rpm 和直接下载

下载服务器软件包后,以 'root' 身份发出以下命令

rpm --import https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc

## install these dependencies from standard OS repositories
dnf install -y logrotate

# The RabbitMQ RPM package is suitable for both RHEL 9 (modern) and RHEL 8-based (older) distributions
dnf install -y rabbitmq-server-4.1.0-1.el8.noarch.rpm

RabbitMQ 公共签名密钥也可以从 rabbitmq.com 下载

rpm --import https://rabbitmq.cn/rabbitmq-release-signing-key.asc

## install these dependencies from standard OS repositories
dnf install -y logrotate

# The RabbitMQ RPM package is suitable for both RHEL 9 (modern) and RHEL 8-based (older) distributions
dnf install -y rabbitmq-server-4.1.0-1.el8.noarch.rpm

如何清除本地 dnf 缓存

在某些罕见情况下,即使在运行 dnf update 后,RPM 仓库中可用的新版本也不会对 dnf install 可见。

在这种情况下,可能需要清除本地缓存

dnf clean metadata

dnf clean dbcache

dnf clean all

清除缓存后,dnf 将必须从所有仓库(包括发行版的标准仓库)重新下载所有元数据。这可能需要一些时间。

直接下载

在某些情况下,手动下载和安装软件包可能更容易。软件包可以从 GitHub 下载。

描述下载签名
RPM,适用于 Fedora 38+、RHEL Linux 8.x 和 9.x、CentOS Stream 9、Rocky Linux 9、Alma Linux 9、Amazon Linux 2023rabbitmq-server-4.1.0-1.el8.noarch.rpm签名

运行 RabbitMQ 服务器

启动服务器

默认情况下,安装 RabbitMQ 服务器软件包时,服务器不会作为守护程序启动。要在系统启动时默认启动守护程序,请以管理员身份运行

systemctl enable rabbitmq-server

作为管理员,像往常一样启动和停止服务器,例如使用 systemctl

systemctl start rabbitmq-server

systemctl status rabbitmq-server

systemctl stop rabbitmq-server

配置 RabbitMQ

在大多数系统中,节点应该能够使用所有默认设置启动和运行。请参阅配置指南以了解更多信息,并参阅部署指南以获取超出开发环境的指南。

注意:节点设置为以系统用户 rabbitmq 身份运行。如果更改了节点数据库或日志的位置,则文件和目录必须归此用户所有。

RabbitMQ 节点绑定到端口(打开服务器 TCP 套接字),以便接受客户端和 CLI 工具连接。其他进程和工具(如 SELinux)可能会阻止 RabbitMQ 绑定到端口。发生这种情况时,节点将无法启动。有关更多详细信息,请参阅网络指南

默认用户访问

代理创建了一个用户 guest,密码为 guest。未配置的客户端通常将使用这些凭据。默认情况下,这些凭据只能在作为 localhost 连接到代理时使用,因此您需要先采取措施才能从任何其他机器连接。

有关如何创建更多用户和删除 guest 用户的信息,请参阅有关访问控制的文档。

控制 Linux 上的系统限制

运行生产工作负载的 RabbitMQ 安装可能需要调整系统限制和内核参数,以便处理大量并发连接和队列。需要调整的主要设置是最大打开文件数,也称为 ulimit -n。许多操作系统上的默认值对于消息代理来说太低了(在多个 Linux 发行版上为 1024)。我们建议在生产环境中为用户 rabbitmq 允许至少 65536 个文件描述符。4096 应该足以满足许多开发工作负载。

有两个限制在起作用:OS 内核允许的最大打开文件数 (fs.file-max) 和每个用户的限制 (ulimit -n)。前者必须高于后者。

使用 systemd(最新的 Linux 发行版)

在使用 systemd 的发行版上,OS 限制通过 /etc/systemd/system/rabbitmq-server.service.d/limits.conf 中的配置文件控制。例如,要将最大打开文件句柄限制 (nofile) 设置为 64000

[Service]
LimitNOFILE=64000

如果 LimitNOFILE 设置为高于 65536 的值,则必须相应地更新 ERL_MAX_PORTS 环境变量,以增加运行时限制。

请参阅 systemd 文档,以了解有关支持的限制和其他指令的信息。

使用 Docker

要为 Docker 容器配置内核限制,请使用 Docker 守护程序配置文件中的 "default-ulimits" 键。该文件必须安装在 Docker 主机上的 /etc/docker/daemon.json

{
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 64000,
"Soft": 64000
}
}
}

如果上述限制设置为高于 65536 的值,则必须相应地更新 ERL_MAX_PORTS 环境变量,以增加运行时限制。

不使用 systemd(较旧的 Linux 发行版)

在不使用 systemd 的发行版上,调整 RabbitMQ 每个用户的限制的最直接方法是编辑 /etc/default/rabbitmq-server(由 RabbitMQ Debian 软件包提供)或 rabbitmq-env.conf,以在服务启动之前调用 ulimit

ulimit -S -n 64000

soft 限制不能高于 hard 限制(在许多发行版中默认为 4096)。可以通过 /etc/security/limits.conf 增加 hard 限制。这也需要启用 pam_limits.so 模块并重新登录或重启。请注意,无法更改正在运行的 OS 进程的限制。

如果上述限制设置为高于 65536 的值,则必须相应地更新 ERL_MAX_PORTS 环境变量,以增加运行时限制。

有关使用 sysctl 控制 fs.file-max 的更多信息,请参阅优秀的 Riak 关于打开文件限制调整的指南

验证限制

RabbitMQ 管理 UI 在“概述”选项卡上显示可供其使用的文件描述符数量。

rabbitmq-diagnostics status

包括相同的值。

以下命令

cat /proc/$RABBITMQ_BEAM_PROCESS_PID/limits

可用于显示正在运行的进程的有效限制。$RABBITMQ_BEAM_PROCESS_PID 是运行 RabbitMQ 的 Erlang VM 的 OS PID,由 rabbitmq-diagnostics status 返回。

配置管理工具

配置管理工具(例如 Chef、Puppet、BOSH)提供系统限制调整方面的帮助。我们的开发人员工具指南列出了相关的模块和项目。

管理服务

要启动和停止服务器,请使用 service 工具。服务名称为 rabbitmq-server

# stop the local node
sudo service rabbitmq-server stop

# start it back
sudo service rabbitmq-server start

service rabbitmq-server status 将报告 systemd(或类似的服务管理器)观察到的服务状态

# check on service status as observed by service manager
sudo service rabbitmq-server status

它将产生类似于以下的输出

Redirecting to /bin/systemctl status rabbitmq-server.service
● rabbitmq-server.service - RabbitMQ broker
Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/rabbitmq-server.service.d
└─limits.conf
Active: active (running) since Wed 2021-05-22 10:21:32 UTC; 25s ago
Main PID: 957 (beam.smp)
Status: "Initialized"
CGroup: /system.slice/rabbitmq-server.service
├─ 957 /usr/lib/erlang/erts-10.2/bin/beam.smp -W w -A 64 -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -K true -- -root /usr/lib/erlang -progname erl -- -home /var/lib/rabbitmq -- ...
├─1411 /usr/lib/erlang/erts-10.2/bin/epmd -daemon
├─1605 erl_child_setup 400000
├─2860 inet_gethost 4
└─2861 inet_gethost 4

Aug 26 10:21:30 localhost.localdomain rabbitmq-server[957]: ## ##
Aug 26 10:21:30 localhost.localdomain rabbitmq-server[957]: ## ## RabbitMQ 4.0.9. Copyright (c) 2005-2025 Broadcom. All Rights Reserved. The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
Aug 26 10:21:30 localhost.localdomain rabbitmq-server[957]: ########## Licensed under the MPL 2.0. Website: https://rabbitmq.cn/
Aug 26 10:21:30 localhost.localdomain rabbitmq-server[957]: ###### ##
Aug 26 10:21:30 localhost.localdomain rabbitmq-server[957]: ########## Logs: /var/log/rabbitmq/rabbit@localhost.log
Aug 26 10:21:30 localhost.localdomain rabbitmq-server[957]: /var/log/rabbitmq/rabbit@localhost_upgrade.log
Aug 26 10:21:30 localhost.localdomain rabbitmq-server[957]: Starting broker...
Aug 26 10:21:32 localhost.localdomain rabbitmq-server[957]: systemd unit for activation check: "rabbitmq-server.service"
Aug 26 10:21:32 localhost.localdomain systemd[1]: Started RabbitMQ broker.
Aug 26 10:21:32 localhost.localdomain rabbitmq-server[957]: completed with 6 plugins.

rabbitmqctlrabbitmq-diagnostics 和其他 CLI 工具 将在 PATH 中可用,并且可以由启用 sudo 的用户调用

# checks if the local node is running and CLI tools can successfully authenticate with it
sudo rabbitmq-diagnostics ping

# prints enabled components (applications), TCP listeners, memory usage breakdown, alarms
# and so on
sudo rabbitmq-diagnostics status

# prints cluster membership information
sudo rabbitmq-diagnostics cluster_status

# prints effective node configuration
sudo rabbitmq-diagnostics environment

如果没有任何节点正在运行,则所有 rabbitmqctl 命令都将报告错误。请参阅CLI 工具监控指南以了解更多信息。

日志文件和管理

服务器日志可以在可配置的目录下找到,当通过 Linux 软件包管理器安装 RabbitMQ 时,该目录通常默认为 /var/log/rabbitmq

RABBITMQ_LOG_BASE 可用于覆盖日志目录位置

假设是基于 systemd 的发行版,可以使用以下命令检查系统服务日志

journalctl --system

这需要超级用户权限。可以过滤其输出以将其缩小到 RabbitMQ 特定的条目

sudo journalctl --system | grep rabbitmq

输出将类似于以下内容

Aug 26 11:03:04 localhost rabbitmq-server[968]: ##  ##
Aug 26 11:03:04 localhost rabbitmq-server[968]: ## ## RabbitMQ 4.0.9. Copyright (c) 2005-2025 Broadcom. All Rights Reserved. The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
Aug 26 11:03:04 localhost rabbitmq-server[968]: ########## Licensed under the MPL 2.0. Website: https://rabbitmq.cn/
Aug 26 11:03:04 localhost rabbitmq-server[968]: ###### ##
Aug 26 11:03:04 localhost rabbitmq-server[968]: ########## Logs: /var/log/rabbitmq/rabbit@localhost.log
Aug 26 11:03:04 localhost rabbitmq-server[968]: /var/log/rabbitmq/rabbit@localhost_upgrade.log
Aug 26 11:03:04 localhost rabbitmq-server[968]: Starting broker...
Aug 26 11:03:05 localhost rabbitmq-server[968]: systemd unit for activation check: "rabbitmq-server.service"
Aug 26 11:03:06 localhost rabbitmq-server[968]: completed with 6 plugins.

日志轮转

代理始终附加到日志文件,因此保留了完整的日志历史记录。

logrotate 是日志文件轮转和压缩的推荐方法。默认情况下,软件包将设置 logrotate 以每周在默认 /var/log/rabbitmq 目录中找到的文件上运行。轮转配置可以在 /etc/logrotate.d/rabbitmq-server 中找到。

© . All rights reserved.