人们想要使用树莓派创建计算机集群的原因有很多,包括他们可以完全控制自己的平台,他们能够使用廉价且高度可用的平台,并有机会了解一般的集群计算。
设置集群的方法有很多种,例如无头模式、网络启动和从 SD 卡启动。每种方法都有优点和缺点,但对于使用过单个 Pi 的用户来说,后一种方法是最熟悉的。大多数集群设置都涉及许多复杂的步骤,需要大量时间,因为它们是在单个 Pi 上执行的。即使是入门也很困难,因为您需要设置网络才能访问它们。
尽管 Raspberry Pi Imager 和 PiBakery 都有所改进,但该过程仍然过于复杂。因此,在 Cloudmesh,我们提出了一个问题:
是否有可能开发一种专门用于一次为一个集群中的 Pi 刻录 SD 卡的工具,以便可以将卡直接插入,并以最少的努力启动一个可以简单工作的集群?
为了回应这个问题,我们开发了一个名为 Cloudmesh Pi Burner 的 SD 卡工具,并在 Pi Planet 中展示了它。您无需再花费数小时来重复步骤和学习复杂的 DevOps 教程;相反,您只需几个命令即可设置集群。
为此,我们开发了 cms burn
,这是一个可以在“管理器” Pi 或 Linux 或 macOS 计算机上执行的程序,用于为您的集群刻录卡。
我们在 GitHub 上设置了一个综合软件包,可以轻松安装。您可以在 README 中详细了解它。在那里,您还可以找到关于如何从 macOS 或 Linux 计算机直接刻录的详细说明。
入门
本文介绍了如何使用五个树莓派单元创建集群设置(您至少需要两个,但此方法也适用于更大的数量)。要继续操作,您必须有五个 SD 卡,每个 Pi 单元一个。有一个带有五根以太网电缆(每个 Pi 一根)的网络交换机(托管或非托管)会很有帮助。
要求
您需要
- 5 个树莓派主板
- 5 张 SD 卡
- 5 根以太网电缆
- 一个网络交换机(非托管或托管)
- WiFi 接入
- 显示器、鼠标、键盘(用于 Pi 上的桌面访问)
- 计算机或管理器 Pi 的 SD 卡插槽(最好支持 USB 3.0 速度)
- 如果您在 Mac 上执行此操作,则必须安装 XCode 和 Homebrew
在 Linux 上,默认情况下支持开源 ext4 文件系统。但是,Apple 不为 macOS 提供此功能,因此您必须单独购买支持。我使用 Paragon Software 的 extFS 应用程序。与 macOS 本身一样,这在很大程度上是基于开源的,但本身不是开源的。
在 Cloudmesh,我们维护一个硬件部件列表,您在设置集群时需要考虑这些部件。
网络配置
图 1 显示了我们的网络配置。在五台树莓派计算机中,一台专用于作为管理器,四台作为工作节点。将 WiFi 用于管理器 Pi 允许您将其设置在您家中的任何位置或其他位置(README 中讨论了其他配置)。
我们的配置使用非托管网络交换机,其中管理器和工作节点在本地相互通信,并且管理器通过为您配置的桥接器为工作节点提供互联网访问。

带有桥接网络的 Pi 集群设置(©2021 The Cloudmesh Projects)
设置 Cloudmesh burn 应用程序
要设置 Cloudmesh burn 程序,首先创建一个 Python venv
$ python3 -m venv ~/ENV3
$ source ~/ENV3/bin/activate
接下来,安装 Cloudmesh 集群生成工具并启动刻录过程。您必须调整 SD 卡的路径,这取决于您的系统和您使用的 SD 卡读卡器类型。这是一个示例
(ENV3)$ pip install cloudmesh-pi-cluster
(ENV3)$ cms help
(ENV3)$ cms burn info
(ENV3)$ cms burn cluster \
--device=/path/to/sdcard \
--hostname=red,red01,red02,red03,red04 \
--ssid=myssid -y
填写密码并根据要求插入 SD 卡。
启动您的集群并进行配置
将刻录好的 SD 卡插入 Pi 并打开电源。执行 ssh
命令以登录到您的管理器 - 它是名为 red
的那个(工作节点通过数字标识)
(ENV3)$ ssh pi@red.local
这需要一段时间,因为 SD 卡上的文件系统需要安装,并且需要激活国家/地区、SSH 和 WiFi 等配置。
进入管理器后,在其上安装 Cloudmesh 集群软件。(您可以自动执行此操作,但我们决定将此过程的一部分留给您,以便为您提供最大的灵活性。)
pi@red:~ $ curl -Ls \
http://cloudmesh.github.io/get/pi \
--output install.sh
pi@red:~ $ sh ./install.sh
在看到大量日志消息后,您会看到
#################################################
# Install Completed #
#################################################
Time to update and upgarde: 339 s
Time to install the venv: 22 s
Time to install cloudmesh: 185 s
Time for total install: 546 s
Time to install: 546 s
#################################################
Please activate with
source ~/ENV3/bin/activate
重启
pi@red:~ $ sudo reboot
开始使用您的集群
通过 SSH 登录到您的管理器 Pi
(ENV3)$ ssh pi@red.local
一旦您登录到网络上的管理器(在本例中为 red.local
),请执行命令以查看是否一切正常。例如,您可以使用温度监视器从所有 Pi 板获取温度
(ENV3) pi@red:~ $ cms pi temp red01,red02,red03,red04
pi temp red01,red02
+--------+--------+-------+----------------------------+
| host | cpu | gpu | date |
|--------+--------+-------+----------------------------|
| red01 | 45.277 | 45.2 | 2021-02-23 22:13:11.788430 |
| red02 | 42.842 | 42.8 | 2021-02-23 22:13:11.941566 |
| red02 | 43.356 | 42.8 | 2021-02-23 22:13:11.961245 |
| red02 | 44.124 | 42.8 | 2021-02-23 22:13:11.981896 |
+--------+--------+-------+----------------------------+
访问工作节点
访问工作节点甚至更方便,因此我们设计了一个隧道命令,使设置变得容易。在管理器节点上调用它,例如
(ENV3) pi@red:~ $ cms host setup "red0[1-4]" user@laptop.local
这会在所有工作节点上创建 ssh 密钥,从所有主机收集 ssh 密钥,并将公钥分散到管理器和工作节点的 authorized_key 文件中。这也使管理器节点成为工作节点的桥梁,以便它们可以访问互联网。现在我们的笔记本电脑使用以下命令更新我们的 ssh 配置文件。
(ENV3)$ cms host config proxy pi@red.local red0[1-4]
现在您可以从您的计算机访问工作节点。使用温度程序试用一下
(ENV3)$ cms pi temp "red,red0[1-4]"
+-------+--------+-------+----------------------------+
| host | cpu | gpu | date |
|-------+--------+-------+----------------------------|
| red | 50.147 | 50.1 | 2021-02-18 21:10:05.942494 |
| red01 | 51.608 | 51.6 | 2021-02-18 21:10:06.153189 |
| red02 | 45.764 | 45.7 | 2021-02-18 21:10:06.163067 |
...
+-------+--------+-------+----------------------------+
更多信息
由于这使用 SSH 密钥在管理器和工作节点之间进行身份验证,因此您可以直接从管理器登录到工作节点。您可以在 README 和 Pi Planet 上找到更多详细信息。 Cloudmesh 手册中讨论了其他 Cloudmesh 组件。
本文基于 使用 MacOS 上的 Cloudmesh 轻松设置树莓派集群,并经许可重新发布。
1 条评论