这是一个多步骤的问题,所以请耐心等待。
我正在考虑构建一个小型(10 - 20 个节点)集群。但是,我希望普通程序(不是为集群设计的)能够利用额外的处理速度。在最理想的情况下,我希望能够在整个集群上运行单个管理程序。据我所知,对于这个问题,没有一个好的解决方案可以让一个普通的程序在集群上运行得更快。
因此,我正在集思广益,我将如何设计这样一个系统,以及尝试是否可行。似乎集群的固有问题是移动数据比处理数据需要更多时间。(即,将问题从一个节点转移到另一个节点需要 2 秒,但在第一个节点上解决它只需要 1 秒。)但是,我已经想到了一个可能的解决方案。
我们只是说理论上集群中的所有节点都可以从同一个磁盘启动。因此,他们都可以直接访问相同的数据和相同的程序。其次,让我们假设可以修改 Linux 内核以将每个新命令发送到不同的从节点,无限循环通过所有节点。鉴于这两个条件,用户可以登录到主节点的终端并以正常(非面向集群)格式运行命令,但命令的负载将或多或少均匀地分布在整个集群中。
因此,通过介绍,这是我的两个问题:
- 是否有可能创建一个所有计算机都从一个磁盘(可能是 NAS)启动的环境? (我知道 PXE,但据我所知,它不提供持久存储,它只托管操作系统。)如果目前可能,怎么做?
- 是否可以修改内核以将每个新命令委托给单独的节点? (这可以通过修改 bash 二进制文件而不是内核本身来完成 - 我不确定。)如果是这样,请说明如何。
这是我在 Stack Exchange 上尝试过的最复杂的问题,所以我希望人们在评论中提出问题。然而,如果这个解决方案能够真正实施,它可能会彻底改变虚拟化。
当然,PXE 与 NFS 安装共享的组合用于持久存储。
是的。
很简单,对吧?没有那么多。
您应该问的问题是:这样做需要做多少工作?
已经有公司在这个问题上工作了 30 年,投入了数十亿美元,但问题还没有解决。这并不是说它无法解决,但这是一个非常复杂的问题。
存在多节点、独立操作系统映像、共享存储系统。例如,在 OpenVMS 上运行的 VMScluster 本质上是一个多节点系统。但是,这不是 Linux 操作系统,应用程序需要针对不同的平台和多节点感知进行设计。
通常 Linux 可以扩展到更大或更多机器。对于更大的,将更多的 CPU 和内存添加到一个 OS 映像。想想大型数据库服务器。更重要的是,添加具有自己操作系统映像的较小机器,将它们联网,并使用某种作业管理软件或其他负载平衡器。想想云应用程序或高性能计算。编辑:请注意,HPC 应用程序特别使用 MPI 接口进行直接内存访问。这要求它们针对这些消息库进行开发和构建。