Beowulf 的心境

作者 Glen Otero

所以你想构建一个 Linux 集群?是的,似乎最近每个人都想这样做。然而,“Linux 集群”这个术语很流行,但对每个人来说意义并不相同。当被问及时,许多人会将 Linux 集群与一些电子商务网站或应用服务器的高可用性、故障转移、冗余和负载均衡基础设施联系起来——你典型的网络服务器群。其他人会将 Linux 集群与那些并行处理、计算巨擘联系起来,也称为 Beowulf 集群。他们都是正确的。如果你觉得这很令人困惑,你应该尝试理解“生物信息学”这个术语。现在,Linux 集群和生物信息学是两个最热门的技术趋势,但这些术语再模糊不过了。我应该知道,这是我的工作——更像是一场冒险。是的,那就是我,Linux 先知:秘密集群顾问,Beowulf 坏小子,生物信息学的福音,以及头韵大师。

但关于我的就说这么多——更多地谈谈 Beowulf。Beowulf 是 Donald Becker 和 Thomas Sterling 在 1994 年为 NASA 承包商工作时构思的,现已发展成为开源集群计算的典型代表。Beowulf 概念的核心是使用标准的通用服务器和开源软件将一组计算机集群成一台虚拟超级计算机。“你用自己的超级计算机做什么?”你问。 见鬼,有什么不能做的? 例如,你可以抓取 MP3 或组装人类基因组。 这两个应用程序以略微不同的方式利用多处理器。 当在 Beowulf 上抓取 MP3 时,你本质上是将所有 MP3 创建(通常每个 CPU 一个 MP3)分散在集群上。 这样,你通过同时启动多个串行作业(每个作业在不同的 CPU 上)来并行化它们。 每个 MP3 作业本身就是一个实体,在运行时不需要与其他任何 MP3 作业交换信息。 因此,理论上,一千个 MP3(大小相等)可以在一千个处理器(速度相等)上在与一个处理器完成一个 MP3 相同的时间内完成。 这就是完美世界中的生活。 当启动 1,000 个 MP3 作业时,由于与扩展到 1,000 个处理器相关的网络延迟和带宽开销,我们实际上不会看到线性速度的提升。

大多数在 Linux 上运行的程序都可以像 MP3 示例一样在 Beowulf 上运行,只需付出最少的努力即可实现吞吐量的巨大提升。 然而,大多数实验数据集,例如天气预报或 DNA 序列比较中发现的数据集,不能像 MP3 那样分解,因为处理数据集一部分的结果会影响其他部分的计算。 在这些情况下需要完成的计算类似于使用多个处理器抓取一个大型 MP3。 你可以想象,如果抓取一个 MP3 所需的工作量在多个处理器之间分配,处理器将需要相互通信以同步和协调其完成。 这种类型的程序利用消息传递编程库,以便可以将程序计算一部分的结果与在不同处理器上运行的其他部分进行通信和同步。

有两种常见的并行编程模型:一种利用消息传递接口 (MPI) 库,另一种利用 PVM,即并行虚拟机。 并行编程在理论上很简单,但在高效执行方面很困难,这是一项复杂的工作。 高性能计算的复杂性已经够令人沮丧的了,更不用说还要使用昂贵、喜怒无常的定制大型机上的代码了。 过去通常与高性能计算相关的难以使用的专有硬件正在逐渐被淘汰,因为越来越多的人使用 COTS(商用现货)计算机组件和 Linux 来构建 Beowulf 集群,这些集群提供了无与伦比的性价比,并在开放、标准化的平台上带来了乐趣。

就像听起来很酷一样,在早期实践 Beowulf 技术——就像高性能计算的其他方面一样——绝非易事,更像是涉足巫术。 创建 Beowulf 集群需要下载和安装额外的软件工具、实用程序和编程库到通常异构网络中的每台 Linux 工作站。 每个 Beowulf 都是一个独特的集群硬件和软件宇宙,并且被认为是正在进行中的工作。 集群管理和维护需要对驻留硬件和软件的深刻了解。 问题很多。 但与许多开源成功案例一样,一个社区形成了,并勇往直前。

自 1994 年以来,大量的社区和商业开发导致 Beowulf 计算和第二代 Beowulf 软件发行版取得了重大进展。 是的,发行版——在 CD 上。 不再需要拼凑互联网遥远角落中分散的工具、软件和驱动程序来构建 Beowulf。 听起来好得难以置信? 请继续阅读,因为我将讨论不同的 Beowulf 软件发行版,在哪里获取它们,以及如何比你说出 schweeeeet 更快地启动并运行你自己的 Beowulf 集群。

在物理上,每个 Beowulf 都有一些共同点,使其成为 Beowulf 而不仅仅是普通的工作站网络 (NOW)。 与 NOW 不同,并非每个 Beowulf 节点都是平等的——这是一场阶级斗争。 每个 Beowulf 都有一个主节点或头节点,以及多个从节点或计算节点。

主节点配备完整的 Linux 安装,是 Beowulf 的命令中心,并运行必要的通信守护程序,以将 LOBOS(架子上的许多盒子)转换为有凝聚力的集群。 主节点是该组织的大脑(是的,就是你)行使对计算节点的至高无上行政权力的所在地,通过安装和配置它们的软件、挂载文件系统、作业监控、资源分配以及访问外部世界。

另一方面,计算节点的存在是为了执行主节点的计算指令,并且就主节点而言,它们是按需知情的。 计算节点的智能程度可以从非常愚蠢(包含很少代码)到相对聪明(拥有完整的 Linux 安装)不等。 然而,拥有完整 Linux 安装的计算节点仍然缺乏某些由主节点提供的能力,这些能力使它们从属于主节点。 例如,通过 NFS 导出到计算节点的文件系统(如用户的主目录)通常驻留在主节点上。 事实上,由于我们将介绍的所有 Beowulf 发行版默认都采用这种方法,因此我们在本文中构建的集群将模仿这种方法以求简单。 但请记住,实际上,一些 I/O 服务可以分布在整个集群中,并且可以读取和写入文件到各种位置以适应数据流。 但是在开始时,通常最容易为主节点配备计算节点所需的所有集群服务和数据。

在 Beowulf 中,主节点和从节点通过专用 LAN 连接在一起并在其上进行通信,该 LAN 与普通的网络流量隔离。 网络硬件通常由预算决定,范围从 10Mbps 以太网到非常高速(大于 1Gbps)的专有硬件,如 Myrinet。 最便宜的网络是使用以太网网卡、集线器和 5 类电缆实现的。 除非你希望所有用户在使用集群时都物理地位于主节点,否则强烈建议你的 Beowulf 命令中心通过第二个网络接口连接到外部网络。 通过这种设置,主节点充当网关,跨越专用 Beowulf LAN 和你组织的公共网络。 用户可以通过公共网络远程登录到主节点,以便通过第二个网络接口访问集群的资源,但不能绕过主节点直接访问计算节点。 正如我在此处概述的那样,将你的 Beowulf 视为组织内一个单独的计算实体,可以提供许多性能、管理和安全优势。 难怪这是当前 Beowulf 软件支持的设计配置。 请查看图 1 中典型的 Beowulf 的物理布局。

The Beowulf State of Mind

图 1. 典型的 Beowulf 的物理布局

关于 Beowulf 操作系统环境,本质上有两种理念。 让我强调一下,两者都很好,只是不同。 这两种设计迎合了集群用途方面的不同需求。 也就是说,除其他外,集群的功能角色、用户类型、用户数量以及将在集群上运行的应用程序强烈决定了集群软件和访问应如何配置和控制。 从一开始就不考虑这些事情会在以后困扰你,所以让我们介绍一下两种集群设计理念。

在最初的 Beowulf 配置中,每个节点都拥有完整的 Linux 安装,并且每个节点都需要用户帐户才能运行应用程序。 这种配置在每个节点上运行任何类型的应用程序都会产生大量开销,并且管理行为不端的进程是一件相当严厉的事情。 从那时起,推出这种类型的集群有了很大的改进。 DHCP、Red Hat 的 Kickstart、SSH、MPI、HTTP 和 MySQL 的使用确实改进了集群的安装和管理。 但是一旦登录到主节点,用户仍然可以访问计算节点,并指示它们自行思考。 计算节点访问和控制可能是你的特定集群及其用户所期望的功能,因此代表着重要的管理决策。 基于此模型的两个集群发行版是 NPACI 的 Rocks 和 Open Cluster Group 的 OSCAR(开源集群和应用程序资源)。

在 Beowulf 的创建者的推动下,第二种集群范式已经发展起来,它采用了对主计算节点关系的蜂巢思维方法。 主节点是蜂后,拥有全套染色体,能够独立思考并控制蜂巢的行动。 计算节点只有半套染色体,是蜂巢的雄蜂,像一袋湿老鼠一样笨。 计算节点无法远程登录,因此只能执行主节点的指令。 尽管我使用了很酷的节肢动物类比,但这种配置已被称为单系统映像 (SSI),其旗舰产品是 Scyld Beowulf 发行版。 SSI 代表了计算节点意识形态的另一个极端,并且肯定有其优势。

哪种模型适合你的用途? 这是一个棘手的问题,但这归结为你希望用户能够对整个系统做什么。 在这些方面做出明智的决定将需要对不同的可用默认集群配置进行一些调整。 因此,让我们开始通过安装我的兄弟们的发行版 NPACI Rocks 来感受一下不同的集群软件。 圣地亚哥超级计算机中心的这个小团队构建了一个坚如磐石、易于使用的 Linux 集群发行版。 构建一个 Rocks 集群,你只需要一个如图 1 所示的 x86 服务器网络(IA32 或 IA64)、互联网连接、CD 刻录机、CD 和一张软盘。

首先,通过将你的浏览器指向 rocks.npaci.edu 来访问 Rocks 网站。 在这里,你将找到关于集群构建的一般介绍以及特定于 Rocks 项目的方法。 浏览网站时,你会发现 Rocks 集群发行版的构建有一个目标:使构建和管理 Beowulf 集群变得容易。 为了实现这个崇高的目标,Rocks 团队 1) 基于 Red Hat Linux 构建了他们的发行版,2) 将 Red Hat Linux 需要的所有开源软件添加到 Red Hat Linux 中,以便开箱即用即可使用和管理 Beowulf 集群,3) 将所有集群软件打包成 RPM 格式,4) 使用 Red Hat 的 Kickstart 软件来自动化主节点和所有计算节点的安装,5) 在主节点上创建 MySQL 数据库来组织集群信息,以及 6) 提供一些软件将它们联系在一起。 所有这些都是很棒的想法。 就集群软件而言,Rocks 发行版包括 PBS、Maui、SSH、MPICH、PVM、证书颁发机构软件、Myricom 的 Myrinet 卡通用消息等等。 似乎还不够,他们还设计了一些功能,允许你通过将你自己的软件添加到 Rocks 来自定义和构建你自己的 Beowulf 发行版。 这有多酷?

一旦你进入 Rocks 网站,点击左侧的“Getting Started”链接,你将链接到构建 Rocks 集群的分步说明。 步骤 0 简要介绍了物理集群组装的基础知识。 硬件可能有所不同,但配置应类似于图 1 中描述的配置。

步骤 1 包括从 Rocks FTP 站点下载可启动的 ISO 镜像并刻录你自己的 CD。 NPACI Rocks 当前基于 Red Hat Linux 7.1,因此有两个安装 CD,但你只需要第一个 CD 即可构建 Rocks 集群。

步骤 2 包括构建 kickstart 配置文件并安装主(在 Rocks 术语中称为前端)节点。 值得庆幸的是,Rocks 团队在其网站上提供了一个 CGI 表单,你可以填写该表单来生成此文件。 单击链接“构建配置文件”将带你到该表单。 该表单提示你提供生成 kickstart 文件所需的信息,该文件将配置前端的内部和外部接口,以及集群的管理、计时和命名服务。 网页上提供了大量建议和默认值来帮助你填写表单。

填写完表单后,单击“提交”按钮。 单击按钮后,你的浏览器应要求你保存文件。 将文件另存为 ks.cfg,然后将文件复制到 DOS 格式的软盘。 你现在拥有安装 Beowulf 集群所需的软件——Rocks CD 和你特定于前端的 kickstart 软盘。 你准备好 Rock 了! 打开你的待安装前端节点的电源,确保将其设置为从 CD-ROM 驱动器启动,插入 CD1 并重置机器。 在“boot:”提示符下,键入 frontend,插入软盘并观看前端自行安装。 安装完成后,机器将弹出 CD 并自行重启。 在机器重启之前取出 CD 和软盘,以避免重新安装。

以 root 身份登录前端。 系统将提示你创建你的 SSH 密钥。 生成密钥后,从命令行运行 insert-ethers。 此程序通过将从计算节点 DHCP 请求中解析出的计算节点信息输入到 Rocks MySQL 数据库中,从而简化 Beowulf 的安装和管理。 从程序的菜单中选择“Compute”,将 CD1 插入第一个计算节点,循环节点的电源,计算节点将自行安装。 安装完成后,机器将弹出 CD。 取出 CD,将其放入下一个计算节点并循环电源。 对所有计算节点重复此过程。

这就是全部内容。 诚然,Rocks 团队已经为你做了很多幕后工作,使其变得透明,但这就是他们的意图。 为了更好地理解 Rocks 的本质,请查看他们网站上的文档。 文档非常好,他们一直在添加内容。

你现在已经准备好开始在你的 Beowulf 上运行应用程序了。 有关启动使用 MPI 和/或 PBS 的应用程序的简短教程,请查看 Rocks 网站上步骤 4:开始计算下的信息。 一个建议,mpi-launch 命令用于启动在 Myrinet 上运行的 MPI 作业,而 mpi-run 用于启动在以太网上运行的 MPI 作业。

今天就到这里。 睁大眼睛——在你意识到之前,我将带着另一个易于安装的 Beowulf 发行版回来。 然后是另一个。 再一个。 然后我们将用它们构建一个计算网格。 然后——统治世界。

资源

The Beowulf State of Mind
电子邮件:gotero@linuxprophet.com

Glen Otero 拥有免疫学和微生物学博士学位,并在加利福尼亚州圣地亚哥经营一家名为 Linux Prophet 的咨询公司。

加载 Disqus 评论