如何从0到1构建32Core树莓派集群_树莓派

有段时间,创建树莓派集群的想法一直在我的脑海里。在本文中,我将向您展示如何从头构建一个树莓派集群。

树莓派是一种可以连接显示器、鼠标、键盘,通过图形界面(GUI)安装Linux操作系统的微型计算机。您还可以在没有GUI的无头模式下使用并运行树莓派,例如,数据库服务器。树莓派提供很多用途,如从构建Minecraft服务器到智能镜(smart mirrors),它具有无穷无尽的可能性。

自从我开始接触MariaDB并了解了数据库集群、分布式SQL和Xpand后,构建树莓派集群的想法就一直在我的脑海中萦绕。这样的集群是体验分布式系统的一种很好的方式。

在这篇文章中,我将向你展示如何构建一个树莓派集群:


  • 8节点
  • 32核
  • 64GB内存
  • 2TB的存储空间

PART 01

准备工作 

如果你想建立自己的集群,你不需要购买8台树莓派设备。即使只有一台设备也足以让你学到知识。即使你只打算配置一个树莓派,这篇文章中的指令也是可以使用的。我的建议是,如果你真的想提高你在Linux管理、Ansible、Docker、Kubernetes、数据库集群等方面的技能,那么至少要有三种设备来构建你的集群。

考虑到这一点,请用你的数字代替我下面罗列参数中的8。如果你有不同的型号,或者不同大小的内存或存储空间,那么请用您的树莓派设备规格参数来替代下面列出的相应参数。以下是我使用的设备参数:


  • 8 ×树莓派4模型B (8GB内存)
  • 1 × Anker 60W台式充电器(10端口)
  • 8 x短USB C型数据线 (5A, 40W, 23cm)
  • 8 x MicroSD卡(256GB)
  • 2 ×树莓派集群盒(4层,带冷却风扇)

您可以根据您的设备数量来适当进行调整,如果你的设备很少(比如1个或2个),你可以买一个或多个树莓派电源,或者一个多口USB充电器。如果你使用多USB充电器,确保每个端口至少能提供2.4Am (5V)。选择符合你的目标和预算的microSD卡。我建议使用至少32GB的SD卡。在电缆和外壳方面,选择适合您的即可。虽然冷却风扇不是必须的,但如果你打算长时间开着设备,我建议您使用冷却风扇。

我还建议在开始“烹饪”之前把所有的食材都准备好,尤其是如果你想使用多个树莓派设备时。

PART 02

安装无头模式的

树莓派操作系统

我们将使用的操作系统是树莓派操作系统(Raspberry Pi OS),一个基于Debian进行优化适配后的操作系统。使用您的计算机把树莓派操作系统安装在microSD卡上。然后将这些microSD卡连接到树莓派设备上并启动它们。

把所有的microSD卡和树莓派盒子放在你的桌子上。如果你的电脑没有SD卡插槽,你将需要一个SD卡适配器(它们通常附带microSD卡)或一个读取SD卡的USB读卡器。并准备一个记号笔。

下载Raspberry Pi Imager并安装在您的计算机上。取一张microSD卡并连接到你的电脑上,打开Raspberry Pi Imager应用程序,点击CHOOSE OS,在随后出现的列表中单击“Raspberry Pi OS (other)”。如果您的树莓派设备是64位的,则选择Raspberry Pi OS Lite (64-bit),否则选择Raspberry Pi OS Lite (32位)。


如何从0到1构建32Core树莓派集群_树莓派_02


点击CHOOSE STORAGE并选择microSD卡。再次检查你选择了正确的驱动器,然后点击“齿轮”图标(即高级选项)。主机名使用rpi01或类似的名称,依次分别将设备命名为rpi01、rp02、rp03等。随后选择“Enable SSH”和“Use password authentication”选项。设置用户名(我将使用默认名称pi)并设置一个安全的密码。查看“Configure wireless LAN“选项,并输入您的WiFi连接的名称和密码。注意您也需要对您的场所进行设置。

因为我们必须对每张microSD卡进行一次这样的操作,所以请确保将”Image customization”选项字段设置为:”to always use“。这样设置就会被保存,下一张SD卡的处理过程也会更加容易:


如何从0到1构建32Core树莓派集群_树莓派_03


现在可以单击“SAVE“,然后单击”WRITE”来启动烧写过程。一旦完成,弹出卡,并连接到其中一个树莓派设备,把它放回它的盒子,并在盒子上标记数字01。对所有设备重复此过程。

PART 03

集群组装 

根据所使用的集群类型,组装过程可能会有所不同。按照箱子上的说明,或者在网上搜索照片,就可以清楚地知道这些设备应该如何分层放置。

如何从0到1构建32Core树莓派集群_主机名_04

我建议提前决定先组装哪些部件。例如,在我挑选的箱子里,我必须先安装冷却风扇,然后再把树莓派设备安装到各个层上。

一旦你安装了树莓派,用记号笔在每层上写下它对应的数字。这将在您需要设备硬件层面的修改时(如您必须拿出microSD卡,并重新配置或做其他的管理任务),将会很有帮助的。

如何从0到1构建32Core树莓派集群_主机名_05

安装好所有设备后,并将USB线连接到树莓派设备和多口USB充电器上。如果你喜欢,你可以选择使用以太网电源和网络交换机(network switch),而不是USB充电器,但我希望你去探索下。你可以把充电器(或者是网络交换机)放在树莓派架子旁边,或者连在上面。我用橡皮筋把充电器固定在箱子的一边。

插上USB线,你就可以启动所有的迷你电脑了!连接充电器并打开电源。根据你使用的树莓派模型,它们可能需要一些时间来启动,所以要有耐心。同时,您可以看到有LED灯在闪烁,同时风扇也已启动了。

如何从0到1构建32Core树莓派集群_sd卡_06

PART 04

通过SSH连接设备

如果一切顺利,您应该能够通过SSH访问Raspberry Pi设备。试着在你的电脑上运行以下程序:

ssh pi@rpi01.local

输入密码并回答yes,将设备添加到已知主机列表中。此时,您的集群已经启动。

如何从0到1构建32Core树莓派集群_主机名_07

您可能需要运行命令来检查硬件信息。例如:


  • lscpu:CPU架构信息
  • df -H:文件系统磁盘空间占用率
  • sudo fdisk -l:分区信息
  • free -m:使用的数量,空闲的数量和总RAM大小
  • cat /proc/version:Linux内核信息

PART 05

使用raspi-config手动配置

如果你有一个树莓派,你可以通过上面描述的SSH连接到它,并使用raspi-config来对树莓派进行配置。您可以修改WiFi连接(S1),更改主机名(S4)和用户密码(S3),扩展文件系统(A1),以及其他许多内容。

如何从0到1构建32Core树莓派集群_sd卡_08

PART 06

使用Ansible实现自动化配置

如果你的集群中有不止一个树莓派,你可能想使用Ansible这样的工具来进行自动化配置。使用Ansible,你可以在多台机器上运行一个命令,而不必执行重复的工作。例如,假设我们想要扩展每个Raspberry Pi上的文件系统。可以在命令行中执行下面的命令:

sudo raspi-config --expand-rootfs

如果没有自动化,您将不得不通过上面的命令,使用SSH连接到rpi01.local,然后结束SSH会话。对于rpi02.local和rpi03.local,rpi04.local等设备,必须重复所有这些步骤。相反,你可以简单地告诉Ansible在所有机器上为你运行这个命令。

具体操作是你必须把Ansible安装在连接到本地网络的控制节点上。它可以是一个树莓派设备,也可以是您的工作笔记本电脑,或任何其他机器,只要它运行基于Unix的操作系统(如Linux或macOS)即可。我碰巧有一台旧的笔记本电脑,我把它重新用作连接到我的网络的专用数据库,所以我把它用作控制节点(我将在以后的文章中展示如何在Raspberry Pi设备中安装具有复制功能的数据库)。我不会详细说明如何安装Ansible,因为在不同的操作系统上,安装过程是不同的。请查看官方文档,并将其安装在您的笔记本电脑或任何希望配置为控制节点的设备上。

在您开始之前,我建议您生成一个示例配置文件,稍后您可以根据自己的意愿进行调整:

sudo su
ansible-config init --disabled -t all > /etc/ansible/ansible.cfg
exit

左右滑动查看完整代码

在本文中,为简化操作过程而禁用了主机密钥检查,但不要在生产环境中这样做!

更改下面一行:

;host_key_checking=True

改成:

host_key_checking=False

接下来,您需要定义一个清单,这个清单是你想用Ansible控制的机器列表。该清单路径是/etc/ansible/hosts。例如,您可以使用把机器的IP地址或主机名添加到下面的列表中:

Properties files

[mymachines]
foo.example.com
bar.example.com
192.0.2.50
192.0.2.51

如果机器的IP地址或主机名中有某种模式,您也可以使用范围的方式来进行配置,具体方法是通过编辑/etc/ansible/hosts文件,在文件末尾增加如下内容:

Properties files

[rpis]
rpi[01-08].local

更改模式以匹配您的主机名和数字。这相当于:

Properties files

[rpis]
rpi01.local
rpi02.local
rpi03.local
rpi04.local
rpi05.local
rpi06.local
rpi07.local
rpi08.local

在这个清单中,rpi是一个任意的名称,当你使用Ansible在树莓派设备上运行命令时,你可以使用它指代所有的设备。

您需要配置SSH用户名,Ansible将使用该用户连接到机器。在/etc/ansible/hosts文件中添加如下内容:

Properties files

[rpis:vars]
ansible_user=pi

现在是时候控制机器了。我们先使用ping命令来连接一下:

ansible rpis -m ping --ask-pass

输入SSH密码。紧接着您应该在输出中看到每个机器是如何使用“pong”来回应“ping”的(我这里只显示一个)。

JSON

rpi01.local | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}

左右滑动查看完整代码

让我们回到文件系统扩展。要在所有机器上执行此操作,请运行:

ansible rpis -m shell -a "raspi-config --expand-rootfs" --become --ask-pass

左右滑动查看完整代码

就这么简单,所有的树莓派设备都有一个扩展的文件系统。这是在所有机器上更新系统的好时机:

ansible rpis -m shell -a "apt update -y" --become --ask-pass
ansible rpis -m shell -a "apt upgrade -y" --become --ask-pass

左右滑动查看完整代码

您可以按以下方式重启所有设备:

ansible rpis -m shell -a "reboot" --become --ask-pass

一旦你完成了,并希望安全关闭所有机器,只需运行:

ansible rpis -m shell -a "poweroff" --become --ask-pass

PART 07

下一步操作 

这只是开始。你现在有了一个集群,且可以由Ansible控制。您可以尝试设置任何类型的服务器软件,包括Web服务器或数据库。还有很多关于Ansible的内容,我在本文中只使用了ad-hoc命令,但您可以使用Playbooks来部署您的集群来达到您需要的状态。同时您还可以参考官方文档来进一步的研究。