|
楼主 |
发表于 2007-10-11 17:53:34
|
显示全部楼层
使用FreeBSD构建HPC群集
3.7 节点配置管理
由于一个群集中节点往往是数量最多的,那么有效的节点配置管理就成为至关重要的一环。许多系统在每个节点上安装操作系统,并对每个节点唯一的部分进行手工配置。其他的系统使用Etherboot,PXE或者LinuxBIOS工具从网络上启动各个节点。关键的一点就是集中管理和自动化。我们看到很多的群集上的节点不到万不得已的时候就不会更新,因为糟糕的群集架构设计使得节点升级不切实际。
节点配置管理可能是Fellowship架构中最独特的部分了。我们从基本的FreeBSD无盘启动过程开始,然后我们使用无盘的重新挂载功能来加载/etc 到/conf/base/etc并覆盖节点上的SSH密钥。对许多应用程序来说,这个配置应该已经足够了。然而,我们有一些应用程序需要大量的本地 Scratch空间,所以每个节点都拥有一个磁盘。通常,处理这些磁盘的方式是在系统安装的时候手工的在这些磁盘上创建合适的目录结构,然后让这些节点在每次启动的时候来挂载这些磁盘并运行fsck程序检查磁盘。我们认为这样做对Fellowship来说是不切实际的,因为节点都是批量安装的。另外,我们也需要从新配置磁盘的能力,就像对操作系统一样。所以,我们没有采用手工配置的方式,而是写了一个程序(diskmark)。这个程序利用了MBR分区表中的一个无效的表项来存储一个神奇数(magic number)和一个代表了当前分区方案的版本号。启动的时候,我们使用一个脚本来检查这个表项来确定磁盘的当前布局是否是我们所希望的。这个脚本会在 rc.diskless2之前运行。如果磁盘布局需要改变的话,diskless脚本会自动使用Warner Losh的diskprep脚本按照我们的希望初始化相应的磁盘。
有了这个配置以后,添加节点就非常简单了。基本的过程就是把他们装到机架上,接上电源然后启动。然后我们从交换机的管理控制台中获得它的MAC地址并把它添加到DHCP的配置中去,这个节点就可以获得一个众所周知的IP。在运行了脚本告知任务定时器关于这个节点的信息并重启节点之后,节点就可以使用了。
网路启动的镜像文件的维护是通过chroot到安装的 root账户然后按照标准的过程来升级操作系统和ports来完成的。对操作系统升级,我们会拷贝整个/root目录到另外的地方,将升级完成,然后使用几个节点进行测试;确定新的文件没有问题之后就修改DHCP的配置,然后重启所有的节点从而让他们使用新的root目录启动。如果需要安装新的软件,我们使用标准的ports安装过程并使用portupgrade来管理整个过程。对于ports中不存在的软件,他们将被安装的单独的/usr/aero目录下。
在原来的计划中,Fellowship的所有节点会利用BIOS对PXE的支持进行网络启动。PXE对服务器级别的主板来说是一个标准配置,但是看起来制造商对这一功能的测试比较差劲。我们的供应商不止一次地需要将主板送回到制造商处,让他们作出新的BIOS来修正PXE的问题。我们发现几乎所有的平台上的PXE都不怎么可靠,都会偶尔出现网络启动失败,但找不到明显原因。这时系统会试图从硬盘启动,当然这会失败,因为我们没有配置硬盘启动的任何信息。其中的一些问题看起来是由系统和Cisco交换机之间的互动引起的。最近,我们正在创建一个增强版本的diskprep程序,它可以让我们创建一个FreeDOS分区,自动重启机器并无限次地尝试网络启动。
3.8 任务调度计划
对于群集的架构师来讲,任务调度可说是最复杂最有争议的问题之一。主要的选项包括:无计划运行,手工调度,批量队列以及面向域(domain specific)的计划调度。
在一个小的环境中,用户的目标相互兼容,这时可以让他们在私下里相互协商的基础上任意使用计算资源。在很多时候,这个选项工作的很好。对于比较大的群集系统,一定程度的计划是必要的。即使用户的目标并不相互冲突,在成百上千的节点之间做出决定也是很困难的。另外,许多群集是多用途的,相互之间要有一定的平衡。在许多环境下,批量队列是个很好的调度方式。这有很多例子,比如OpenPBS,PBSPro,Sun Grid Engine,LSF,NQS和DQS。这些系统一般都带有一个计划调度程序(Scheduler),但是许多系统也支持运行Maui backfill计划程序。OpenPBS和SGE是可以免费获得的开源应用程序,也是群集计划调度的最流行的选择。
对一些应用程序来说,批量队列并不是一个好的答案,因为他们需要运行非常大量的任务,或者是他们的各个子任务需要的运行时间差别非常大。比如,我们听说过一个计算型的生物科技应用程序,它每天都需要检测成千上万的测试案例,其中一些几秒钟就可以完成,而有的则要花上一整天的时间。在这种情况下,一个面向域的计划调度程序通常是必须的。一个通常的解决方案是,将这些测试案例存储一个数据库中,每个节点上的应用程序查询数据库取得工作单元,进行必要的处理然后将结果存储在数据库中,如此往复。
在Fellowship上,我们的应用程序也是多种多样,有些是可以以计划任务方式运行的小的任务,也有一些运行时间无法确定的程序。我们目前的策略是实现一个批量队列并期望这种调度方式可以帮助我们发现一种处理需要长时间运行的程序的方式。起初我们计划使用 OpenPBS,因为它已经存在于FreeBSD的ports中,而且是一个开源程序。然而不幸的是,我们发现OpenPBS在FreeBSD上有很严重的稳定性问题。就在我们准备好放弃OpenPBS的时候,SUN将SGE作为开源软件发布出来。FreeBSD并不在SGE的初始支持列表中,但是我们通过在邮件列表中的一些补丁程序将SGE移植到FreeBSD上,并且这部分源码也被返还到SGE的源码树中。
3.9 安全
对于绝大多数的群集来说,把它作为一个单一的系统来对待是最实际的安全策略。这样,对于那些和Internet并不直接相连的节点来说,就像 Fellowship上的那些节点,多有的漏洞都是本地的。这就意味着,对于一个给定的群集,它的安全策略是一个本地问题。对于有节点和Internet 相连的群集,安全管理就变得比较复杂,因为每一个节点上的漏洞都是一个可能的远程攻击对象。这种情况下,也有必要采取行动来保证已经被攻击者控制的节点不会危及其余的节点以及整个系统。在群集系统内部使用加密的通讯协议是一个针对这种情况的选项,但是要牢记加密协议对群集的性能影响。
一个例外的情形是群集本身就采取多层安全策略。我们对对这种系统有兴趣,但是目前为止还没有认真的调研。
我们的选择是将整个Fellowship从外围网络中保护起来。采取的主要措施包括,保持核心系统的持续更新,所有的通讯要采用加密的通讯协议,如SSH。在群集内部,我们鼓励使用SSH连接到各个节点,但同时也允许RSH连接。SGE的安装使用了基于PKI的用户验证体系。我们发现这一点是必需的,因为 SGE的缺省权限模式比RSH还要糟糕,它甚至不要求对低数字端口的保护。出于性能方面的考虑,节点间通讯是没有加密的。
3.10 系统监测
系统监测工具的使用可以帮助群集更稳定的运行。大多数常用的监测工具也适用于群集,比如Nagios和Big Sister。但有些类型的工具并不适用于群集,比如那种为每个节点发送常规email类型的。那样的话,即使少数几个节点产生的email也是管理员没有时间阅读的。除了标准的监测工具,也有一些专门针对群集的工具,比如Ganglia Cluster Monitor。大部分的任务调度程序也都包含监测功能。
我们在目前在Fellowship上运行的是Ganglia Cluster Monitor系统,核心系统上运行一些定期执行的脚本。GCM以前曾被移植到FreeBSD上,但我们还是创建了一个FreeBSD的port,让它的安装更容易,也更具BSD风格。GCM的一个主要的优势在。它不需要任何额外的配置就可以添加节点,他们会以组播的方式被自动发现。我们也考虑过使用 Nagios来监控节点,但是还未能成功部署它。监测也是fellowship上一个需要改进的领域。曾有一次重启后发生了硬盘故障,但任何人都没有发现,因为FreeBSD无盘系统的缺省行为让系统可以继续启动。节点可以继续工作是个不错的消息,但是我们惊奇地发现一些机器使用的是基于内存的非常小的 /tmp目录,而不是36+GB、基于磁盘的/tmp目录。
3.11 系统的物理管理
每个系统管理员都会发现他们在某一个时间需要通过系统的物理控制台来访问或者需要通过电源开关来重启系统。对于只有少数节点的系统,为每个系统加装显示器或者使用KVM系统,手工控制电源开关是一个合理的选择。对于一个大的群集系统,安装串行终端服务器和远程电源控制器来进行远程控制则是一个更合理的选择。
在Fellowship 的架构里,我们对远程管理是相当重视的。群集系统位于我们有权限控制的数据中心里,这也让物理访问相当麻烦。另外,主架构师和管理员都住在离这个数据中心 1000英里外的地方,这也让直接的物理访问更加困难。因此,我们为每个节点都做了可以远程访问的配置,包括控制台和电源。这可以让我们可以任意地重启任何系统,极大地帮助了我们进行系统回复和错误诊断。这样不能解决所有的问题,但是绝大部分都可以。我们成功地诊断了由于网络资源耗尽引起的重启,但对于 RAID控制卡硬件故障引起的宕机却无能为力。对于BIOS控制台访问功能也是成败参半:在Intel Xeon系统上它工作良好,但是Tyan PIII主板在BIOS重定向功能启用的时候就会无法启动。这两种情况下,我们都可以访问FreeBSD的控制台这一非常有用的功能。
3.12 外形因素(form factor)
系统形式的选择大体上就是放置在平台上的桌面系统和放在机柜上的服务器系统之间的选择。对于小型的群集来说,机架是一个更常见的选择,因为他们价格相对便宜,而且不大可能拥有一个冷却系统;不利之处在于,他们需要占用更大的空间,电缆线/网线管理的缺乏导致维护更加困难,而且看起来也不大漂亮。另外,大部分的这些系统违反了地震安全管理规范。
机架系统一般会更昂贵一些,因为他们的生产数量要少得多,同时也是服务器市场上的高利润产品。另外,机架或者橱柜的成本也比金属架高。作为高消费的回报,机架系统带来的是高密度,整合的线缆管理和更好的审美享受。
但是高密度是一把双刃剑。低端的机架经常是设计很差,测试也不足。狭窄的服务器槽以及糟糕的布线容易引起系统过热。同时,单个机架就可能产生很大的热量。我们估计,Fellowship的Xeon机架前后端的温差会有20-30度,尽管它们都位于温控良好的地下数据中心。每个机架的电能消耗峰值都可以达到 6000W。
机架系统还有一个很小的问题是橱柜式和开放的telco风格的机架之间的选择。橱柜看起来更加精致,理论上可以随意移动;它的缺点是成本进一步增加,空间的缺乏会让安装和调试服务器更加困难,空气流通困难也会更易于产生过热现象。Telco机架看上去没那么整齐,一般也是固定在地板上的,但是他们布线容易,空气流通也更顺畅。Fellowship使用的是带门的垂直式线缆管理,在没有橱柜的情况下看上去也不错。
Fellowship 的预期容量也让我们毫不犹豫地选择了机架配置。我们计划从项目开始到结束至少配备300颗CPU,使用常规的机柜的话将会占用过多的空间。我们的机架中唯一工作的不太好的地方就是它的六英寸宽的垂直线缆槽有时会显得非常拥挤。等下一个财政年度我们采购第二行机架时将会采用十英寸宽的线槽。
4. 经验教训
我们从中吸取的最大的经验就是硬件损耗是一个实实在在的问题。虽然我们没有遇到任何难以追踪的稳定性问题,但是几乎每次整栋楼断电时,不管是计划中的还是计划外的,我们都会失去至少一台机器。这也让我们认识到拥有一个能够快速修复系统的供应商是非常重要的。节点宕机比我们当初预计的要更加常见这一事实也意味着整齐的布线比我们当初想象的还要关键。当时的部署中我们为了节约成本而将各个节点直接连接到了交换机上,从而造成很多网线连接松垮,在移除和重新安装节点时造成了很多困难。下一年当我们将群集扩充到第二行机架时,我们计划在每个机架顶端放置一个面板,然后从这个面板连接到交换机旁的面板上。
我们也认识到,虽然大部分的HPC软件在FreeBSD上运行良好,但是HPC社区强烈的相信这个世界是一个Linux机。当问题出现时,常常难以断定是由于代码在FreeBSD的测试不足还是别的什么原因。我们希望更多的FreeBSD用户会考虑使用FreeBSD运行群集系统。
系统的自动化比我们当初设想的还要重要。比如说,为电力中断做准备而关闭系统可以远程完成,但是现在的系统需要我们登录到所有的20个电源控制器上。目前我们正在想办法将这个工作自动化,同时也让节点在外部电源中断时自动关闭。
5.结论以及未来方向
目前Fellowship工作良好。但是仍然有可以改进的地方,尤其是在系统管理自动化和计划调度方面。
我们已经制定了一个改良系统的计划,但是还没有开始替换旧的系统,所以无法断言这个计划的实际工作情况。很明显,到某个时间点后,节点的价值将会比它消耗的能量还要小,但我们还不知道这个时间点什么时候会到来。对FLOPS/Watt比值的测量将会有助于决定这个时间点。我们也不知道将来是否全体系统都会开始宕机或者是他们在一个很长的时间段里慢慢死掉。
另一个我们需要改进的地方关于计划调度。我们需要更好地处理那些用户清楚地知道运行时间,而又无法融入到目前的批量队列模型中的任务。有时一些用户的任务需要运行一周或者一个月,所以这是一个相对紧急的问题。我们目前正在申请内部资金来进一步探讨这个问题。
另外一个感兴趣的方面是所谓的“按需群集(cluster-on-demand)”模式,它可以让我们在不同的时间以不同的方式使用群集系统。一种可能是创建一个Emulab子群集,让它在没有用于网络仿真的时候来进行运算。
FreeBSD上的GFS式的分布式文件系统和BProc式的分布式进程模型是另外一个我们想要进一步探索的领域。目前Linux在这方面已经做了大量的工作,但是面向FreeBSD的几乎没有。
目前我们正在开发一个更高层的编程工具箱对一些具体的应用程序提供支持,比如用于计算流体动力学模型的Mesh Generation。同时也在部署Globus工具箱,它可以让我们的用户运行一些需要在不同的计算资源上(包括Fellowship, Aerospace的其他群集和一些SMP系统,像是SGI Origins)完成的应用程序。这样的应用程序可以用GridRPC之类的工具来开发。
作为一个中期计划,我们将迁移至FreeBSD 5.x系统以提高SMP的性能和对多线程功能的支持。即使时仅对多线程的支持,这对我们来说也是非常重要的一步。这个过程中有一些有很大的挑战需要克服。其中最重大的一个就是将我们的网络启动基础设施升级到源于NetBSD的rc.d启动脚本【Mewburn】和GEOM磁盘子系统【Kamp】。
目前Fellowship运行一系列不同类型的任务,用于对各种不同的空间系统做出决策。我们认为FreeBSD工作良好,为我们的工作提供了坚实的基础,对HPC的支持也不错。我们鼓励其他的用户考虑使用FreeBSD作为他们的HPC群集的基础。
致谢:
我们想要对GPS和STSS程序办公室的支持表示感谢。Aerospace计算机系统部门也为我们提供了很大帮助。同时,我们也想说,没有管理成本的资金支持,就没有今天的Fellowship。
参考资料:
Becker
Donald J. Becker, Thomas Sterling, Daniel Savarese, John E. Dorband, Udaya A. Ranawak, Charles V. Packer, Beowulf: A Parallel Workstation for Scientific Computation Proceedings, International Conference on Parallel Processing, 1995.
Moore
Justin Moore, David Irwin, Laura Grit, Sara Sprenkle, and Jeff Chase. Managing Mixed-Use Clusters with Cluster-on-Demand. Department of Computer Science. Duke University.
http://issg.cs.duke.edu/cod-arch.pdf
Kamp
Kamp, Poul-Henning. geom(4). GEOM - modular disk I/O request transformation framework. FreeBSD Kernel Interfaces Manual FreeBSD 5.1.
Perlstein
Perlstein, Alfred. FreeBSD Jumpstart Guide.
http://www.freebsd.org/doc/en_US.ISO8859-1/articles/pxe/
Mewburn
Mewburn, Luke. The Design and Implemenation of the NetBSD rc.d system.
http://www.mewburn.net/luke/papers/rc.d.pdf
MPI
Message Passing Interface Forum. MPI: A Message-Passing Interface Standard.
http://www.mpi-forum.org/docs/mpi-11.ps
SGI
Silicon Graphics, Inc. Energy Department';s Blue Mountain Supercomputer Achieves Record-Breaking Run.
http://www.sgi.com/newsroom/press_releases/2000/may/blue_mountain.html
Jeong
Garrett Jeong, David Moffett. Welcome to ACME - The Advanced Computer Matrix for Engineering.
http://acme.ecn.purdue.edu/
Schweitzer
A. Schweitzer. The Klingon bird of Prey PC cluster.
http://phoenix.physast.uga.edu/klingon/
SciClone
The College of William and Mary. SciClone Cluster Project.
http://www.compsci.wm.edu/SciClone/
RFC1918
Y. Rekhter, B. Moskowitz, D. Karrenberg, G. J. de Groot, E. Lear. Address Allocation for Private Internets.
RFC1178
D. Libes. Choosing a Name for Your Computer.
Tolkien
J.R.R. Tolkien. The Lord of the Rings 1955.
White
B. White et al. An Integrated Experimental Environment for Distributed Systems and Networks. In 5th Symposium on Operating Systems Design and Implementation, December 2002.
Seymour
Seymour, K., Nakada, H., Matsuoka, S., Dongarra, J., Lee, C., Casanova, H., An Overview of GridRPC: A Remote Procedure Call API for Grid Computing. 3rd International Workshop on Grid Computing, November, 2002. |
|