Beowulf 演进史
请您想象一下,如果您开车驶入一家提供全方位服务的加油站——这几乎是一种过时的事物——停在服务员面前,说:“加满油,检查一下机油和雨刷,还有……能给我再加 20 马力吗?” 服务员对这个请求并不感到惊讶,他看着您说:“您想要四轮驱动吗?我听说今晚可能会下雪。” 您思考片刻,积极回应——四轮驱动会很好。
要是汽车和 Beowulf 集群也能如此灵活就好了。然而,Beowulf 2 技术最重要的一个显著特点就是适应性——即增加更多计算能力以满足不断变化的需求的能力。要理解和欣赏 Beowulf 技术是如何变得如此适应性强的,首先需要了解 Beowulf 1。
正如我们现在都知道的,Beowulf 集群的最初概念是由 Donald Becker 在 1994 年于 NASA 戈达德太空飞行中心工作期间提出的。其前提是,可以使用商用计算部件并行工作,从而在特定类型的问题上实现计算性价比的量级飞跃。概念验证是第一个 Beowulf 集群 Wiglaf,它于 1994 年末投入运行。Wiglaf 是一个 16 处理器系统,配备 66MHz Intel 80486 处理器,后来被更换为 100MHz DX4,实现了 74Mflops/s(每秒 7400 万次浮点运算)的持续性能。三年后,Becker 和 CESDIS(空间数据和信息服务卓越中心)团队赢得了著名的戈登贝尔奖。该奖项是为在 SC'96(1996 年超级计算会议)上组装的 Pentium Pro 集群颁发的,该集群实现了 2.1Gflops/s(每秒 21 亿次浮点运算)。当时,戈达德开发的软件已在许多国家实验室和大学中得到广泛应用。
第一代 Beowulf 集群具有以下特点:商用硬件、开源操作系统(如 Linux 或 FreeBSD)以及位于私有网络上的专用计算节点。此外,所有节点都安装了完整的操作系统,并且每个节点都有独立的进程空间。
这些第一代 Beowulf 运行软件以支持消息传递接口,可以是 PVM(并行虚拟机)或 MPI(消息传递接口)。消息传递通常是高性能计算 (HPC) 集群环境中的从节点交换信息的方式。
第一代 Beowulf 集群受到一些常见问题的困扰,主要是因为用于控制新集群的系统管理工具无法很好地扩展,因为它们比并行编程软件更特定于平台或操作系统。毕竟,Beowulf 的全部意义在于运行高性能并行作业,而编写健壮、可移植的系统管理代码则较少受到关注。以下类型的问题阻碍了早期的 Beowulf
早期的 Beowulf 难以安装。要么是劳动密集型的、手动安装每个节点的方法,这种方法容易出错并且容易出现拼写错误,要么是更复杂的、使用 PXE/TFTP/NFS/DHCP 通过网络安装所有节点的方法——显然,一次性正确配置和运行所有首字母缩略词本身就是一项壮举。
Beowulf 一旦安装完成,就难以管理。如果您考虑一个包含数十个或数百个节点的中大型集群,当新的 Linux 内核发布时会发生什么,比如针对 SMP 优化的 2.4 内核?要在从节点上运行新内核,您必须将内核安装在适当的空间中,并数十次或数百次地告诉 LILO(或您喜欢的引导加载程序)所有相关信息。为了方便节点更新,使用了 r 命令,例如 rsh 和 rcp。然而,r 命令需要在从节点上进行用户帐户管理访问,并打开大量安全漏洞。
集群难以适应:以更多从节点的形式添加新的计算能力需要向北欧诸神虔诚祈祷。要添加一个节点,您必须安装操作系统,更新所有配置文件(很多曲折的小文件,都一样),更新节点上的用户空间,当然还有所有具有自身配置要求 HPC 代码——您确实希望 PBS 知道新节点,不是吗?
它看起来和感觉都不像一台计算机;它感觉像很多独立的节点在做自己的事情,有时在一起玩得很好,足以完成并行编程作业。
简而言之,尽管在利用商用硬件的强大功能方面取得了所有进展,但在使 Beowulf 1 成为工业级计算设备方面仍有许多工作要做。在过去一年左右的时间里,Rocks 和 OSCAR 集群软件发行版已发展成为 Beowulf 1 实现的典范 [参见“Beowulf 的心态”,《LJ》2002 年 5 月刊和“OSCAR 革命”,《LJ》2002 年 6 月刊]。但是,如果要使 Beowulf 商用计算变得更加复杂和易于使用,则需要极端的 Linux 工程。Beowulf 2,下一代 Beowulf 应运而生。
第二代 Beowulf 的标志是消除了最容易出错的组件,使新设计比第一代 Beowulf 简单得多且更可靠。Scyld Computing Corporation 由首席技术官 Don Becker 和一些最初的 NASA Beowulf 员工领导,在 Beowulf 技术方面取得了突破性进展,其重要性堪比 1994 年的原始 Beowulf 本身。从 Beowulf 1 到 Beowulf 2,商用方面和消息传递软件保持不变。然而,在节点设置和进程空间分配方面进行了重大修改。
第二代 Beowulf 解决方案的核心是 BProc,它是 Beowulf 分布式进程空间的缩写,由洛斯阿拉莫斯国家实验室的 Erik Arjan Hendriks 开发。BProc 由一组内核修改和系统调用组成,允许将进程从一个节点迁移到另一个节点。进程在应用程序本身的完全控制下迁移——应用程序显式决定何时迁移到另一个节点,并通过 rfork 系统调用启动该过程。进程在不迁移其关联文件句柄的情况下迁移,这使得进程精简而快速。任何所需的文件都由应用程序本身在目标节点上重新打开,从而为应用程序进程提供完全控制。
当然,如果没有管理远程进程的能力,将进程从一个节点迁移到另一个节点的能力是毫无意义的。BProc 通过在主节点的进程表中为每个迁移的进程放置一个“幽灵进程”来提供这种方法。这些幽灵进程不需要主节点上的内存——它们只是占位符,用于代表远程进程传递信号和执行某些操作。例如,通过主节点上的幽灵进程,远程进程可以接收信号,包括 SIGKILL 和 SIGSTOP,并派生子进程。由于幽灵进程出现在主节点的进程表中,因此用于显示进程状态的工具以相同熟悉的方式工作。
BProc 的优雅简洁具有深远的影响。最明显的影响是 Beowulf 集群现在看起来具有从主节点管理的单进程空间。这种具有集中式管理的集群范围单进程空间的概念称为单系统映像,有时也称为单系统错觉,因为该机制提供了集群是单一计算资源的错觉。此外,BProc 不需要 r 命令(rsh 和 rlogin)进行进程管理,因为进程直接从主节点管理。消除 r 命令意味着无需在从节点上进行用户帐户管理,从而减少了从节点上操作系统的很大一部分。事实上,要在从节点上运行 BProc,只需在从节点上存在几个守护进程:bpslave 和 sendstats。
Scyld 完全利用 BProc 提供可扩展的集群计算解决方案,从从节点中消除了一切,除了运行 BProc 进程绝对需要的东西。结果是一个超薄计算节点,它只运行 Linux 的一小部分——足以运行 BProc。BProc 的强大功能和超薄 Scyld 节点结合在一起,对集群的管理方式产生了巨大的影响。Scyld 发行版和 Beowulf 2 集群有两个显著特点。首先,只需添加新节点即可扩展集群。由于节点是超薄的,因此安装只是使用 Scyld 内核启动节点,并使其成为 BProc 迁移进程的容器。其次,消除了版本偏差。版本偏差是完全安装从节点的集群上发生的情况。随着时间的推移,由于软件更新期间节点关闭、简单的更新失败或程序员的摆弄,本应同步的节点上的软件会逐渐不同步,从而导致版本偏差。由于运行 BProc 的节点上只需要最基本的东西,因此几乎消除了版本偏差。
当然,拥有将进程迁移到瘦节点的能力本身并不是一个解决方案。Scyld 作为特殊 Scyld Beowulf 发行版的一部分提供了解决方案的其余部分,其中包括以下功能:
BeoMPI:一个满足 MPI 标准的消息传递库,它源自阿贡国家实验室的 MPICH(MPI Chameleon)项目,并专门针对 BProc 进行了优化。
BeoSetup:用于为从节点创建 BeoBoot 软盘启动映像的 GUI。
Beofdisk:用于分区从节点硬盘驱动器的实用程序。
BeoStatus:用于监视集群状态的 GUI。
让我们来看看如何在构建 Scyld Beowulf 集群时使用这些工具。
您可以购买 Scyld Beowulf Professional Edition (www.scyld.com),它附带可启动的主节点安装 CD、文档和一年的支持。Professional Edition 非常出色,并支持许多高级集群软件工具,例如并行虚拟文件系统 (PVFS)。或者,您可以从 Linux Central (www.linuxcentral.com) 购买 Scyld Basic Edition CD,价格为 2.95 美元。Basic Edition 缺少 Professional Edition 中的一些功能,并且没有文档或支持。我使用这两种版本构建集群都没有任何问题。
重要的是,您要按照图 1 所示构建您的 Beowulf,图 1 说明了通用的 Beowulf(1 和 2)布局。主节点具有两个网络接口,它们跨越公共网络和私有计算节点 LAN。Scyld Beowulf 假设您已配置网络,以便主节点上的 eth0 是公共网络接口,而 eth1 是连接到私有计算节点网络的接口。要开始安装,请取出您的 Scyld CD,将其放入主节点的 CD 驱动器中,然后重新启动计算机。

图 1. 通用 Beowulf 布局
您会发现 Scyld Beowulf 主节点安装几乎与 Red Hat Linux 安装完全相同。在启动提示符下,键入 install 以触发主节点安装。让启动提示符超时将默认启动从节点安装。
按照您对 Red Hat Linux 执行的简单安装步骤进行操作。对于首次构建集群的人员,我们建议(并在此处假设)您选择 GNOME 控制器安装,而不是仅文本控制台安装。选择 GNOME 安装将使您能够访问集成到 GNOME 桌面环境中的所有简洁的 GUI Beo* 工具,这些工具使构建集群的其余部分变得轻而易举。
在 eth0 的典型配置之后,您将遇到 Scyld 安装的关键区别:主节点上 eth1 的配置以及计算节点的 IP 地址。安装程序将提示您输入 eth1 的 IP 地址(如 192.168.1.1)和计算节点的 IP 地址范围(例如,192.168.1.2-192.168.x)。很简单,但请确保您选择的 IP 范围足够大,以便为每个计算节点分配自己的地址。
继续执行其余安装步骤,例如 X 配置。为简单起见,选择图形登录选项。通过创建启动盘、取出 CD(和启动盘)并重新启动主节点来完成主节点安装。
以 root 用户身份登录到主节点,Scyld 自定义的 GNOME 桌面将为您启动,其中包括 BeoSetup 和 BeoStatus GUI 以及计算节点快速安装指南。
最初,所有计算节点都需要 BeoBoot 映像才能启动,可以在软盘或 Scyld CD 上。我更喜欢在软盘上创建多个从节点启动映像,每个从节点一个,而不是在节点之间移动 Scyld CD。BeoBoot 映像是使用 BeoSetup 工具创建的,方法是单击 BeoSetup 中的“节点软盘”按钮。将空白格式化的软盘插入主节点的软盘驱动器中;单击“确定”以创建 BeoBoot 启动映像并将其写入软盘。为任意数量的软盘重复此操作。将启动软盘插入从节点软盘驱动器中并打开电源。
接下来发生的事情非常酷,但对用户是隐藏的(除非您将显示器连接到从节点)。每个从节点启动 BeoBoot 映像,自动检测网络硬件,安装网络驱动程序,然后发送 RARP 请求。这些 RARP 请求由主节点上的 Beoserv 守护进程应答,然后 Beoserv 守护进程向每个从节点发送 IP 地址、内核和 RAM 磁盘。此过程称为“双内核蒙特”,其中从节点使用软盘上的最小内核引导自身,然后从主节点替换为最终的、更复杂的内核。然后,从节点使用最终内核重新启动自身,并重复硬件检测和 RARP 步骤。然后,从节点联系主节点以集成到 BProc 中。
在内核蒙特业务期间,从节点以太网 MAC 地址将出现在主节点上 BeoSetup 中的“未知地址”窗口中。您可以通过突出显示地址、将它们拖到中央“配置节点”列并单击“应用”按钮,将它们集成到您的集群中。一旦主节点完成将从节点集成到 BProc 中,节点将被标记为“up”。节点状态也会显示在 BeoStatus 中。
您可以使用 /etc/beowulf/fdisk 中的默认配置对从节点硬盘驱动器进行分区
beofdisk -d beofdisk -w
-d 选项告诉 beofdisk 使用 /etc/beowulf/fdisk 中的默认配置,-w 选项将表写入所有从节点。然后,您需要编辑 /etc/beowulf/fstab 以将交换分区和 / 文件系统映射到新分区。只需注释掉 /etc/beowulf/fstab 中用于在没有分区硬盘驱动器的情况下挂载 / 文件系统的 $RAMDISK 行,然后编辑接下来的两行以将交换分区和 / 文件系统映射到 /dev/hda2 和 /dev/hda3(/dev/hda1 保留为可启动分区)。如果您想从硬盘驱动器启动,您可以像这样将 Beoboot 软盘映像写入可启动分区
beoboot-install -a /dev/hda1执行此操作后,您需要在 /etc/beowulf/fstab 中添加一行
/dev/hda1 beoboot ext2 defaults 0 0重新启动所有从节点以使分区表更改生效
bpctl -S all -s reboot这已经非常简单了。与 Beowulf 1 不同,构建 Scyld Beowulf 仅需要在主节点上进行完整的 Linux 安装。在从节点的安装过程中,不会将任何内容写入从节点上的永久存储,这使得它们超薄、易于维护且可以快速重新启动。
要测试您的集群,您可以从命令行运行发行版附带的高性能 Linpack 基准测试:linpack。
为了获得更炫酷的演示,请使用附带的 mpi-mandel 应用程序启动可视化 Mandelbrot 集。从命令行在五个节点上启动 mpi-mandel 看起来像
NP=5 mpi-mandel
总而言之,单进程 ID 空间、在应用程序控制下快速迁移进程的能力、瘦从节点以及用于构建和监视 Scyld 集群的 GUI 实用程序,提供了一个集群解决方案,该解决方案以其完整性、适应性和可管理性将自身与 Beowulf 1 区分开来。所以,答案是肯定的,您确实可以为该集群增加更多马力。
作者要感谢 Scyld Computing Corporation 的 Donald Becker、Tom Quinn 和 Rick Niles 以及洛斯阿拉莫斯国家实验室的 Erik Arjan Hendriks 耐心解答了我们所有关于第二代 Beowulf 的问题。
Glen Otero 拥有免疫学和微生物学博士学位,并在加利福尼亚州圣地亚哥经营一家名为 Linux Prophet 的咨询公司。
Richard Ferri 是 IBM Linux 技术中心的高级程序员,他在该中心从事开源 Linux 集群项目,例如 LUI 和 OSCAR。他现在与妻子 Pat、三个十几岁的儿子和三只血统可疑的狗住在纽约州北部。