Linux 集群 HOWTO

Ram Samudrala (me@ram.org)

v1.5, 2005 年 9 月 5 日
如何设置高性能 Linux 计算集群。

1. 简介

2. 硬件

3. 软件

4. 设置、配置和维护

5. 在集群上执行任务

6. 致谢

7. 参考书目


1. 简介

本文档描述了我们如何设置 Linux 计算集群以进行高性能计算,这是我们 研究 所需的。

请自行承担使用以下信息的风险。对于您在阅读本 HOWTO 后可能做的任何事情,我概不负责。本 HOWTO 的最新版本始终可以在 http://www.ram.org/computing/linux/linux_cluster.html 上找到。

与其他泛泛而谈集群设置的文档不同,本文档具体描述了我们实验室的设置方式,不仅包括计算方面的细节,还包括桌面、笔记本电脑和公共服务器方面。这样做主要是为了本地使用,但由于我收到了多封基于我在新闻组查询中请求相同信息的电子邮件,所以我将其发布在网上。即使在今天,当我计划另一个 64 节点集群时,我仍然发现关于如何组装组件以形成一个在 Linux 下可靠工作的节点的信息非常匮乏,这些信息不仅包括计算节点,还包括需要与节点良好配合以实现高效研究的硬件。本 HOWTO 目前的主要用途是报告哪种硬件与 Linux 配合良好,哪种硬件不配合。


2. 硬件

本节介绍了我的硬件选择。除非在 已知硬件问题 部分中注明,否则假设一切都非常 好用。

硬件安装也相当简单,除非另有说明,大多数细节都包含在手册中。对于每个部分,硬件都按购买顺序列出(最近购买的列在最前面)。

2.1 节点硬件

32 台机器各有以下配置

32 台机器各有以下配置

32 台机器各有以下配置

32 台机器各有以下配置

32 台机器各有以下配置

2.2 服务器硬件

两台用于外部使用的服务器(信息传播),配置如下

2.3 桌面和终端硬件

我们已经确定了集群的至少两种用户:那些需要(即,利用)永久本地处理能力和磁盘空间与集群结合以加快处理速度的用户,以及那些只需要集群处理能力的用户。前者被分配“桌面”,本质上是高性能机器,后者被分配“终端”。我们的桌面通常是双处理器或四处理器机器,当前高端 CPU 是 1.6 GHz Opteron,拥有高达 10 GB 的 RAM 和超过 1 TB 的本地磁盘空间。我们的终端本质上是用户可以登录并在我们的集群上运行作业的机器。在这种设置中,人们也可以使用笔记本电脑作为哑终端。

2.4 其他/附件硬件

我们通常使用/偏好 Viewsonic 显示器、Microsoft Intellimouse 鼠标和 Microsoft Natural 键盘。这些通常对我们来说工作非常可靠。

2.5 硬件整合

为了可视化访问节点,我们最初曾经使用 KVM 切换器和一个廉价显示器来连接和“查看”所有机器。虽然这是一个不错的解决方案,但它无法扩展。我们目前推着一个小显示器四处走动,并根据需要连接电缆。我们需要的是一个小手持显示器,可以插入 PC 背面(用手写笔操作,就像 Palm)。

对于网络,我们通常使用 Netgear 和 Cisco 交换机。

2.6 成本

我们的供应商是 Hard Drives Northwest ( http://www.hdnw.com)。对于我们集群中的每个计算节点(包含两个处理器),我们支付了大约 1500-2000 美元,包括税费。一般来说,我们的目标是将每个处理器的成本保持在 1000 美元以下(包括机箱)。


3. 软件

3.1 操作系统:当然是 Linux!

以下内核和发行版是我们正在使用的

这些发行版对我们来说非常好用,因为更新是通过 CD 发送给我们的,并且不依赖外部网络连接进行更新。它们似乎也比常规 Red Hat 发行版“更干净”,并且设置非常稳定。

3.2 网络软件

我们使用 Shorewall 1.3.14a (( http://www.shorewall.net) 作为防火墙。

3.3 并行处理软件

我们使用我们自己的软件进行应用程序并行化,但也尝试过 PVMMPI。在我看来,这些预打包程序的开销太高了。我建议为您执行的任务编写特定于应用程序的代码(这是一家之言)。

3.4 成本

Linux 和大多数在 Linux 上运行的软件都可以免费复制。


4. 设置、配置和维护

4.1 磁盘配置

本节介绍磁盘分区策略。我们的目标是保持机器的虚拟结构组织有序,使其都具有逻辑性。我们发现,随着硬件和软件(操作系统)的更改,物理映射到逻辑结构是不可持续的。目前,我们的策略如下

farm/cluster machines:

partition 1 on system disk     - swap  (2 * RAM)
partition 2 on system disk     - /     (remaining disk space)
partition 1 on additional disk - /maxa (total disk)

servers:

partition 1 on system disk        - swap  (2 * RAM)
partition 2 on system disk        - /     (4-8 GB)
partition 3 on system disk        - /home (remaining disk space)
partition 1 on additional disk 1  - /maxa (total disk)
partition 1 on additional disk 2  - /maxb (total disk)
partition 1 on additional disk 3  - /maxc (total disk)
partition 1 on additional disk 4  - /maxd (total disk)
partition 1 on additional disk 5  - /maxe (total disk)
partition 1 on additional disk 6  - /maxf (total disk)
partition 1 on additional disk(s) - /maxg (total disk space)

desktops:

partition 1 on system disk        - swap   (2 * RAM)
partition 2 on system disk        - /      (4-8 GB)
partition 3 on system disk        - /spare (remaining disk space)
partition 1 on additional disk 1  - /maxa  (total disk)
partition 1 on additional disk(s) - /maxb  (total disk space)

请注意,在服务器和桌面的情况下,maxg 和 maxb 可以是单个磁盘或磁盘的集合。

4.2 软件包配置

为集群安装最少的软件包集。允许用户随意配置桌面,前提是保持上述虚拟结构相同。

4.3 操作系统安装和维护

个人克隆策略

我坚信拥有一个完全分布式的系统。这意味着每台机器都包含操作系统的副本。在每台机器上手动安装操作系统非常麻烦。为了优化此过程,我的做法是首先完全按照我想要的方式设置和安装一台机器。然后,我创建整个系统的 tar 和 gzipped 文件,并将其放在可引导的 CD-ROM 上,然后我在集群中的每台机器上克隆它。

我用来创建 tar 文件的命令如下

tar -czvlps --same-owner --atime-preserve -f /maxa/slash.tgz /

我使用一个名为 go 的脚本,它以机器编号作为参数,并在 CD-ROM 上解压 slash.tgz 文件,并在适当的位置替换主机名和 IP 地址。可以在以下网址访问 go 脚本的版本及其输入文件:http://www.ram.org/computing/linux/linux/cluster/。此脚本必须根据您的集群设计进行编辑。

为了使这项工作正常进行,我使用 Martin Purschke 的 Custom Rescue Disk ( http://www.phenix.bnl.gov/~purschke/RescueCD/) 创建一个可引导的 CD 映像,其中包含代表克隆系统的 .tgz 文件,以及 go 脚本和其他相关文件。这被刻录到 CD-ROM 上。

有几篇文档描述了如何创建您自己的自定义可引导 CD,包括 Linux Bootdisk HOWTO ( http://www.linuxdoc.org/HOWTO/Bootdisk-HOWTO/),其中还包含指向其他预制引导/根磁盘的链接。

因此,您拥有一个系统,您只需插入 CDROM,打开机器,喝一杯咖啡(或一罐可乐),然后回来查看完整的克隆。然后,您对拥有的尽可能多的机器重复此过程。此过程对我来说效果非常好,如果您有其他人实际做这项工作(插入和取出 CD-ROM),那么它就是理想的。在我的系统中,我通过指定机器的编号来指定 IP 地址,但这可以通过使用 DHCP 完全自动化。

Rob Fantini ( rob@fantinibakery.com) 贡献了上述脚本的修改版本,他用于克隆 Mandrake 8.2 系统,可在 http://www.ram.org/computing/linux/cluster/fantini_contribution.tgz 访问。

克隆和维护软件包

FAI

FAI ( http://www.informatik.uni-koeln.de/fai/) 是一个自动化系统,用于在 PC 集群上安装 Debian GNU/Linux 操作系统。您可以拿一台或多台全新的 PC,打开电源,几分钟后,Linux 就会在整个集群上安装、配置和运行,而无需任何交互。

SystemImager

SystemImager ( http://systemimager.org) 是一种软件,可以自动化 Linux 安装、软件分发和生产部署。

DHCP 与硬编码 IP 地址

如果您设置了 DHCP,那么您无需重置 IP 地址,并且可以从 go 脚本中删除该部分。

DHCP 的优点是您根本不需要处理 IP 地址,前提是 DHCP 服务器配置正确。它的缺点是它依赖于集中式服务器(就像我说的,我倾向于尽可能地分配事物)。此外,如果您希望例行更换机器或更改主机名,将硬件以太网地址链接到 IP 地址可能会很不方便。

4.4 已知的硬件问题

一般来说,硬件对我们来说工作得非常好。具体问题如下

AMD 双核 1.2 GHz 机器运行起来非常热。房间里有两台机器会显着升高温度。因此,虽然它们作为桌面电脑可能还可以,但在大型集群中使用它们时,散热和功耗是一个需要考虑的因素。前面描述的 AMD Palmino 配置似乎工作得非常好,但我绝对建议在机箱中安装两个风扇——这解决了我们所有的不稳定问题。

4.5 已知的软件问题

某些 tar 可执行文件显然没有以他们应该有的那种好的方式创建 tar 文件(尤其是在引用和取消引用符号链接方面)。我发现的解决方案是使用一个确实可以的 tar 可执行文件,例如来自 RedHat 7.0 的那个。


5. 在集群上执行任务

本节仍在开发中,因为我对集群的使用不断发展,但到目前为止,我们倾向于编写自己的消息传递例程集,以在不同机器上的进程之间进行通信。

许多应用程序,尤其是在计算基因组学领域,都是大规模且微不足道地并行化的,这意味着可以通过在机器之间平均分配任务来实现完美分配(例如,当使用对单个基因/蛋白质进行操作的技术分析整个基因组时,每个处理器可以一次处理一个基因/蛋白质,独立于所有其他处理器)。

到目前为止,我们还没有发现需要使用专业的排队系统,但这显然高度依赖于您希望运行的应用程序类型。

5.1 粗略基准测试

对于我们运行的单个最重要的程序(我们的从头算蛋白质折叠模拟程序),以 Pentium 3 1 GHz 处理器机器作为参考框架,平均而言

Xeon    1.7 GHz processor is about 22% slower
Athlon  1.2 GHz processor is about 36% faster
Athlon  1.5 GHz processor is about 50% faster
Athlon  1.7 GHz processor is about 63% faster
Xeon    2.4 GHz processor is about 45% faster
Xeon    2.7 GHz processor is about 80% faster
Opteron 1.4 GHz processor is about 70% faster
Opteron 1.6 GHz processor is about 88% faster

是的,Athlon 1.5 GHz 比 Xeon 1.7 GHz 更快,因为 Xeon 每个时钟周期仅执行六条指令 (IPC),而 Athlon 执行九条 IPC(您自己计算一下!)。然而,这是一个非常不严谨的比较,因为可执行文件都是在机器上编译的(因此例如数学库的质量会产生影响),并且支持硬件也不同。

5.2 正常运行时间

这些机器在硬件和软件方面都非常稳定,一旦经过调试(通常一批新机器中的一些机器存在硬件问题),就会在非常重的负载下持续运行。下面给出一个常见的例子。重新启动通常发生在断路器跳闸时。

  2:29pm  up 495 days,  1:04,  2 users,  load average: 4.85, 7.15, 7.72


6. 致谢

以下人员对完成本 HOWTO 提供了帮助


7. 参考书目

以下文档可能对您有用---它们是指向利用高性能计算集群的来源的链接