级别: 初级 |
自由技术文章撰稿人
2005 年 1 月
集群(一组协同工作的计算机)是充分利用计算资源的一个重要概念,因为它能够将工作负载从一个超载的系统(或节点)迁移到集群中的另一个系统上。本文将阐述如何使用基于 Knoppix 的 LiveCD 建立一个负载平衡 Linux™ 集群。
超级计算机(Supercomputer)是一个通用术语,指的是比普通计算执行速度快得多的计算机。集群(cluster)指的是一组计算机,它们能够(还有其他能力)将工作负载从一个超载的单元迁移到集群中的其他计算机上。这一特性称为负载平衡(load balancing)。在本文中,您将了解到如何建立一个负载平衡集群。
集群通过有效地平衡负载提高了自身的效率,并在超级计算机家族中赢得了一席之地。为了转移负载,集群中的计算机必须彼此连接起来。
集群中的计算机称为节点。集群由一个或多个主节点(master node)和若干个从属节点(drone node)或者从节点(slave node)来管理。在典型的设置中,应用程序在主节点上开始运行。主节点负责根据需要将应用程序迁移到从属节点上。
在本文中,您将了解到如何使用基于 Knoppix 的 LiveCD 来建立完全属于您自己的超级计算机。您可能听说过 LiveCD;它们是可以在安装之前进行尝试的、出色而完整的 Linux 系统,从 CD 光驱就能够完成对它们的引导。从出现 LiveCD 的时候起,一些用户和项目就一直使用 LiveCD 作为他们的演示平台,而且,从早期的“DemoLinux”年代至今,LiveCD 已经历了一段漫长的岁月。
但是首先要了解超级计算集群的一些背景。
什么是超级计算机?
超级计算机通常用于需要执行大量计算、处理大规模数据库或者二者兼具的科学上和工程上的应用程序。(超级计算机这一术语也可以是指速度慢了很多但仍然让人感觉很快的系统。)
实际上,大部分超级计算机系统是多台连接到一起的计算机,使用以下两种普通的并行处理方法之一来进行并行处理:
在 SMP(也称为“紧耦合的(tightly coupled)”多处理和“共享所有”的系统)中,处理器共享内存和 I/O总线或者数据通路,由单一的操作系统来控制这些处理器。在大部分 SMP系统中,通常最多有十六个处理器。当执行在线事务处理(OLTP,在这类处理中,很多用户使用一组简单的事务来访问同一数据库)时,SMP 系统比MPP 更具优势。这种装置中的动态工作负载平衡使得 SMP 可以出色地胜任这类任务。
MPP 系统(也称为“松耦合的(loosely coupled)”或者“无任何共享”的系统)的特性是:有很多处理器,每个处理器都有用于自己的操作系统的内存,可以同时处理同一程序的不同部分。系统使用一个消息接口和一组数据通路来使处理器彼此通信。最多可以有 200 个处理器从事同一任务。建立 MPP 系统可能会较复杂,因为当涉及到包装系统资源以及在处理器间分配任务时,需要制定很多计划(记住,没有东西 是共享的)。MPP 系统的优势在于用户用来同时搜索数量极多的数据库的应用程序。
IBM® Blue Pacific 是高端超级计算机的一个恰当例子。这个拥有 5,800 个处理器、3.9 teraflop 运算能力的系统(有 2.6 万亿字节的内存)是与 Lawrence Livermore National Laboratory 合作构建的,为的是模拟核反应的物理过程。
集群代表的是低端的超级计算,这是一种更可能自行构建(build-it-yourself)的方法。最流行而且最知名的示例之一是 Beowulf Project,它阐述了如何使用现成的 PC 处理器、快速以太网和 Linux 操作系统来手工构建(handcraft)超级计算机。请参阅下面的参考资料一节,以获得关于 BeoWulf Project 的更多资料。
既然您已经在适当的环境中创建了集群,那么现在我将向您介绍如何开始建立您自己的集群。
不可思议的工具:ClusterKnoppix 和 openMosix
在开始构建您的集群之前,还要做另外一件事情:快速了解一下您将要使用的主要发行版本 —— ClusterKnoppix,以及它所包含的支持集群的内核:openMosix。
主要发行版本:ClusterKnoppix
顾名思义,ClusterKnoppix 是 Knoppix 的衍生版本。ClusterKnoppix 为用户提供了 Knoppix 的所有益处(丰富的应用程序、run-off-the-CD、不可思议的硬件侦测能力和对多种外部设备的支持)以及 openMosix 集群能力。在参考资料一节,有关于 ClusterKnoppix 和 openMosix 的更多资料的链接。
各种其他基于 CD 的 openMosix 发行版本包括 Bootable Cluster CD(BCCD)、ParallelKnoppix、PlumpOS、Quantian 和 CHAOS。不过,ClusterKnoppix 可能是最为流行的“主节点”发行版本,因为它:
跨节点管理程序:openMosix
除了硬件与计算机间的连接之外,您还需要可以管理分布在多个从属节点上的程序的软件。
在非集群的计算机中,操作系统允许将应用程序从存储媒体(比如硬盘和 CD)加载到内存中并开始运行它。操作系统负责被执行应用程序的完成。
我选择了 openMosix —— 一个设计用于单一系统映像集群的 Linux 内核扩展 —— 因为它允许操作系统(在我们的例子中是 Linux 内核)从任何集群节点将应用程序加载到内存并在集群的任何节点上去运行。所有给定的应用程序都被迁移到可用能力或资源最多的节点上。
一旦安装了 openMosix,集群中的节点就会开始通信,并且,集群通过优化资源分配,不断地根据工作负载对自己进行调整。自动发现(Auto Discovery)是 openMosix 的特性之一,它允许在操作集群的同时添加新的节点。
按照 openMosix Project 的说法,openMosix 可以扩展到 1,000 多个节点。
构建集群
为此,我使用了两台计算机。主节点是一台 Pentium™ III 1.7-GHz 计算机,拥有 384 MB 与显示卡共享的 RAM。从属节点是一台 Pentium III 997-MHz 计算机,拥有 256 MB 专用 RAM。两台机器都有 CD-ROM 驱动器。两台机器上有 RealTek 10/100 Mbps 局域网卡,通过一根标准的交叉网线将它们连接起来。
如果您的家用网络设置有两台(或者更多)使用网线连接起来的计算机,那么您的设置将与我的类似。
您还需要 ClusterKnoppix(撰写本文时,其最新版本为 clusterKNOPPIX V3.4-2004-05-10-EN-cl)。当从属结点在网络上引导起来时,ClusterKnoppix 能够发现它们,不过您需要支持通过网络引导的特定的局域网卡和 BIOS。由于复制 CD 的代价很低,而且您需要在所有节点上运行 X,所以最简单的方法是集群中有多少个节点就使用多少张 ClusterKnoppix CD。
可以为集群中各个的节点使用下面的网络设置:
我就不再详述 Linux 中的网络。有很多信息可以使用;请参阅下面的参考资料。
初始化主节点
openMosix 并不要求将第一个节点初始化为主节点,不过,为了直观,首先要建立主节点。
boot:
提示符时,按 Enter。给 ClusterKnoppix 留一些时间来检测和引导硬件。默认情况下,将其引导至 KDE。
ifconfig eth0 192.168.1.10
。route add -net 0.0.0.0 gw 192.168.1.1
。这样就设置好了网络。
tyd -f init
。tyd
。然后,您需要初始化从属节点。
初始化从属节点
建立一个从属节点与建立主节点没有太大区别。重复前面初始化主节点的前三个步骤。尝试自己使用前面所提到的值来配置从节点的网卡(ifconfig eth0 192.168.1.20
和 ifconfig eth0 192.168.1.20
)。
tyd -f init
。tyd -m 192.168.1.10
。就这样!您的集群已经就绪。
熟悉跟踪工具
您需要检查集群的状态;ClusterKnoppix 采用了以下跟踪状态的工具:
openMosixview
在root shell中输入这个工具的名称来打开它。该工具将检测出集群中节点的数目,并显示一个精美的、外观奇特的界面。很快,您就可以看到集群的效率、集群的负载、集群的可用内存、已经使用的内存所占百分比以及其他信息。此时您还不会看到太多的活动,因为几乎还没怎么使用集群。用一些时间来让自己熟悉这个应用程序。
openMosixmigmon
这个应用程序显示已经从主节点迁移到从属节点的进程。将您的鼠标移到中间的圆圈周围的正方形。您将得知进程的名称和它的 ID。为了将某个进程从主节点“迁移”出去,需要拖动正方形并将其放入较小的圆圈中(从属节点)。
OpenMosixAnalyzer
这个简单的应用程序报告了从初始化集群到完成其创建这段时间内集群以及各个节点的负载情况。
mosmon
这个基于命令行的监控器向您实时地显示集群上的负载、可用的内存、正在被使用的内存以及其他内容。可以查看其手册来了解如何定制视图。
mtop
那些熟悉 top 的人对这个工具会很感兴趣。top 保持对计算机上运行的每个进程的跟踪。mtop 是支持集群的 top 的变体,也会显示每个进程,而且会给出运行那个进程的节点的附加信息。
测试集群
既然集群已经准备就绪,那么现在就可以使其超载。为此,您需要借用好心的 CHAOS 发行版本的开发人员编写的一个脚本:
|
打开一个字处理器,复制这个脚本,并将其保存为 testapp.c。使集群中的所有节点都可以使用该脚本。
为了使用这个脚本,需要在所有节点上执行这些命令。首先要编译这个 C 程序:
gcc testapp.c -o testapp
然后,执行 ./testapp
。
在所有节点上至少执行此脚本一次。我在每个节点上执行了三次。
执行每个实例后,切换到前面描述的应用程序。注意行为的变化。享受看着您自己构建的集群将进程从一个节点迁移到另一个节点的乐趣吧。看哪,它正在平衡负载!
您刚才都做了些什么?
既然一切都已经就绪,让我们来回顾一下都做了些什么。
首先,配置机器上的网卡,并为它们指定 IP 地址。然后,为它们提供一个通信用的公共路由。最后,使用 tyd
命令初始化 openMosix 系统。(ClusterKnoppix 借用了 CHAOS 项目的 tyd
,明确地说是“tidy”。)
您可以只在集群中的第一个节点上执行 tyd
而不进行任何切换。这个节点不必是主节点。所有后续节点都是通过 IP 地址后的 -m
开关来添加的。
当初始化第二个节点时,IP 地址必须是第一个节点的地址。不过,当初始化第三个节点时,您可以在节点一和节点二这两个 IP 地址之间作出选择。
接下来做什么?
当掌握这项技术之后,除了在两个节点上都使用 ClusterKnoppix 来建立集群以外,还可以建立一个异构的集群。在这类集群中,除了主节点以外,不需要在从节点上运行 GUI。您可以运行一个支持 openMosix 但又像 Linux 内核一样小的发行版本。在从属节点上运行的发行版本的最普遍选择可能是 CHAOS。它占用的内存很少,这将帮助您为集群节约内存,而且它安全、可靠且速度很快。
还等什么?尽情展示您自己构建的集群吧!
参考资料
关于作者 在过去的 5 年中,Mayank Sharma 一直在从事技术方面的写作,尤其是免费和开放软件方面。他帮助创办了南亚最主要的 FLOSS 月刊 LINUX For You(作为其助理编辑),现在正忙于整理专门论述本地化、培训和 FLOSS 迁移的基于 Web 的出版物。除了写作之外,Mayank 还喜欢研究骇客技术;他最新的贡献是用于Utkarsh 本地化项目的一个安装器。虽然他正在为计算机科学学位而努力,但对于 Formula One 赛车,他依然兴趣不减。 |