Linux高 性能 集群 - 资源管理和系统管理 作者:金戈 来源: 类别:linux集群技术 日期:2004.03.24 今日/总浏览: 1/161 本文是Linux高性能集群系列文章的第五部分。这一部分首先介绍集群系统" name="description" />

Linux高性能集群 - 资源管理和系统管理

发表于:2007-07-04来源:作者:点击数: 标签:
http://www.leftworld.net/wenzhang/show.php?id=541 MI LY: 宋体"> Linux高 性能 集群 - 资源管理和系统管理 作者:金戈 来源: 类别:linux集群技术 日期:2004.03.24 今日/总浏览: 1/161 本文是Linux高性能集群系列文章的第五部分。这一部分首先介绍集群系统

http://www.leftworld.net/wenzhang/show.php?id=541


MILY: 宋体">Linux高性能集群 - 资源管理和系统管理
作者:金戈  来源:  类别:linux集群技术  日期:2004.03.24  今日/总浏览: 1/161

本文是Linux高性能集群系列文章的第五部分。这一部分首先介绍集群系统中的资源管理主要任务和系统管理主要任务,然后列举并比较了几种常用的资源管理软件和系统管理软件。

1 集群作业管理

从用户角度看,集群系统就好像一台服务器或者PC。很多用户可以同时使用这个系统。但是当太多的用户使用集群系统时,系统性能会变得很差。资源管理就是管理用户提交的作业,合理给各个作业分配资源从而确保充分利用集群系统计算能力并尽可能快的得到运算结果。简单的说,集群资源由实现如下几个部分:
资源管理器:为了确保分配给作业合适的资源,集群资源管理需要维护一个数据库。这个数据库记录了集群系统中各种资源的属性和状态、所有用户提交的请求和正在运行的作业。策略管理器根据这些数据和指定的调度策略生成优先级列表。资源管理器根据这个优先级列表调度作业。资源管理器还应该具有资源预留能力。这样不仅可以保留强大的资源给需要的作业,而且可以预留一定的冗余资源以应付集群中的结点失效和突发的计算。
作业调度策略管理器:策略管理器根据资源管理器得到各个结点上的资源状况和系统的作业信息生成一个优先级列表。这个列表告诉资源管理器何时在哪些结点上运行哪个作业。策略管理器不仅要提供一个复杂的参数集合去定义计算环境和作业,而且要为这个定义提供简捷灵活的表达方式以允许系统管理员实现策略驱动的资源调度。

2 Beowulf集群中的作业管理软件

有很多种选择去管理集群系统中的资源。其中PBS资源管理器和Maui作业调度器最适合集群系统。

2.1 PBS

PBS(Portable Batch System)是由NASA开发的灵活的批处理系统。它被用于集群系统、超级计算机和大规模并行系统。PBS主要有如下特征:
易用性:为所有的资源提供统一的接口,易于配置以满足不同系统的需求,灵活的作业调度器允许不同系统采用自己的调度策略。
移植性:符合POSIX 1003.2标准,可以用于shell和批处理等各种环境。
适配性:可以适配与各种管理策略,并提供可扩展的认证和安全模型。支持广域网上的负载的动态分发和建立在多个物理位置不同的实体上的虚拟组织。
灵活性:支持交互和批处理作业。

OpenPBS(http://www.OpenPBS.org/)是PBS的Open Source的实现。商业版本的PBS可以参照:http://www.pbspro.com/

2.2 Maui

Maui是一个高级的作业调度器。它采用积极的调度策略优化资源的利用和减少作业的响应时间。Maui的资源和负载管理允许高级的参数配置:作业优先级(Job Priority)、调度和分配(Scheduling and Allocation)、公平性和公平共享(Fairness and Fairshare)和预留策略(Reservation Policy)。Maui的QoS机制允许资源和服务的直接传递、策略解除(Policy Exemption)和指定特征的受限访问。Maui采用高级的资源预留架构可以保证精确控制资源何时、何地、被谁、怎样使用。Maui的预留架构完全支持非入侵式的元调度。

Maui的设计得益于世界最大的高性能计算中心的经验。Maui本身也提供测试工具和模拟器用于估计和调节系统性能。

Maui需要资源管理器与其配合使用。我们可以把Maui想象为PBS中的一个插入部件。

更多Maui的信息可以访问:http://www.supercluster.org

3 集群系统管理

从系统组成角度说,集群系统是由多台计算机组成的超级计算机。但是从最终用户看来,集群系统是一台计算机,也就是说,集群系统的构成对用户是透明的。所以集群系统的管理的目的就是让集群系统象一台计算机一样利于管理。归纳起来,集群系统管理一般完成如下任务:

3.1 资源管理

简单地说,资源管理就是分配系统的资源和监控系统资源的使用状态。这里的资源是个很广泛的概念,各种硬件设备、数据和程序都可以看成资源:如CPU、存储、网卡,甚至系统的事件和log。

3.2 事件服务

事件(Event)就是系统的状态的一次变化。如"CPU的利用率超过90%"就可以理解为一次事件。简单的说,事件服务就是事件通知服务,也就是当一次事件发生时,通知对这类事件感兴趣的个体这个事件发生了。事件服务可以分为Push(也称为Subscribe-Publish)和Pull方式。系统管理员还应该能够通过事件服务设置系统对事件的自动响应。

3.3 分布式命令和文件

分布式命令和文件是指让命令和文件操作同时在整个集群结点或指定的一组结点上并行执行。

分布式命令功能通常通过分布式的Shell来提供。这种Shell一般叫做dsh(distributed shell)或 psh ( parallel shell)。你可以通过rsh或ssh来实现分布式Shell。

分布式文件主要用于指集群中配置文件的同步。集群系统实际上是由多个结点组成,所以对集群系统的一个配置需要发布到每个结点(或一组结点)。比如,需要配置每个结点上的Apache都支持CGI,就需要把/etc/httpd下的配置文件发布到每个结点的/etc/httpd中。简单地说,集群系统地配置管理就是把一个或多个配置文件发布到指定的结点上。有很多开放源码的工具可以帮助完成集群系统的分布式文件功能,如rdist和cfengine。

3.4 监控和诊断

对持续运行的集群系统而言,当系统正常运行时,你需要一些工具监控系统各部分的运行状态,如系统进程、CPU利用率和内存利用率等。在普通的Unix系统上,你可以简单的用ps和top实现这些功能。但是在集群系统中,你确实需要一些特殊工具,而且最好系统的监控可以支持多种网络管理协议,如SNMP和WBEM。当集群系统工作不正常时,你则需要另外一些工具来协助系统诊断。如当系统某个不服务时,你可能需要用ping诊断是不是网络出了问题。而当时多个结点服务时,你则需要并发的ping来诊断是不是网络错误。

3.5 硬件控制

PC机上很简单的管理功能对于集群系统而言可能会很难做到。比如让一组结点重启,就很难手工完成。所以集群系统需要一些特殊的硬件设备完成这些功能。下面是几个需要硬件支持特殊管理功能:
远程电源管理:主要是远程关闭、打开和重启结点与查询结点电源状态。在IBM eServer Cluster 1300中采用ASM。
远程控制台:当远程结点出现问题或出现一些特殊的软件需要时,需要直接登录到结点上完成操作。KVM Switch可以满足这种需求,但是当结点很多时,KVM Switch就会很复杂。而且KVM Switch需要手工切换,不能通过软件方法使用。Terminal Server克服了KVM Switch的缺点。Terminal Server与结点的串口相连,并把串口虚拟成管理结点上终端设备,当然这需要对结点的操作系统做些相应的配置。

3.6 系统安装

集群系统的安装主要是指在各个结点上安装操作系统、文件系统、并行程序运行库、作业管理软件和系统管理软件等。它是集群系统投入应用的前提,所以集群系统的安装是一件非常重要的任务。一般集群系统由几十台,甚至上百上千台计算机组成,显然手工安装系统几乎是不可能的。一般集群系统的安装的机制是:
网络启动:设置需要的安装的结点网络启动,然后管理结点远程重启需要安装的结点。网络启动的结点启动后从启动服务器获得一个小的操作系统内核。网络启动一般采用Intel的PXE(Pre-Execution Environment)标准。 PXELinux是支持PXE的网络启动服务器。它可以在网络启动的结点启动一个小的Linux核心并运行指定的Init程序。由Init程序负责后续的安装。
网络安装:这个操作系统内核负责从安装服务器(通常是一个文件服务器)上取得安装软件包或系统镜像并在本地实施系统安装。有多种Linux工具可以完成基于网络的系统安装。这些工具中的典型代表是:KickStart、ALICE (Automatic Linux Installation and Configuration Environment)、SIS(System Install Suite)和PartImage。这些工具可以分为如下几类:
a. 基于Script的安装:这种安装方式中,安装过程由安装脚本(Script)控制,可以通过修改安装脚本来配置安装过程。这种安装方式中,安装服务器实际上是一个文件服务器,它向结点提供要安装的软件包。除了软件包不是来自本地外,这种安装方法和本地安装并没有太大的区别,本地安装的各个步骤(配置硬件、安装软件包、配置系统等)它都要经过。KickStart属于这中安装方法。基于Script的安装比较灵活,但是它是操作系统依赖型的。象KickStart只支持Redhat Linux。
b. 基于Imaging的安装:和基于Script的安装不同,基于Imaging的安装并不需要经过本地安装的各个步骤。它只需要把存储在文件服务上的需要安装的系统映象(Image)拷贝到本地的硬盘上。这个系统映象来源于一个已经安装和配置好的样机。Imaging的安装方式是独立于操作系统,但是它依赖于网络启动的操作系统内核支持的文件系统。Imaging的很大缺点是很难提供独立于操作系统的配置方法。PartImage属于Imaging安装方法。而SIS是Script和Imaging混合型的安装方式。SIS利用Linux的chroot命令在安装服务器的一个文件目录下安装一个虚拟的操作系统映象。同时SIS支持用户提供Shell脚本完成安装后的配置。
c. 基于Cloning的安装:和Imaging安装方式相同的是,Cloning安装也采用系统映象。但是Cloning中的系统映象是样机上硬盘分区的Clone。因此,Cloning安装不需要识别系统镜像中的文件系统类型。所以它是独立于文件系统的,它只依赖于操作系统内核支持的硬盘设备类型(IDE或SCSI)。和Imaging一样,Cloning的很大缺点是很难提供独立于操作系统的配置方法。而且相对于Imaging而言,Cloning效率更低。你可以简单的用dd命令实现Clone。

下表归纳了几种安装工具的特点:
安装工具    安装方法    支持的系统    支持的网络协议    
KickStart    Script    Redhat Linux    NFS、FTP    
SIS    Script和Imaging混合    Redhat Linux
SuSE Linux
Turbo Linux
…    rsync    
PartImage    Imaging    EXT2、FAT、NTFS、HPFS…    私有协议    

3.7 域管理

你可以简单的把集群系统的域管理理解为结点管理,它主要包括如下简单的功能:
加入、删除和列举集群系统中的结点
对集群中的结点分组

实际上,我们也把作业管理纳入集群系统管理的任务。但是相对于其他系统管理任务而言,作业管理在集群系统中具有更重要的作用,而且通常的集群系统管理软件也不直接实现作业管理功能。所以我们把作业管理作为集群系统一个重要的软件部分,而不是集群系统管理的一项任务。

4 几种集群系统管理软件

集群系统管理软件和集群系统一样形形色色、多种多样。下面简要介绍几种集群系统管理软件并比较它们实现的功能。

4.1 IBM CSM

IBM CSM(Cluster Systems Management )是IBM eServer Cluster 1300上的系统管理软件。IBM的Linux集群战略的一部分就是把运行在RS/6000 SP平台上的PSSP软件移植到基于xSeries的Linux集群系统上。CSM大部分功能来源于SP平台,但是它也集成了WebSM 2000、xSeries、开放源码工具和其他技术。CSM是一款功能很全面的管理工具,而且还在不断的发展中。

4.2 XCAT

XCAT是用于IBM eServer Cluster 1300上的系统管理软件。它由Egan Ford开发。它基本上是由shell脚本写成,相当简捷。但是它实现了集群系统管理大部分的内容,是个非常出色的管理软件。

4.3 Mon

Mon在Linux平台上开发,但是也以运行在Solaris上而出名。Mon的服务器和客户都是基于perl开发的,所以很容易移植到其他UNIX和类UNIX平台。

下表比较了以上三种集群系统管理软件:
项目    CSM    XCAT    Mon    
支持的集群系统    IBM eServer Cluster 1300    IBM eServer Cluster 1300    不特定于某个集群系统    
支持的操作系统    Redhat、SuSE    Redhat,结点可以采用Imaging和Cloning安装其他操作系统,甚至于Windows    在Linux上开发,但是以运行在Solaris而著名。很容易移植到其他Unix和非Unix操作系统上    
资源管理    提供统一的、可扩展的,全面的资源管理,但是由于强大而使用起来很复杂。    基本没有    基本没有    
事件服务    提供事件订阅发布机制,并预先定义了很多系统事件和对事件的响应    将来会于Mon集成以完成事件服务    支持    
配置管理    支持    无    无    
监控和诊断    支持分布式Shell(dsh)、支持SNMP    支持并发Shell(psh)、并发ping(pping)    支持SNMP    
硬件控制     远程电源管理(rpower)远程控制台(rconsole)    远程电源管理(rpower) 远程控制台(rcon、wcon)    无    
系统安装    支持KickStart和SIS 支持PXE    支持KickStart、Imaging和Cloning 支持PXE和etherboot    无    
域管理    全面    基本没有    基本没有    
集成性    除了必须的开放源码软件包,不与任何其他软件集成。但是底层资源管理和事件服务提供编程接口,集成很方便。上层可以通过命令调用集成。    自动安装PBS、Maui、Myrinet和MPI。将来会支持 SgridEngine Scheduler    基本没有,应该可以通过命令行集成    
易用性    提供强大命令行工具和简单的GUI工具    命令行工具,将来会和Ganglia集成提供一定的GUI    提供命令行和基于Web的工具    

5 参考文献
Linux HPC Cluster Installation, IBM Redbooks, http://www.redbooks.ibm.com/
IBM eServer xSeries Clustering Planning Guide, IBM Redbooks, http://www.redbooks.ibm.com/
Linux Clustering with CSM & GPFS, IBM Redbooks, http://www.redbooks.ibm.com/
Cluster Computing White Paper, Mark Baker, University of Portsmouth, UK
Beowulf HOW-TO, http://www.beowulf-underground.org
Beowulf Introduction and Overview, http://www.beowulf.org
The Mosix Howto, http://www.mosix.org
OSCAR: A packaged Cluster software stack for High Performance Computing, http://www.openclutergroup.org/
Linux-HA Heartbeat System Design, http://www.linux-ha.org
xCAT HOW-TO, http://www.x-CAT.org
MPICH, http://www.mcs.anl.gov/mpi/mpich.
PVM, http://www.epm.ornl.gov/pvm/pvm_home.html
OpenPBS,http://www.openpbs.org/
Maui, http://www.supercluster.org/
Condor Manual, Condor Team, University of Wisconsin-Madison
GFS, http://globalfilesystem.org/
Intermezzo, http://inter-mezzo.org/
Coda, http://www.coda.cs.cmu.edu/

6 关于作者

金戈,IBM软件工程师,在IBM中国开发中心主持Linux集群系统开发工作。你可以通过 jinge@cn.ibm.com 和他联系。

OpenPBS源码

    OpenPBS(http://www.OpenPBS.org/)是PBS(Portable Batch System)的Open Source的实现。商业版本的PBS可以参照:http://www.pbspro.com/
    PBS是一种可伸缩性的任务队列和工作管理系统,最开始它是为NASA开发的。它是在网络的、多平台的unix系统环境下工作的,包括异构集群工作站、超级计算机以及大规模的并行系统。

javascript:window.open(this.src);" style="CURSOR: pointer" onload="return imgzoom(this,550)">下载OpenPBS源码

HowTo steps


The following steps are what we use to install PBS from scratch on our systems. Please send corrections and additions to Ole.H.Nielsen@fysik.dtu.dk.


Ensure that tcl8.0 and tk8.0 are installed on the system. Look into the PBS docs to find out about these packages. The homepage is at
http://www.scriptics.com/products/tcltk/. Get Linux RPMs from your favorite distribution, or build it yourself on other UNIXes.
If you installed the PBS binary RPMs on Linux, skip to step 4.

Configure PBS for your choice of spool-directory and the central server machine (named "zeise" in our examples):
./configure --set-server-home=/var/spool/PBS --set-default-server=zeise

On Compaq Tru64 UNIX make sure that you use the Compaq C-compiler in stead of the GNU gcc by doing "setenv CC cc". You should add these flags to the above configure command: --set-cflags="-g3 -O2". It is also important that the /var/spool/PBS does not include any soft-links, such as /var -> /usr/var, since this triggers a bug in the PBS code.
If you compiled PBS for a different architecture before, make sure to clean up before running configure:

  gmake distclean


Run a GNU-compatible make in order to build PBS.
On AIX 4.1.5 edit src/tools/Makefile to add a library: LIBS = -lld

On Compaq Tru64 UNIX use the native Compaq C-compiler:

gmake CC=cc

The default CFLAGS are "-g -O2", but the Compaq compiler requires "-g3 -O2" for optimization. Set this with:
./configure (flags) --set-cflags="-g3 -O2"

After the make has completed, install the PBS files as the root superuser:
gmake install


Create the "nodes" file in the central server's (zeise) directory /var/spool/PBS/server_priv containing hostnames, see the PBS 2.2 Admin Guide p.8 (Sec. 2.2 "Installation Overview" point 8.). Substitute the spool-directory name /var/spool/PBS by your own choice (the Linux RPM uses /var/spool/pbs). Check the file /var/spool/PBS/pbs_environment and ensure that important environment variables (such as the TZ timezone variable) have been included by the installation process. Add any required variables in this file.

Initialize the PBS server daemon and scheduler:
/usr/local/sbin/pbs_server -t create
/usr/local/sbin/pbs_sched

The "-t create" should only be executed once, at the time of installation !!
The pbs_server and pbs_sched should be started at boot time: On Linux this is done automatically by /etc/rc.d/init.d/pbs. Otherwise use your UNIX's standard method (e.g. /etc/rc.local) to run the following commands at boot time:

/usr/local/sbin/pbs_server -a true
/usr/local/sbin/pbs_sched

The "-a true" sets the scheduling attribute to True, so that jobs may start running.

Create queues using the "qmgr" command, see the manual page for "pbs_server_attributes" and "pbs_queue_attributes": List the server configuration by the print server command. The output can be used as input to qmgr, so this is a way to make a backup of your server setup. You may stick the output of qmgr (for example, you may use the setup listed below) into a file (removing the first 2 lines which are actually not valid commands). Pipe this file into qmgr like this: cat file | qmgr and everything is configured in a couple of seconds !
Our current configuration is:

# qmgr
Max open servers: 4
Qmgr: print server
#
# Create queues and set their attributes.
#
#
# Create and define queue verylong
#
create queue verylong
set queue verylong queue_type = Execution
set queue verylong Priority = 40
set queue verylong max_running = 10
set queue verylong resources_max.cput = 72:00:00
set queue verylong resources_min.cput = 12:00:01
set queue verylong resources_default.cput = 72:00:00
set queue verylong enabled = True
set queue verylong started = True
#
# Create and define queue long
#
create queue long
set queue long queue_type = Execution
set queue long Priority = 60
set queue long max_running = 10
set queue long resources_max.cput = 12:00:00
set queue long resources_min.cput = 02:00:01
set queue long resources_default.cput = 12:00:00
set queue long enabled = True
set queue long started = True
#
# Create and define queue medium
#
create queue medium
set queue medium queue_type = Execution
set queue medium Priority = 80
set queue medium max_running = 10
set queue medium resources_max.cput = 02:00:00
set queue medium resources_min.cput = 00:20:01
set queue medium resources_default.cput = 02:00:00
set queue medium enabled = True
set queue medium started = True
#
# Create and define queue small
#
create queue small
set queue small queue_type = Execution
set queue small Priority = 100
set queue small max_running = 10
set queue small resources_max.cput = 00:20:00
set queue small resources_default.cput = 00:20:00
set queue small enabled = True
set queue small started = True                  
#
# Create and define queue default
#
create queue default
set queue default queue_type = Route
set queue default max_running = 10
set queue default route_destinations = small
set queue default route_destinations += medium
set queue default route_destinations += long
set queue default route_destinations += verylong
set queue default enabled = True
set queue default started = True
#
# Set server attributes.
#
set server scheduling = True
set server max_user_run = 6
set server acl_host_enable = True
set server acl_hosts = *.fysik.dtu.dk
set server acl_hosts = *.alpha.fysik.dtu.dk
set server default_queue = default
set server log_events = 63
set server mail_from = adm
set server query_other_jobs = True
set server resources_default.cput = 01:00:00
set server resources_default.neednodes = 1
set server resources_default.nodect = 1
set server resources_default.nodes = 1
set server scheduler_iteration = 60
set server default_node = 1#shared    


Install the PBS software on the client nodes, repeating steps 1-3 above.

Configure the PBS nodes so that they know the server: Check that the file /var/spool/PBS/server_name contains the name of the PBS server (zeise in this example), and edit it if appropriate. Also make sure that this hostname resolves correctly (with or without the domain-name), otherwise the pbs_server may refuse connections from the qmgr command.
Create the file /var/spool/PBS/mom_priv/config on all PBS nodes (server and clients) with the contents:

# The central server must be listed:
$clienthost zeise

where the correct servername must replace "zeise". You may add other relevant lines as recommended in the manual, for example for restricting access and for logging:
$logevent 0x1ff
$restricted *.your.domain.name

(list the domain names that you want to give access).
For maintenance of the configuration file, we use rdist to duplicate /var/spool/PBS/mom_priv/config from the server to all PBS nodes.


Start the MOM mini-servers on both the server and the client nodes:
/usr/local/sbin/pbs_mom

or "/etc/rc.d/init.d/pbs start" on Linux. Make sure that MOM is started at boot time. See discussion under point 5.
On Compaq Tru64 UNIX 4.0E+F there may be a problem with starting pbs_mom too soon. Some network problem makes pbs_mom report errors in an infinite loop, which fills up the logfiles' filesystem within a short time ! Several people told me that they don't have this problem, so it's not understood at present.
The following section is only relevant if you have this problem on Tru64 UNIX.

On Tru64 UNIX start pbs_mom from the last entry in /etc/inittab:

# Portable Batch System batch execution mini-server
pbsmom::once:/etc/rc.pbs > /dev/console 2>&1

The file /etc/rc.pbs delays the startup of pbs_mom:
#!/bin/sh
#
# Portable Batch System (PBS) startup
#
# On Digital UNIX, pbs_mom fills up the mom_logs directory
# within minutes after reboot.  Try to sleep at startup
# in order to avoid this.
PBSDIR=/usr/local/sbin
if [ -x $/pbs_mom ]; then
    echo PBS startup.
    # Sleep for a while
    sleep 120
    $/pbs_mom       # MOM
    echo Done.
else
    echo Could not execute PBS commands !
fi      


Queues defined above do not work until you start them:
qstart  default small medium long verylong
qenable default small medium long verylong

This needs to be done only once and for all, at the time when you install PBS.

Make sure that the PBS server has all nodes correctly defined. Use the pbsnodes -a command to list all nodes.
Add nodes using the qmgr command:

# qmgr
Max open servers: 4
Qmgr: create node node99 properties=ev67

where the node-name is node99 with the properties=ev67. Alternatively, you may simply list the nodes in the file /var/spool/PBS/server_priv/nodes:
server:ts ev67
node99 ev67

The :ts indicates a time-shared node; nodes without :ts are cluster nodes where batch jobs may execute. The second column lists the properties that you associate with the node. Restart the pbs_server after editing manually the nodes file.

After you first setup your system, to get the jobs to actually run you need to set the server scheduling attribute to true. This will normally be done for you at boot time (see point 5 in this file), but for this first time, you will need to do this by hand using the qmgr command:
# qmgr
Max open servers: 4
Qmgr: set server scheduling=true


原文转自:http://www.ltesting.net