经过三天的 Google 密集搜索,我还没有找到任何关于如何构建低配置廉价计算集群的高级工作流程(我们对 HA 还不感兴趣)。目前这只是一个前端加一个节点。
我们希望从小事做起岩石群,提供一个基于 Web 的服务器来提供服务,然后随着预算的增加添加节点。我们是小公司,因此没有足够的人力资源来顺利实施。以下是有关我们环境的一些事实:
- 我们的硬件不是恒定的(我们会添加节点)。
- 我们的工作量会有所不同(从 200Mb 到 1Tb 的顺序)
- 我们的软件将会改变(数据挖掘的科学应用)
您是否知道任何可视化的工作流程、工作表、图表,描述开始我们的集群规划所需的一般步骤?
答案1
简要概述:最重要的部分是规划您的网络和物理安装。您可能至少会使用三到四个网络。一个用于管理,您可以在其中配置、监控、部署、配置节点,一个用于存储访问,另一个用于 MPI 和节点间通信以及 IPMI 端口所在的带外网络。准备提出一个概念来物理和逻辑地扩展这些网络,同时还要考虑容量和性能。
您没有说是否要使用 MPI 应用程序,如果是,您可能需要在节点之间建立某种快速互连。对于使用 MPI 的任何设备而言,Infiniband 或 10G/40G 以太网之类的东西都是一个巨大的优势。不仅在带宽方面(当前一代 Infiniband 提供 56GBps),而且 RDMA 之上的 MPI 还可以将您的节点 CPU 从网络任务中解放出来。IB 在延迟方面也非常出色,实际延迟在微秒级。
目前有两种基本的集群拓扑。一种是内部计算网络和计算节点在常规企业网络上不直接可见,另一种是用户在系统中有一个定义的入口点。通常这被实现为某种 SSH 负载平衡登录机器。用户登录这些机器并可以向计算节点等提交作业。
另一种方法是让您的计算节点在公司网络中可见,用户可以从其中任何一个节点向任何其他计算节点提交。此设置的缺点是您的计算节点需要某种安全管理,因为它们不在受保护的网络中。您可能不会想要这种设置,除非您的工作负载需要这样做,即使在这种情况下,您可能也需要某种防火墙/路由设置。
您将需要一个操作系统部署/设置基础设施。根据您的操作系统以及节点的外观,有多种选择。一个简单的选择是 IBM 的xcat
。您可以采用 DIY 路线,使用类似的东西部署您的节点,foreman
并通过管理配置puppet
。更大的部署有专用的配置和配置(管理)节点。顺便说一句,rocks 已经死了,不要把鸡蛋放在那个篮子里。
这些管理节点需要提供 DHCP、DNS、网络间的路由/桥接、镜像上游软件存储库、维护部署映像,可能还为计算节点提供启动服务等。网络是设置中非常重要的部分,需要仔细规划!
这些节点本身形成某种“集群设置”(即通常对某些服务进行 HA 保护),以便能够可靠、快速地重新安装计算节点、监控操作,并使这些节点不受计算节点负载的影响。保护这些节点免受用户或任何其他非专用负载的影响非常重要。
以分层方式设计服务/管理节点是一种常见做法。例如,您可能拥有一个由两个节点组成的 HA 集群,该集群部署下一级管理节点(可以是 HA 或不是),并且这些节点仅负责部署和管理一两个机架的机器。
您将需要某种对您的计算部分可见的共享文件系统。由于您的设置似乎很小,因此 NFS 是一个不错的选择,将其从您的服务器导出到您的节点并将其放入您的配置管理中。通常的做法是将多个文件系统用于不同的目的(主目录、临时/工作目录、共享项目/组目录、软件目录等)。由于这些文件系统在性能和容量方面有非常不同的要求,您需要找出某种存储策略来管理它们。
请注意,可扩展设置不会将 NFS 用于主目录和软件以外的用途,对于大型 IO 需求,人们会使用Lustre
、GPFS
、PanFS
等诸如此类的东西。
还有关于如何管理用户帐户和组的问题。由于您将拥有一个共享文件系统,因此您将需要在整个集群中保持一致的 UID/GID。通常采用某种中央目录。
在您准备好基本的操作系统部署并设置共享存储后,您必须安装一个调度程序软件,以便您的用户不会互相干扰。一个非常好的软件。调度程序软件(实际上是分布式资源管理器)是为您提供真正计算集群的软件,没有调度程序,这些只是一堆连接到网络的机器。还有许多其他调度程序和资源管理器,例如Torque
,,以及 Altair等SGE/OGE
出色的SLURM
或商业的调度程序和资源管理器。DRM 负责启动/终止用户作业和监控资源使用情况,维护作业/任务队列等。现代调度程序现在已经有了像 Hadoop 这样的程序以及如何启动和拆除它们。此外,调度程序软件将提供某种会计系统,让您深入了解机器的使用情况。Platform LSF
PBSPro
您可能希望拥有某种系统来管理通过类似 安装在共享文件系统上的自滚动软件Environment Modules
。模块使您能够拥有版本化的用户环境并为您的用户提供中央软件。
如上所述,这只是关于如何实现这一点的一个草图。许多详细说明如何以合理且可扩展的方式实现上述所有目标。大多数 HPC 集群在性能和存储要求方面都会增长。请相应地进行规划。
集群的重要之处在于要实现平衡设计,并让集群架构与工作负载相匹配。也就是说,对于数据密集型(“大数据”)工作负载,用户可能运行 GNU R 脚本,而对于用户求解几何微分方程,则有截然不同的设计。