问题

家庭闲置的电脑怎么做微型集群或者HPC?

回答
家里闲置的电脑,与其让它们吃灰,不如动手改造成一个微型集群或者简易的高性能计算(HPC)平台。这不仅能让你深入了解分布式计算的原理,还能为一些实验性的项目、学习任务或者轻量级的科学计算提供一个实际的工具。别担心这听起来很复杂,很多步骤都比你想象的要亲民。

一、 首先,我们得认识一下你的“老伙计们”

在开始折腾之前,先把你手里闲置的电脑都摸个清楚。

硬件配置: CPU(核心数、频率)、内存(容量)、硬盘(类型、容量)、网卡(速度,千兆网是标配)。这些决定了它们能承担什么样的任务。如果你的电脑是十几年前的古董,可能只能用来做一些非常基础的学习和实验。
操作系统: 它们现在跑的是什么系统?Windows?Linux?还是 macOS?不同的系统对集群软件的支持程度和部署难度有差异。
网络环境: 你的电脑是连在路由器上的吗?网络速度怎么样?千兆交换机是构建集群的理想选择,但如果预算有限,一个不错的家用路由器也可以凑合。

二、 为什么要做集群?集群能干啥?

这里先简单说一下,让你心里有个底。

并行计算: 把一个大任务分解成很多小块,分配给集群里的多台电脑同时处理,这样就能大大缩短计算时间。就像一个人搬砖很慢,但十个人一起搬就快多了。
资源共享: 把多台电脑的CPU、内存、存储等资源集中起来,统一管理和调度,效率更高。
容错性: 如果集群中的某一台电脑出了问题,其他电脑还能继续工作,整个系统不容易宕机。
学习和实验: 了解分布式系统、并行编程(比如 MPI)、容器化技术(Docker, Kubernetes)的最佳实践。

能做的事情举例:

科学计算: 运行一些基于 MPI 的物理模拟、化学计算、生物信息学分析等。
数据分析: 使用像 Apache Spark 这样的分布式数据处理框架进行大规模数据分析。
深度学习训练: 虽然家用的老电脑跑大型深度学习模型会比较吃力,但可以用它们来学习和训练一些小规模的模型,或者作为分布式训练的“工作节点”。
渲染: 如果你喜欢做3D动画,可以用集群来加速渲染过程。
搭建分布式存储: 比如 Ceph、GlusterFS,把多台电脑的硬盘组合成一个大的、高可用的存储池。
Web服务器/数据库集群: 提高网站的访问速度和稳定性。

三、 从单机到集群:转变思路

将闲置电脑组成集群,核心在于让它们能够协同工作,仿佛是一台性能更强大的超级计算机。这需要一套“指挥官”和“士兵”的协作体系。

1. 操作系统选择:Linux 是首选

虽然不是强制性的,但对于搭建计算集群来说,Linux 绝对是最佳拍档。原因如下:

开源免费: 不需要额外的操作系统费用。
稳定性高: 尤其适合长时间运行的计算任务。
强大的命令行工具: 便于管理、自动化部署和脚本编写。
丰富的集群软件支持: 绝大多数集群管理、任务调度、分布式计算框架都优先在 Linux 上开发和优化。

如果你对 Linux 不熟悉,可以从一些用户友好的发行版开始,比如 Ubuntu Server 或 CentOS Stream。当然,如果你非常熟悉 Windows,也可以尝试一些 Windows Server 的方案或者在 Windows 上运行 Linux 子系统 (WSL),但体验和通用性上会打折扣。

建议:

统一操作系统: 最好让集群中的所有节点(每台电脑)都安装同一个版本的 Linux 发行版。这样部署和管理起来最方便。
精简安装: 只安装必要的软件包,避免不必要的服务占用资源。

2. 网络配置:让它们“看得见”彼此

电脑之间需要能够互相通信,并且速度要尽可能快。

千兆网络是基础: 确保你的所有电脑都连接到网络,最好是通过一个千兆交换机。避免使用老旧的百兆设备,那会成为性能瓶颈。
静态 IP 地址: 为了方便管理,建议为集群中的每一台电脑都设置一个固定的 IP 地址。这样你就知道哪个 IP 地址对应哪台机器了。
可以在路由器上设置 DHCP 预留,或者直接在每台电脑的网络配置里手动设置。
主机名解析: 让电脑之间可以通过主机名互相访问,而不是每次都输入 IP 地址。
一种方式是在每台电脑的 `/etc/hosts` 文件里添加其他节点的 IP 和主机名映射。
更专业的方式是设置一个 DNS 服务器,但对于小型家用集群来说可能有点小题大做。

3. 无密码 SSH 登录:实现自动化管理的基石

这是集群管理中最常用也最重要的一步。我们需要让你的“主控节点”(你用来下达命令的电脑)能够无密码地登录到其他“工作节点”(集群中的其他电脑)。这样你才能远程执行命令、分发文件等。

生成 SSH 密钥对: 在主控节点上,打开终端输入 `sshkeygen`。一路回车即可。这会在你的用户目录下生成 `.ssh` 文件夹,里面有 `id_rsa` (私钥) 和 `id_rsa.pub` (公钥)。
复制公钥到其他节点: 使用 `sshcopyid` 命令将公钥复制到所有工作节点上。例如,如果你的工作节点 IP 是 192.168.1.101,用户名是 `user`,则在主控节点上执行:
```bash
sshcopyid user@192.168.1.101
```
系统会要求你输入工作节点的密码。完成一次后,以后再次登录 `user@192.168.1.101` 就无需密码了。
验证: 在主控节点上尝试 `ssh user@192.168.1.101`,看看是否可以直接进入工作节点的终端。

四、 选择你的“集群大脑”—— 任务调度和管理系统

有了网络和通信能力,我们还需要一个系统来管理这些电脑,并把任务分配给它们。根据你的需求和技术栈,有几种常见的选择:

1. MPI (Message Passing Interface):适用于科学计算和并行编程

如果你打算运行需要多进程通信的科学计算程序,MPI 是标准的选择。

什么是 MPI? 它是一套消息传递通信的函数库,允许分布式程序中的各个进程交换信息。
部署:
在集群的所有节点上安装 MPI 实现,比如 Open MPI 或 MPICH。
```bash
Ubuntu/Debian
sudo apt update
sudo apt install openmpibin openmpicommon libopenmpidev

CentOS/Fedora/RHEL
sudo yum install openmpi openmpidevel
```
创建 hostfile: 在主控节点上创建一个文本文件(例如 `hostfile`),列出所有集群节点的 IP 地址和允许使用的 CPU 核心数。
```
hostfile 示例
192.168.1.101 slots=4 假设这台机器有4个CPU核心可以用于计算
192.168.1.102 slots=2
192.168.1.103 slots=8
```
运行 MPI 程序: 使用 `mpirun` 命令来启动你的并行程序。
```bash
mpirun np 10 hostfile hostfile ./your_mpi_program
```
`np 10` 表示总共运行 10 个进程,这些进程将根据 `hostfile` 中的配置分布到各个节点上。

2. SLURM (Simple Linux Utility for Resource Management):强大的任务调度器

如果你需要一个更专业、更灵活的任务调度系统来管理和分发各种计算任务(不仅仅是 MPI),SLURM 是一个非常流行的选择。

什么是 SLURM? 它是一个开源的高性能计算任务调度器,可以管理计算节点、分配资源、监控任务运行。
部署复杂性: 相对于 MPI,SLURM 的部署和配置会更复杂一些,需要在一个节点上安装 `slurmcontroller` (也叫 `slurmdaemon` 或 `slurmctld`),在其他节点上安装 `slurmworker` (也叫 `slurmnode` 或 `slurmd`)。
主要组件:
`slurmctld`:主守护进程,负责管理集群、调度任务。
`slurmd`:工作节点上的守护进程,负责接收任务并执行。
`srun`:用户提交作业的命令。
`squeue`:查看作业状态。
`scancel`:取消作业。
配置: 需要编辑 `slurm.conf` 文件来定义节点、分区、QoS 等信息。
优点: 功能强大,可以精细控制资源分配、任务优先级、作业依赖等,非常适合构建更正式的 HPC 集群。

3. Docker Swarm / Kubernetes:容器化集群,更通用灵活

如果你想运行的是容器化的应用(比如 web 服务、数据库、甚至一些需要特定环境的计算任务),Docker Swarm 或 Kubernetes 是更现代的选择。它们将集群管理与容器技术结合。

Docker Swarm: Docker 原生的集群管理工具,相对 Kubernetes 来说更容易上手。
部署: 选择一台机器作为 manager 节点,其他机器作为 worker 节点,通过加入命令即可快速组建一个 Swarm 集群。
使用: 通过 `docker stack deploy` 命令部署你的应用(通常是 dockercompose.yml 文件)。
Kubernetes (K8s): 目前最流行的容器编排平台,功能极其强大,但学习曲线也更陡峭。
部署: 需要使用 `kubeadm`、`kops` 或其他工具来初始化和配置 Master 和 Worker 节点。
使用: 编写 YAML 文件定义 Pods, Deployments, Services 等来部署和管理应用。
优势: 强大的自动化部署、扩展和管理能力,适合更复杂、更通用的应用场景。

选择哪个?

纯粹的科学计算、并行编程练习: 从 MPI 开始,直接高效。
希望一个能管理多种类型任务的系统: 可以考虑 SLURM。
希望学习现代分布式系统、运行容器化应用: 那么 K8s 或 Docker Swarm 是更好的选择。

五、 集群的“心脏”—— 共享存储(可选但推荐)

如果你的集群要运行一些需要读写大量数据的程序,或者需要让所有节点都能访问相同的文件,那么一个共享存储系统会非常有用。

NFS (Network File System): 最简单的一种共享存储方案。在一台机器上挂载一个目录,然后让其他机器通过网络挂载这个目录。
部署: 在 NFS 服务器上安装 `nfskernelserver`,配置 `/etc/exports` 文件。在客户端上安装 `nfscommon`,然后使用 `mount` 命令挂载。
缺点: NFS 单点故障(服务器宕机则所有客户端无法访问),且对大量小文件读写的性能可能不是最优。
GlusterFS / Ceph: 分布式文件系统。将多台机器的硬盘组合成一个统一的、高可用的存储池。
部署更复杂: 需要在集群的各个节点上都安装和配置。
优点: 高可用性、可扩展性好,性能也更优越,适合更专业的用途。如果你的闲置电脑硬盘比较多,这是个不错的尝试方向。

六、 入门实践建议(从简到繁)

1. 最简单的开始:MPI 测试
找两台性能还不错的闲置电脑,都装上 Ubuntu Server。
配置好网络,设置静态 IP,并在两台机器上启用无密码 SSH。
在两台机器上都安装 Open MPI。
在一个节点上写一个简单的 MPI C/C++ 程序(比如打印“Hello, World!”并传递一个消息)。
在主控节点上编译好程序,然后使用 `mpirun np 2 hostfile your_hostfile ./your_mpi_program` 来运行。观察输出。
尝试增加节点数量,或者运行一些在线找的 MPI 示例程序。

2. 进阶尝试:搭建 Docker Swarm
将所有闲置电脑都安装上 Ubuntu Server,并配置好网络和 SSH。
在一台机器上初始化 Swarm 集群:`docker swarm init advertiseaddr `。
在其他机器上加入 Swarm:`docker swarm join token :`。
你可以尝试部署一个简单的 Web 应用,比如一个包含前端和后端服务的容器化应用。

3. 更有挑战:Kubernetes 集群
这需要更多的学习和配置。可以尝试使用 `kubeadm` 来部署一个单 Master、多 Worker 的 K8s 集群。
学习如何部署一个简单的 Nginx 服务,或者一个 MySQL 数据库服务。
可以考虑使用 Rook 等工具来集成分布式存储(如 Ceph)到 K8s 中。

七、 几点额外的提醒和建议

散热和功耗: 多台电脑同时运行时会产生不少热量和消耗电力,注意散热和电费。
噪音: 老旧电脑的风扇可能会比较吵。
安全: 如果你的集群需要对外暴露服务,务必做好安全配置,比如防火墙规则。对于家庭内部使用,风险相对较低。
耐心和学习: 构建和维护一个集群需要一定的耐心和学习过程,遇到问题是很正常的。多查阅文档、在社区提问。
从简单开始: 不要一开始就追求最复杂的系统,先从 MPI 或 Docker Swarm 这种相对容易上手的开始,逐步深入。
备份数据: 在进行任何系统性更改之前,确保重要数据已经备份。
物理连接: 确保所有电脑都能通过网线连接到同一个交换机或路由器。WiFi 对于集群来说稳定性不够。

把闲置的电脑变成一个微型集群,这是一个非常有趣且富有教育意义的项目。它能让你在实践中学习到许多关于分布式系统、并行计算和现代 IT 基础设施的知识。祝你玩得开心,并且有所收获!

网友意见

user avatar

那么久了也没几个回答。

是不是 Beowulf Cluster 已经和 90 年代的 Novell 无盘站一样无趣了所以大家都没兴趣玩?

或者说, 现在的 Linux Distro 都已经傻瓜化了, 把这个事情弄得没有一点比格?


user avatar

查了下,如果你全部用Linux的话应该是没问题的,用LVS应该就行,但是跑Wine的话比较悬,这个好像不太容易并行化。

参考资料:

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有