概述

本指南涵盖了在基于 RPM 的 Linux(RedHat Enterprise Linux、CentOS、Fedora、openSUSE)上安装 RabbitMQ

RabbitMQ 包含在标准的 Fedora 和 RHEL 存储库中。但是,包含的版本是最新 RabbitMQ 版本之后的许多版本 ,并且可能提供已经不支持的RabbitMQ 版本。

RabbitMQ 团队生产我们自己的 RPM 包并使用 CloudsmithPackageCloud分发它们。

有两种安装这些 RPM 的方法:

以下指南重点介绍在 Fedora、RHEL 和 CentOS 等基于 RPM 的发行版上安装 RabbitMQ。它涵盖了许多主题:

概述

该软件包通过 PackageCloud 上的 Yum 存储库分发。

rabbitmq-server包含在 Fedora 中。但是,包含的版本通常落后于 RabbitMQ 版本。建议您使用 PackageCloud 中的 Yum 存储库。

检查Fedora 软件包的详细信息,了解哪个版本的服务器可用于哪个版本的发行版。

支持的发行版

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

请注意,现代版本的 Erlang 可能与较旧的发行版(例如超过三到四年)不兼容,或者在发行时没有对较旧的发行版或操作系统内核版本进行太多或任何测试。

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

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

  • CentOS Stream 9.x
  • CentOS Linux 8.x
  • 红帽企业 Linux 8.x
  • Fedora 32 到 35(使用 CentOS 8.x 软件包)

如果满足依赖关系,这些包可以在其他基于 RPM 的发行版上运行,但它们的测试和支持是在尽最大努力的基础上完成的。

用户权限要求

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

安装Erlang

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

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

  • RabbitMQ 团队生成了一个精简包,仅提供运行 RabbitMQ 所需的那些组件。这是推荐的选项。
  • openSUSE为 openSUSE Leap生成Erlang 包
  • Erlang Solutions生成的软件包通常是最新的,并且涉及安装可能过多的依赖项列表

来自 RabbitMQ 的零依赖 Erlang

运行 RabbitMQ 的零依赖 Erlang RPM 包 可以从 GitHub 以及Cloudsmith.ioPackageCloud上的 Yum 存储库直接下载安装。

顾名思义,该包剥离了一些对于运行 RabbitMQ 不是必需的 Erlang 模块和依赖项。

来自 openSUSE 的 Erlang 包

openSUSE 软件包存储库提供 Erlang,因此可以使用 Zypper 安装它:

sudo zypper in erlang

标准存储库中可用的 Erlang 版本实际上将落后于最新版本。要使用具有最新功能的最新版本,请 为 Erlang 添加 openSUSE Factory 存储库

# 添加 openSUSE erlang 工厂,obs:// 提取匹配发行版的 http url。
sudo zypper ar -f obs://devel:languages:erlang:Factory openSUSE-Erlang-Factory

# 导入签名密钥并刷新存储库
sudo zypper --gpg-auto-import-keys refresh

# 安装最新的 Erlang 版本erlang中的
sudo zypper

包依赖

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

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

  • erlang:可以从多个存储库安装受支持的 Erlang版本
  • socat
  • logrotate

使用 PackageCloud Yum 存储库安装

PackageCloud 提供了一个带有 RabbitMQ 包的 Yum 存储库。Package Cloud 也可用于通过 yum 安装最新的 Erlang 版本。

设置存储库的一种快速方法是使用Package Cloud 提供的脚本。这不是必需的,应该仔细考虑,因为它将生成的脚本从公共 Internet 传输到特权 shell。

## 使用 PackageCloud 提供的 Yum 存储库设置脚本。
## 在将下载的内容通过管道传输到特权 shell 之前,请始终验证下载的内容!
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash

本节指南的其余部分将重点介绍一种更传统的方式,即显式安装 Yum 存储库文件。

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

## 主 RabbitMQ 签名密钥
rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
## 现代 Erlang 存储库
rpm --import https://packagecloud.io/rabbitmq/erlang/gpgkey
## RabbitMQ 服务器存储库
rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey

为 RabbitMQ 和 Modern Erlang 添加 Yum 存储库

为了使用 Yum 存储库,必须在/etc/yum.repos.d/目录下添加一个.repo文件(例如rabbitmq.repo) 。文件的内容在不同的发行版(例如 CentOS Stream 9、CentOS Stream 8 或 OpenSUSE)之间会略有不同。

Red Hat 8、CentOS Stream 9、CentOS 8、现代 Fedora 版本

以下示例设置了一个存储库,它将从 PackageCloud 安装 RabbitMQ 及其 Erlang 依赖项,并以CentOS Stream 和 CentOS 8为目标。最近的 Fedora 版本可以使用相同的存储库定义。

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

##
## Zero dependency Erlang
##

[rabbitmq_erlang]
name=rabbitmq_erlang
baseurl=https://packagecloud.io/rabbitmq/erlang/el/8/$basearch
repo_gpgcheck=1
gpgcheck=1
enabled=1
# PackageCloud's repository key and RabbitMQ package signing key
gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
       https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

[rabbitmq_erlang-source]
name=rabbitmq_erlang-source
baseurl=https://packagecloud.io/rabbitmq/erlang/el/8/SRPMS
repo_gpgcheck=1
gpgcheck=0
enabled=1
# PackageCloud's repository key and RabbitMQ package signing key
gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
       https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

##
## RabbitMQ server
##

[rabbitmq_server]
name=rabbitmq_server
baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/8/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
# PackageCloud's repository key and RabbitMQ package signing key
gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
       https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

[rabbitmq_server-source]
name=rabbitmq_server-source
baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/8/SRPMS
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

OpenSUSE
以下示例以 OpenSUSE 为目标,仅安装 RabbitMQ 包存储库。假定 Erlang 是从devel:languages:erlang:Factory存储库提供的。

[rabbitmq_rabbitmq-server]
name=rabbitmq_rabbitmq-server
baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/opensuse/15.1/$basearch
enabled=1
repo_gpgcheck=1
pkg_gpgcheck=0
gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
       https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
autorefresh=1
type=rpm-md

[rabbitmq_rabbitmq-server-source]
name=rabbitmq_rabbitmq-server-source
baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/opensuse/15.1/SRPMS
enabled=1
repo_gpgcheck=1
pkg_gpgcheck=0
gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
autorefresh=1
type=rpm-md

使用 Yum 安装软件包

Red Hat 8, CentOS Stream, CentOS 8, Modern Fedora
更新 Yum 包元数据:

yum update -y
yum -q makecache -y --disablerepo='*' --enablerepo='rabbitmq_erlang' --enablerepo='rabbitmq_server'

接下来从标准存储库安装依赖项:

## install these dependencies from standard OS repositories
yum install socat logrotate -y

最后,安装现代 Erlang 和 RabbitMQ:

## install RabbitMQ and zero dependency Erlang from the above repositories,
## ignoring any versions provided by the standard repositories
yum install --repo rabbitmq_erlang --repo rabbitmq_server erlang rabbitmq-server -y

使用 Zypper 安装软件包

首先,更新 Zypper 包元数据:

## 刷新存储库。PackageCloud 使用这些详细的存储库名称
zypper --gpg-auto-import-keys 刷新 rabbitmq_rabbitmq-server
zypper --gpg-auto-import-keys 刷新 rabbitmq_rabbitmq-server-source

然后安装软件包:

## 从 PackageCloud 存储库安装包
zypper install --repo rabbitmq_rabbitmq-server rabbitmq-server

使用 Cloudsmith Yum 存储库安装

Cloudsmith 提供了一个带有 RabbitMQ 包的 Yum 存储库。Cloudsmith 也可用于通过 yum 安装最新的 Erlang 版本

设置存储库的一种快速方法是使用Cloudsmith 提供的脚本。这不是必需的,应该仔细考虑,因为它将生成的脚本从公共 Internet 传输到特权 shell。

## Uses a Cloudsmith-provided Yum repository setup script.
## Always verify what is downloaded before piping it to a privileged shell!
curl -1sLf 'https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/setup.rpm.sh' | sudo -E bash

本节的其余部分将重点介绍一种更传统的方式,即显式安装 Yum 存储库文件。

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

## 主 RabbitMQ 签名密钥
rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
## 现代 Erlang 存储库
rpm --import 'https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key'
## RabbitMQ 服务器存储库
rpm --import 'https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key'

为 RabbitMQ 和 Modern Erlang 添加 Yum 存储库
为了使用 Yum 存储库,必须在/etc/yum.repos.d/目录下添加一个.repo文件(例如rabbitmq.repo) 。文件的内容在不同的发行版(例如 CentOS Stream 9、CentOS Stream 8 或 OpenSUSE)之间会略有不同。

Red Hat 8、CentOS 8、现代 Fedora 版本

以下示例设置了一个存储库,它将从 Cloudsmith 安装 RabbitMQ 及其 Erlang 依赖项,并以CentOS Stream 8为目标。 最近的 Fedora 版本和 CentOS Stream 9可以使用相同的存储库定义。

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

##
## Zero dependency Erlang RPM
##

[rabbitmq_erlang]
name=rabbitmq_erlang
baseurl=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/rpm/el/8/$basearch
repo_gpgcheck=1
enabled=1
# Cloudsmith's repository key and RabbitMQ package signing key
gpgkey=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key
       https://github.com/rabbitmq/signing-keys/releases/download/2.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_erlang-noarch]
name=rabbitmq_erlang-noarch
baseurl=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/rpm/el/8/noarch
repo_gpgcheck=1
enabled=1
# Cloudsmith's repository key and RabbitMQ package signing key
gpgkey=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key
       https://github.com/rabbitmq/signing-keys/releases/download/2.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_erlang-source]
name=rabbitmq_erlang-source
baseurl=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/rpm/el/8/SRPMS
repo_gpgcheck=1
enabled=1
gpgkey=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key
gpgcheck=0
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md


##
## RabbitMQ Server
##

[rabbitmq_server]
name=rabbitmq_server
baseurl=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/el/8/$basearch
repo_gpgcheck=1
enabled=1
# Cloudsmith's repository key and RabbitMQ package signing key
gpgkey=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key
       https://github.com/rabbitmq/signing-keys/releases/download/2.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_server-noarch]
name=rabbitmq_server-noarch
baseurl=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/el/8/noarch
repo_gpgcheck=1
enabled=1
# Cloudsmith's repository key and RabbitMQ package signing key
gpgkey=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key
       https://github.com/rabbitmq/signing-keys/releases/download/2.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_server-source]
name=rabbitmq_server-source
baseurl=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/el/8/SRPMS
repo_gpgcheck=1
enabled=1
gpgkey=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.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

OpenSUSE

以下示例以 OpenSUSE 为目标,仅安装 RabbitMQ 包存储库。假定 Erlang 是从devel:languages:erlang:Factory存储库提供的。

##
## RabbitMQ server
##

[rabbitmq_server]
name=rabbitmq_server
baseurl=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/opensuse/15.1/$basearch
repo_gpgcheck=1
enabled=1
gpgkey=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md

[rabbitmq_server-noarch]
name=rabbitmq_server-noarch
baseurl=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/opensuse/15.1/noarch
repo_gpgcheck=1
enabled=1
gpgkey=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md

[rabbitmq_server-source]
name=rabbitmq_server-source
baseurl=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/opensuse/15.1/SRPMS
repo_gpgcheck=1
enabled=1
gpgkey=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md

使用 Yum 安装软件包
红帽 8、CentOS Stream 9、CentOS 8、现代 Fedora

  • 更新 Yum 包元数据:
yum update -y
yum -q makecache -y --disablerepo='*' --enablerepo='rabbitmq_erlang-noarch' --enablerepo='rabbitmq_server-noarch'

接下来从标准存储库安装依赖项:

## 从标准操作系统存储库安装这些依赖项
yum install socat logrotate -y

最后,安装现代 Erlang 和 RabbitMQ:

## 从上述存储库中安装 RabbitMQ 和零依赖 Erlang,
## 忽略标准存储库提供的任何版本
yum install --repo rabbitmq_erlang --repo rabbitmq_server-noarch erlang rabbitmq-server

使用 Zypper 安装软件包
首先,更新 Zypper 包元数据:

## 刷新 RabbitMQ 存储库
zypper --gpg-auto-import-keys 刷新 rabbitmq_server
zypper --gpg-auto-import-keys 刷新 rabbitmq_server-noarch
zypper --gpg-auto-import-keys 刷新 rabbitmq_server-source

然后安装软件包:

## 从 Cloudsmith 存储库安装包
zypper install --repo rabbitmq_server-noarch

Yum 中的包版本锁定

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

使用 rpm 和下载的 RPM

下载服务器包后,以“root”身份发出以下命令:

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

## 从标准操作系统存储库安装这些依赖项
yum install socat logrotate -y

# 本例假设包的 CentOS Stream 8 版本,适用于
# Red Hat 8、CentOS Stream 9、CentOS Stream 8 和现代 Fedora 版本。
yum install rabbitmq-server-3.10.5-1.el8.noarch.rpm

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

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

## 从标准操作系统存储库安装这些依赖项
yum install socat logrotate -y

# 本例假设包的CentOS 8版本,适用于
# Red Hat 8、CentOS Stream 9、CentOS Stream 8 和现代 Fedora 版本。
yum install rabbitmq-server-3.10.5-1.el8.noarch.rpm

下载服务器
在某些情况下,下载包并手动安装可能更容易。该包可以从GitHub下载

描述 下载 签名
适用于 RHEL Linux 8.x、CentOS Stream 9、CentOS 8.x、Fedora 32+ 的 RPM(支持 systemd) rabbitmq-server-3.10.5-1.el8.noarch.rpm Signature
openSUSE Linux 的 RPM rabbitmq-server-3.10.5-1.suse.noarch.rpm Signature

运行 RabbitMQ 服务器

启动服务器
安装 RabbitMQ 服务器包时,服务器默认不作为守护进程启动。在系统启动时默认启动守护进程,以管理员身份运行

chkconfig rabbitmq-server on

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

/sbin/service rabbitmq-server start

/sbin/service rabbitmq-server status

/sbin/service rabbitmq-server stop

如果系统上没有安装服务工具,可以使用yum安装:

yum -y install initscripts

配置 RabbitMQ

在大多数系统上,节点应该能够以所有默认值启动和运行。请参阅配置指南以了解更多信息,并参阅生产检查表了解开发环境之外的指南。

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

RabbitMQ 节点绑定到端口(打开服务器 TCP 套接字)以接受客户端和 CLI 工具连接。SELinux 等其他进程和工具可能会阻止 RabbitMQ 绑定到端口。发生这种情况时,节点将无法启动。

CLI 工具、客户端库和 RabbitMQ 节点也打开连接(客户端 TCP 套接字)。防火墙可以阻止节点和 CLI 工具相互通信。确保可以访问以下端口:

  • 4369:epmd,RabbitMQ 节点和 CLI 工具使用的对等发现服务
  • 5672、5671:由不带和带 TLS 的 AMQP 0-9-1 和 1.0 客户端使用
  • 25672:用于节点间和 CLI 工具通信(Erlang 分发服务器端口),从动态范围分配(默认限制为单个端口,计算为 AMQP 端口 + 20000)。除非这些端口上的外部连接确实是必要的(例如集群使用联邦或在子网外的机器上使用 CLI 工具),否则这些端口不应公开。有关详细信息,请参阅网络指南。
  • 35672-35682:由 CLI 工具(Erlang 分发客户端端口)用于与节点通信,并从动态范围分配(计算为服务器分发端口 + 10000 到服务器分发端口 + 10010)。有关详细信息,请参阅网络指南。
  • 15672:HTTP API客户端、管理 UI和rabbitmqadmin (仅在启用管理插件的情况下)
  • 61613、61614:不带和带 TLS 的STOMP 客户端(仅在启用STOMP 插件的情况下)
  • 1883、8883:如果启用了MQTT 插件,则不带和带 TLS 的MQTT 客户端
  • 15674:STOMP-over-WebSockets 客户端(仅当Web STOMP 插件启用时)
  • 15675:MQTT-over-WebSockets 客户端(仅当启用Web MQTT 插件时)
  • 15692:Prometheus 指标(仅在启用Prometheus 插件的情况下)

可以将RabbitMQ 配置 为使用不同的端口和特定的网络接口。

默认用户访问

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

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

控制 Linux 上的系统限制

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

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

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

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

[Service]
LimitNOFILE=64000

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

使用 Docker

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

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

没有 systemd(旧的 Linux 发行版)

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

ulimit -S -n 64000

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

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

验证限制

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

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)为系统限制调整提供帮助。我们的开发者工具指南列出了相关的模块和项目。

管理服务
要启动和停止服务器,请使用服务工具。服务名称是rabbitmq-server:

# stop the local node
sudo service rabbitmq-server stop

# start it back
sudo service rabbitmq-server start

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

# 检查服务管理器观察到的服务状态
sudo service rabbitmq-server 状态

它将产生类似这样的输出:

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

Dec 26 10:21:30 localhost.localdomain rabbitmq-server[957]: ##  ##
Dec 26 10:21:30 localhost.localdomain rabbitmq-server[957]: ##  ##      RabbitMQ 3.8.17. Copyright (c) 2007-2022 VMware, Inc. or its affiliates.
Dec 26 10:21:30 localhost.localdomain rabbitmq-server[957]: ##########  Licensed under the MPL 2.0. Website: https://www.rabbitmq.com/
Dec 26 10:21:30 localhost.localdomain rabbitmq-server[957]: ######  ##
Dec 26 10:21:30 localhost.localdomain rabbitmq-server[957]: ##########  Logs: /var/log/rabbitmq/rabbit@localhost.log
Dec 26 10:21:30 localhost.localdomain rabbitmq-server[957]: /var/log/rabbitmq/rabbit@localhost_upgrade.log
Dec 26 10:21:30 localhost.localdomain rabbitmq-server[957]: Starting broker...
Dec 26 10:21:32 localhost.localdomain rabbitmq-server[957]: systemd unit for activation check: "rabbitmq-server.service"
Dec 26 10:21:32 localhost.localdomain systemd[1]: Started RabbitMQ broker.
Dec 26 10:21:32 localhost.localdomain rabbitmq-server[957]: completed with 6 plugins.

rabbitmqctl、rabbitmq-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

输出将类似于以下内容:

Dec 26 11:03:04 localhost rabbitmq-server[968]: ##  ##
Dec 26 11:03:04 localhost rabbitmq-server[968]: ##  ##      RabbitMQ 3.8.17. Copyright (c) 2007-2022 VMware, Inc. or its affiliates.
Dec 26 11:03:04 localhost rabbitmq-server[968]: ##########  Licensed under the MPL 2.0. Website: https://www.rabbitmq.com/
Dec 26 11:03:04 localhost rabbitmq-server[968]: ######  ##
Dec 26 11:03:04 localhost rabbitmq-server[968]: ##########  Logs: /var/log/rabbitmq/rabbit@localhost.log
Dec 26 11:03:04 localhost rabbitmq-server[968]: /var/log/rabbitmq/rabbit@localhost_upgrade.log
Dec 26 11:03:04 localhost rabbitmq-server[968]: Starting broker...
Dec 26 11:03:05 localhost rabbitmq-server[968]: systemd unit for activation check: "rabbitmq-server.service"
Dec 26 11:03:06 localhost rabbitmq-server[968]: completed with 6 plugins.

日志轮换

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

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

获得帮助并提供反馈
如果您对本指南的内容或与 RabbitMQ 相关的任何其他主题有任何疑问,请随时在RabbitMQ 邮件列表中提问。

帮助我们改进文档 ❤️
如果您想对该站点做出改进,可以在 GitHub上找到其源代码。只需 fork 存储库并提交拉取请求。谢谢!