使用 coLinux 和 openMosix 构建异构集群您可以通过以下三种方法的任意一种来创建一个集群:完全迁移到一个单一的平台,部分迁移,或者是以混合的方式创建。在本文中,将学习如何通过集群代理实现最后一种方法,并了解如何将 coLinux 和 openMosix 结合起来为异构环境提供高性能集群中间件。在这个异构的环境中,Linux™ 将提供稳定性和性能,而且 Windows® 用户可以继续使用他们的应用程序,根本不用关心其中的区别。
从九十年代早期起,集群计算已经取得了长足的发展。随着对 GNU/Linux 使用的日益增加,以可接受的预算使用 PC 集群来获得超级计算速度正日趋主流。容易获得的廉价硬件(处理器、内存、硬盘、以太网卡等),再加上开放源代码软件,这些都促使人们采用基于 Linux 的 Beowulf 集群。(“Beowulf”指的是基于 PC 的集群领域中最早的研究者 Dr. Donald Becker 和 Dr. Thomas Sterling 为他们最初的集群所起的名字;很多人使用这个名字来代表一种类似的技术,即基于 PC 的集群。)
术语的这一模糊性带来了这样的问题:“希望构建集群的人是否必须使用 Linux?”(或许,那个问题的中心,也是更为实际的一点,是“我们有很多使用 Windows 的空闲 PC。仅仅为了借用 CPU 周期,我们是否需要将它们全部迁移到 Linux?”)
正是这些问题促使我们去试验如何构建混合式集群(hybrid cluster),即由异构操作系统构成的集群。本文使用的是 Windows 和 Linux,为了简化起见,没有考虑其他操作系统。
为什么创建混合式集群?当前,局域网和校园网都是由使用不同操作系统的 PC 所构成。有的使用 Windows,有的使用 Linux,还有的使用 BSD,等等。一个局域网中 PC 的平均数目在 100 到 300 之间,这表明其中有巨大的潜在计算能力,特别是如果您正在规划一个主要目的是获得最高速度的高性能计算集群(HPC)。
这种类型的集群所面临的挑战是:在大部分情况下,我们不能让每台 PC 百分之百地致力于集群的工作。传统的集群在全天候的运行期间内都完全致力于运行需要大量运算的程序,与之相比,这种混合式的集群主要适用于扩展现有 Linux 集群的节点。实现这一目标有两种策略:
在每一台 Windows PC 上安装集群代理(cluster agent)。您可以认为这个代理是在系统中运行的一个小应用程序,或者是一个 Windows 服务。它以自动的方式工作,其操作由主节点(使用 Linux)完全控制。
使用双引导安装,或者使用 Linux LiveCD。LTSP(Linux Thin Server Project)也可以归类于此策略。其基本思想是将节点临时转换为 Linux 系统,然后作为集群的成员连接到主节点。
我们并没有将从 Windows 到 Linux 的部分或完全迁移作为解决方案来研究,因为我们希望在本文中集中关注第三种方法。我们没有研究向 Linux 的完全或者部分迁移,而是希望研究那些不需要关注完全迁移就可以将 Window 和 Linux 加入集群的机制和好处。不过,这并不表示完全迁移是错误的解决方案。
我们选择集群代理方法作为解决方案,因为它具有以下优势:
Windows 用户能够继续在熟悉的环境中工作,使用办公套件、绘图或者执行其他任务。用户可以让集群代理以低优先级运行,或者在启动屏幕保护程序时运行。Seti@home 项目使用了此类策略,非常有效。
由于避免了双引导,不需要进行重新分区(为了安装 Linux)。您可以在 Windows 文件系统之上安装 Linux (比如 ZipSlack),但这样会要求您必须退出 Windows。
使用集群代理的方法,您只需要在 FAT32 或者 NTFS 文件系统中留出一些空间来存放 Linux 代理二进制程序。
回页首混合式集群的先决条件在创建集群的过程中,需要在三类集群中作出选择:高可用集群(HA)、高性能计算集群(HPC)和高吞吐率集群(HTC)。我们选择的是 HPC,这是最常用的集群,它会带来以下后果:
忽略在节点上可能发生的故障。这些故障包括电源故障、网线损坏以及其他种类的硬件相关问题,比如磁盘损坏、CPU 由于过热而被锁,以及内存损坏。
各个节点在执行主节点所提交的作业时,需要重新引导的机率较小。在这种情况下,应用程序本身或者管理员必须在特定时间内重新启动必要的应用程序或者检查点。
让我们退而考虑这个问题:“为什么我们需要植入一个集群代理?难道将基于 Linux 的应用程序移植到 Windows 不能获得更好的性能吗?”当然,随着 MinGW 或 Cygwin 等跨平台编译器的可用,这可能会很容易。
对这个问题的回答是,我们出于以下原因而更希望使用集群代理:
将软件移植到另一个平台不会像预期的那样顺利。对系统调用、时间、直接硬件访问等问题的处理会延缓实现。
混合式集群往往用作各种新应用程序的实验台,或者用作对已有集群的扩展。投入很多精力来进行移植,对计划会经常变化的环境而言不会有太多好处。
实际上,很多人使用商业或者私有软件。这种软件出售或发布时并没有附带源代码。结果是不可能进行移植。
我们提出的解决方案并不是要获得如同将其移植为本地 Windows 应用程序那样快的执行速度。不过请记住,在这个试验中,我们将尝试达到以下几个关键目标:
灵活性。当代理以较低的优先级运行,或者只有在 CPU 的空闲周期中运行时,Windows 用户才可能如往常一样工作。
性能。当运行集群代理时,执行速度应该几乎 与本地移植一样快。
效率。我们只需要像安装普通 Windows 程序一样安装集群代理的二进制程序,并让它们自动运行。
易管理。借助大规模部署软件(比如 LanDesk 套件,或者微软软件管理服务器(Microsoft Software Management Server)),我们可以快速安装和删除代理软件包。如果需要,还有 VNC 等远程 X 客户机扩展可以简化远程管理。