https://www.rabbitmq.com/install-debian.html

RabbitMQ 包含在标准的 Debian 和 Ubuntu 存储库中。但是,包含的版本比最新的 RabbitMQ 版本落后很多版本,并且可能提供已经不受支持的 RabbitMQ 版本。

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

本指南的关键部分是

  • 在 Debian 和 Ubuntu 上安装最新版本的 RabbitMQ的方法
  • 支持的 Ubuntu 和 Debian 发行版
  • 权限要求
  • 使用 Cloudsmith存储库的快速启动安装片段
  • 使用 PackageCloud和 Launchpad 存储库的快速启动安装片段
  • 管理服务(启动、停止并获取其状态)
  • 如何检查节点和服务日志

支持的 Erlang 版本将从 Ubuntu LaunchpadCloudsmith.io 上的现代 Erlang apt 存储库之一提供。

那些寻找更详细的安装步骤描述的人应该参考

  • 使用apt 和 Cloudsmith存储库手动安装
  • 使用apt PackageCloud和 Launchpad 存储库手动安装

如何在 Debian 和 Ubuntu 上安装最新的 RabbitMQ

使用 Apt 安装

在 Debian 和 Ubuntu 上安装最新 RabbitMQ 有两个选项:

  • 选项 A:在 Cloudsmith 上使用 apt 存储库(快速启动脚本)
  • 选项 B:在 PackageCloud 和 Launchpad 上结合使用 apt 存储库(快速启动脚本)

这两个选项都将使用CloudsmithLaunchpad 上的Erlang apt 存储库安装最新版本的 Erlang

手动使用 Dpkg

或者,可以手动下载软件包并使用dpkg -i安装。此选项将需要手动安装所有 RabbitMQ 包依赖项(不推荐)。

支持的发行版

RabbitMQ 在几个主要的基于 Debian 的发行版上得到支持,这些发行版仍然受到其主要供应商或开发人员组的支持。

对于 Debian,这意味着 RabbitMQ 核心团队关注包的重点是基于 Debian 的发行版的当前和先前版本,即符合发行版 EOL 政策。

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

  • Ubuntu 18.04 到 22.10
  • Debian Buster (10)、Bullseye (11) 和 Sid (“unstable”)

如果依赖性得到满足(例如,使用反向移植存储库) ,该软件包可以在其他基于 Debian 的发行版上工作,但它们的测试和支持是在尽力而为的基础上完成的。

在 Debian 和 Ubuntu 上从哪里获取最新的 Erlang 版本

RabbitMQ 需要 Erlang/OTP 才能运行。标准 Debian 和 Ubuntu 存储库中的 Erlang/OTP 包可能已经过时并且不受现代 RabbitMQ 版本的支持。

最新的 Erlang/OTP 发布系列可以从许多替代的 apt 存储库中获得:

Erlang 发布系列 提供它的 Apt 存储库 笔记
25.x - Launchpad 上来自 Team RabbitMQ的 Erlang 的 Debian 包
- Erlang 解决方案
- 来自 Cloudsmith.io 上的 Team RabbitMQ的 Erlang 的 Debian 包
从 3.10.0 开始支持,从3.11.0开始需要。请参阅Erlang 兼容性指南。
24.x - Erlang 解决方案
- 来自 Cloudsmith.io 上的 Team RabbitMQ的 Erlang 的 Debian 包
从 3.8.16 开始支持。请参阅Erlang 兼容性指南。

本指南将重点介绍由 Team RabbitMQ在 Launchpad 和Cloudsmith.io 上维护的 Debian 存储库。

可以通过以下三种安装方式 RabbitMQ 服务

运行 RabbitMQ 服务器

启动服务器

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

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

sudo service enabled rabbitmq-server

sudo service start rabbitmq-server

sudo service status rabbitmq-server

sudo service stop rabbitmq-server

配置 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 配置使用不同的端口和特定的网络接口

默认用户访问

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

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

在 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 文档以了解支持的限制和其他指令。

/etc/systemd/system/rabbitmq-server.service.d/limits.conf 原因,在 /etc/systemd/system/rabbitmq-server.service 文件中也有提到:

# systemd unit example
[Unit]
Description=RabbitMQ broker
After=network.target epmd@0.0.0.0.socket
Wants=network.target epmd@0.0.0.0.socket

[Service]
Type=notify
User=rabbitmq
Group=rabbitmq
UMask=0027
NotifyAccess=all
TimeoutStartSec=600

# To override LimitNOFILE, create the following file:
#
# /etc/systemd/system/rabbitmq-server.service.d/limits.conf
#
# with the following content:
#
# [Service]
# LimitNOFILE=65536

LimitNOFILE=32768

# The following setting will automatically restart RabbitMQ
# in the event of a failure. systemd service restarts are not a
# replacement for service monitoring. Please see
# https://www.rabbitmq.com/monitoring.html
Restart=on-failure
RestartSec=10
WorkingDirectory=/var/lib/rabbitmq
ExecStart=/usr/lib/rabbitmq/bin/rabbitmq-server
ExecStop=/usr/lib/rabbitmq/bin/rabbitmqctl shutdown
# See rabbitmq/rabbitmq-server-release#51
SuccessExitStatus=69

[Install]
WantedBy=multi-user.target
在 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在概述选项卡上显示可供其使用的文件描述符的数量。

rabbitmq-diagnostics status

包含相同的值。

以下命令

cat /proc/ $RABBITMQ_BEAM_PROCESS_PID /limits

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

管理服务

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

# stop the local node
sudo service rabbitmq-server stop
systemctl restart rabbitmq-server.service
# 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 (/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2023-05-07 12:14:49 CST; 17min ago
   Main PID: 3120640 (beam.smp)
      Tasks: 37 (limit: 18624)
     Memory: 122.7M
        CPU: 15.370s
     CGroup: /system.slice/rabbitmq-server.service
             ├─3120640 /usr/lib/erlang/erts-13.2.2/bin/beam.smp -W w -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -sbwt none -sbwtdcpu none -sbwtdio none -- -root /us>
             ├─3120656 erl_child_setup 32768
             ├─3120701 /usr/lib/erlang/erts-13.2.2/bin/epmd -daemon
             ├─3120738 /usr/lib/erlang/erts-13.2.2/bin/inet_gethost 4
             ├─3120739 /usr/lib/erlang/erts-13.2.2/bin/inet_gethost 4
             └─3120744 /bin/sh -s rabbit_disk_monitor

507 12:14:46 ThinkPad-Edge-E430c rabbitmq-server[3120640]:   Doc guides:  https://rabbitmq.com/documentation.html
507 12:14:46 ThinkPad-Edge-E430c rabbitmq-server[3120640]:   Support:     https://rabbitmq.com/contact.html
507 12:14:46 ThinkPad-Edge-E430c rabbitmq-server[3120640]:   Tutorials:   https://rabbitmq.com/getstarted.html
507 12:14:46 ThinkPad-Edge-E430c rabbitmq-server[3120640]:   Monitoring:  https://rabbitmq.com/monitoring.html
507 12:14:46 ThinkPad-Edge-E430c rabbitmq-server[3120640]:   Logs: /var/log/rabbitmq/rabbit@ThinkPad-Edge-E430c.log
507 12:14:46 ThinkPad-Edge-E430c rabbitmq-server[3120640]:         /var/log/rabbitmq/rabbit@ThinkPad-Edge-E430c_upgrade.log
507 12:14:46 ThinkPad-Edge-E430c rabbitmq-server[3120640]:         <stdout>
507 12:14:46 ThinkPad-Edge-E430c rabbitmq-server[3120640]:   Config file(s): (none)
507 12:14:49 ThinkPad-Edge-E430c rabbitmq-server[3120640]:   Starting broker... completed with 0 plugins.
507 12:14:49 ThinkPad-Edge-E430c systemd[1]: Started RabbitMQ broker.

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命令都会报告错误。

日志文件和管理

服务器日志可以在可配置目录下找到,当通过 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.11.5. Copyright (c) 2007-2023 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 默认的 guest 账号只能在本地机器访问, 如果想在其它机器访问必须配置其它账号

配置管理员账号

# 创建管理员用户,负责整个 MQ 的运维(必须)
[root@rabbitmq1 ~]# rabbitmqctl add_user admin admin
# 如果密码错误,可使用下面命令修改密码(必须)
[root@rabbitmq1 ~]# rabbitmqctl change_password admin admin
# 赋予其 administrator 角色
[root@rabbitmq1 ~]# rabbitmqctl set_user_tags admin administrator
# 创建 RabbitMQ 监控用户,负责整个 MQ 的监控(可选)
[root@rabbitmq1 ~]# rabbitmqctl add_user user_monitoring  passwd_monitor
# 创建某个项目的专用用户,只能访问项目自己的 virtual hosts(可选)
[root@rabbitmq1 ~]# rabbitmqctl set_user_tags user_monitoring monitoring
[root@rabbitmq1 ~]# rabbitmqctl set_user_tags user_monitoring management
# 创建和赋角色完成后查看并确认
[root@rabbitmq1 ~]# rabbitmqctl list_users

启动 rabbitmq 内置 web 插件, 管理 rabbitmq 账号等信息

[root@localhost src]# rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node rabbit@localhost:
rabbitmq_management
The following plugins have been configured:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch
Applying plugin configuration to rabbit@localhost...
The following plugins have been enabled:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch

started 3 plugins.
# 重启服务
[root@localhost src]# systemctl restart rabbitmq-server.service

服务重启成功后,访问地址:http://你的地址:15672

作者:Jeebiz  创建时间:2023-04-06 15:40
最后编辑:Jeebiz  更新时间:2024-09-23 10:03