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