如何在 Ubuntu 22.04 上安装 RabbitMQ 集群
本教程适用于这些操作系统版本
- Ubuntu 22.04(Jammy Jellyfish)
- Ubuntu 20.04(Focal Fossa)
在此页
- 先决条件
- 准备机器
- 安装 RabbitMQ 服务器
- 启用 RabbitMQ 管理插件
- 设置 UFW 防火墙
- 设置 RabbitMQ 集群
- 设置 RabbitMQ 管理员
- 设置经典队列镜像
- 通过管理插件访问 RabbitMQ 集群
- 结论
RabbitMQ 是一个免费的开源消息代理。 RabbitMQ 支持多种消息协议,是互联网上使用最广泛的消息代理。它支持 AMQP、STOMP、MQTT、HTTP 和 WebSockets 等协议,以及 RabbitMQ Stream。
RabbitMQ 完全符合 JMS 1.1 标准,适用于各种开发场景,从中小型到大型部署环境。
作为消息代理,RabbitMQ 位于应用程序之间,允许它们以异步、可靠和方便的方式相互通信。 RabbitMQ 在应用程序之间提供临时存储并防止数据丢失。
在本教程中,我们将在多台 Ubuntu 22.04 机器之间安装和设置 RabbitMQ 服务器。您还将了解如何为 RabbitMQ 设置管理员用户并通过 HA 策略设置经典队列镜像。
先决条件
要完成本指南,您需要满足以下要求:
- 两台或更多 Ubuntu 22.04 服务器 - 此示例使用三台 Ubuntu 机器,rabbitmq1、rabbitmq2 和 rabbitmq3。
- 具有 sudo/root 管理员权限的非 root 用户。
准备机器
在开始之前,您将更新和刷新您的系统存储库。然后在每台服务器上设置 /etc/hosts 文件,以便服务器能够通过系统主机名进行连接。
通过下面的 apt 命令更新和刷新你的 Ubuntu 包存储库。
sudo apt update
接下来,通过下面的 nano 编辑器命令编辑 /etc/hosts 文件。
sudo nano /etc/hosts
添加以下配置,并确保使用您当前的环境详细信息更改每个 IP 地址和主机名。
192.168.5.21 rabbitmq1
192.168.5.22 rabbitmq2
192.168.5.23 rabbitmq3
完成后保存文件并退出编辑器。准备好所有 Ubuntu 服务器后,您将安装 RabbitMQ 并设置集群。
安装 RabbitMQ 服务器
准备好 Ubuntu 机器后,您现在就可以在所有目标机器上安装 RabbitMQ 服务器了。默认的 Ubuntu 22.04 存储库提供最新且稳定的 RabbitMQ 版本,可以通过 APT 轻松安装。
运行下面的 apt 命令来更新和刷新你的 ubuntu 包索引。

通过下面的 apt 命令安装 RabbitMQ。
sudo apt install rabbitmq-server
这将提示您进行确认,输入 y 进行确认,然后按 ENTER 继续。

RabbitMQ安装完成后,运行以下systemctl命令验证RabbitMQ服务,确保服务已启用并运行。
sudo systemctl is-enabled rabbitmq-server
sudo systemctl status rabbitmq-server
输出 - 您可以看到 RabbitMQ 正在运行并已启用。 RabbitMQ 将在启动时自动运行。

现在 RabbitMQ 服务器已安装,接下来您将启用 RabbitMQ 插件 rabbitmq_management。
启用 RabbitMQ 管理插件
RabbitMQ 提供了一个管理插件,允许您通过 Web 浏览器管理和监控 RabbitMQ 节点和集群。 rabbitmq_management 插件是一个基于 HTTP 的 API,其功能类似于命令行工具 rabbitmqadmin。
在开始配置 RabbitMQ 集群之前,您将在目标机器上启用 rabbitmq_management 插件。
使用以下 rabbitmq-plugins 命令启用 RabbitMQ 插件 rabbitmq_management。以下命令还将为 rabbitmq_management 启用所需的插件。
sudo rabbitmq-plugins enable rabbitmq_management
接下来,重新启动 RabbitMQ 服务以应用新更改并启用 rabbitmq_management 插件。
sudo systemctl restart rabbitmq-server

默认的 rabbitmq_management 插件现在在默认端口 15672 上运行。运行以下 ss 命令以确保 rabbitmq_management 端口 15672 已打开。
ss -plnt
输出 - rabbitmq_management 端口处于活动状态并打开。

设置 UFW 防火墙
配置启用 RabbitMQ 管理插件后,您将在所有系统上设置 UFW 防火墙。默认的 Ubuntu 安装带有安装的 UFW 包,因此您可以轻松启动和启用 UFW 防火墙进程。
运行以下 ufw 命令以添加 OpenSSH 服务并启用 ufw 防火墙。
sudo ufw allow OpenSSH
sudo ufw enable
当提示确认时,输入 y 确认并按 ENTER 继续。 ufw 防火墙现在应该正在运行并启用。

接下来,通过以下 ufw 命令为 RabbitMQ 集群打开一些 TCP 端口。然后,重新加载 ufw 防火墙以应用新的更改。
sudo ufw allow 15672/tcp
sudo ufw allow 5672/tcp
sudo ufw allow 4369/tcp
sudo ufw allow 25672/tcp
sudo ufw reload

最后,运行以下 ufw 命令以验证 RabbitMQ 端口是否已添加到 ufw 防火墙。
sudo ufw status
输出 - 将用于添加到 ufw 防火墙的 RabbitMQ 集群的一些端口。

设置 RabbitMQ 集群
启用 rabbitmq_management 插件并配置 ufw 防火墙后,您现在将开始通过 rabbitmqctl 命令创建和配置 RabbitMQ 集群。
在每个 RabbitMQ 安装中,/var/lib/rabbitmq 目录中都有一个 .erlangcooke 文件。要设置集群,您必须确保集群中的所有节点都具有相同的 .erlang.cookie 文件。
对于此示例,rabbitmq1 将用作第一个初始集群,因此您需要将文件 .erlang.cookie 文件复制/传输到 rabbitmq2 和 rabbitmq3 服务器。
在 rabbitmq1 服务器上,运行以下命令来验证文件 .erlang.cookie 并确保该文件可用。
ls -lah /var/lib/rabbitmq/
接下来,将文件 .erlang.cookie 复制/传输到 rabbitmq2 和 rabbitmq3 服务器。此示例使用 SCP 命令将 .erlang.cookie 文件复制到服务器 192.168.5.22 和 192.168.5.23。
scp /var/lib/rabbitmq/.erlang.cookie :/var/lib/rabbitmq/
复制/传输文件 .erlang.cookie 后,将工作服务器会话移动到 rabbitmq2 和 rabbitmq3。

在 rabbitmq2 和 rabbitmq3 上运行以下命令以重新启动 RabbitMQ 服务并应用新更改。然后,停止 RabbitMQ 应用程序。
sudo systemctl restart rabbitmq-server
sudo rabbitmqctl stop_app
以下是 rabbitmq2 服务器的输出。

以下是 rabbitmq3 服务器的输出。

之后,通过以下命令将 rabbitmq2 和 rabbitmq3 服务器添加到 RabbitMQ 集群。然后,启动 RabbitMQ 应用程序。
sudo rabbitmqctl join_cluster
sudo rabbitmqctl start_app
以下是 rabbitmq2 加入 RabbitMQ 集群并启动 RabbitMQ 应用程序时的输出。

以下是 rabbitmq3 加入 RabbitMQ 集群并启动 RabbitMQ 应用程序时的输出。

最后,返回到 rabbitmq1 服务器并运行以下命令来验证 RabbitMQ 集群的状态。
sudo rabbitmqctl cluster_status
然后,您会看到 RabbitMQ 集群已创建,其中包含三个节点 rabbitmq1、rabbitmq2 和 rabbitmq3。您还可以看到每个节点上 RabbitMQ 的当前版本以及集群中节点的维护状态。

设置 RabbitMQ 管理员
创建 RabbitMQ 集群后,您现在将通过 rabbitmqctl(用于管理 RabbitMQ 服务器的主要命令行)为 RabbitMQ 服务器创建和设置新的管理员用户。
运行以下命令以添加新的 RabbitMQ 用户。此示例会将用户 alice 添加到 RbbitMQ。此外,您必须使用新密码更改密码。
sudo rabbitmqctl add_user alice password
接下来,下面的命令使新用户 alice 成为 RabbitMQ 集群的管理员。
sudo rabbitmqctl set_user_tags alice administrator
设置用户 alice 对 RabbitMQ 集群内所有实体的权限。
sudo rabbitmqctl set_permissions -p / alice ".*" ".*" ".*"
现在运行以下命令从您的 RabbitMQ 安装中删除默认用户来宾。
sudo rabbitmqctl delete_user guest
验证 RabbitMQ 上可用的用户列表。然后您会看到新用户 alice 已创建,并且可以用作 RabbitMQ 服务器的管理员。
sudo rabbitmqctl list_users

至此,您已经完成了RabbitMQ集群的安装和配置,并为RabbitMQ配置了管理员。接下来,您将通过 RabbitMQ 策略设置经典队列镜像。
设置经典队列镜像
RabbitMQ 提供了两种设置镜像队列的方法,您可以通过 RabbitMQ 策略使用经典队列镜像或使用仲裁队列进行设置。
对于此示例,您将学习如何通过 RabbitMQ 策略设置队列镜像。
运行以下命令以创建新策略 ha-all。此策略允许所有队列在 RabbitMQ 集群上跨节点进行镜像。
sudo rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all"}'
现在,如果您要指定要跨集群镜像的队列。此示例将创建一个新策略 ha-two-,它将镜像任何名为 two 的队列。
sudo rabbitmqctl set_policy ha-two "^two\." '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
最后,您还可以创建一个新策略,允许您设置要镜像到 RabbitMQ 集群上特定节点的队列。在此示例中,您将创建一个新策略 ha-nodes,它将镜像任何名为 nodes 的队列。到特定节点 rabbitmq2 和 rabbitmq3。
sudo rabbitmqctl set_policy ha-nodes "^nodes\." '{"ha-mode":"nodes","ha-params":[""]}'

通过以下命令验证 RabbitMQ 集群上的策略列表。然后,您会看到 RabbitMQ 集群上可用的策略 ha-all、ha-two 和 ha-nodes。
sudo rabbitmqctl list_policies

通过管理插件访问 RabbitMQ 集群
打开您的 Web 浏览器并访问服务器 IP 地址以及默认 RabbitMQ 端口 15672(即:http://192.168.5.21)。然后您将获得 RabbitMQ 登录页面。
使用您创建的新用户和密码登录,然后单击登录。

您现在应该看到 rabbitmq_management 插件提供的 RabbitMQ 管理仪表板。

接下来,单击 Admin 选项卡并单击 Policies 以验证您创建的 RabbitMQ 策略是否可用。
在下面的屏幕截图中,您可以看到三种不同的策略,即 ha-all、ha-two 和 ha-nodes。

结论
恭喜!您现在已经安装了 RabbitMQ 服务器并使用三个 Ubuntu 22.04 服务器配置了 RabbitMQ 集群。此外,您还配置了用于保护 RabbitMQ 部署的 UFW 防火墙,还为 RabbitMQ 配置了管理员用户,并通过 RabbitMQ 策略在 RabbitMQ 集群上创建了经典队列镜像。
有了这个,您现在可以将 RabbitMQ 用作您的应用程序和基础设施的消息代理。但是,您还可以通过设置诸如仲裁队列、通过 TLS 保护 RabbitMQ 等将 RabbitMQ 部署提升到一个新的水平。