关于集群作业管理系统 Maui,PBS和Torque

Maui集群调度器是Moab集群套件前身,是一个开放源码的集群和超级计算机作业调度器(scheduler)。 PBS是一个用于作业分配的调度器(scheduler),其主要任务是分配批作业计算任务到现有的计算资源上。 以下版本的PBS系统目前可用: OpenPBS:没有技术支持的原始开源版本; PBSPro(PBS专业版):由Altair Engineering发行和支持的商业版本; Torque:衍生的OpenPBS,由Cluster Resources Inc.发展,支持和维护

2009年6月28日星期日

TORQUE与Maui的安装、设置及使用(3)

作业运行

系统利用TORQUE 和Maui 进行资源和作业管理, 所有需要运行的作业无论是用于程序调试还是业务计算均必须通过qsub 命令提交,提交后可以利用TORQUE 和Maui 的相关命令查询作业状态等。为了利用qsub 提交作业,用户需针对此作业创建提交脚本,在脚本里面设定需要运行的作业参数等。在此分别给出串行和并行的简单脚本,用户可以修改此脚本以适用于自己的作业,如需要更加高级的功能请参考TORQUE 手册。

1)串行作业
对于串行程序,用户可编写命名为serial job.pbs(此脚本名可以按照用户喜好命名)的串行作业脚本,其内容如下:

#!/bin/sh
#PBS -N job name
#PBS -o job.log
#PBS -e job.err
#PBS -q dque
cd yourworkdir
echo Running on hosts `hostname`
echo Time is `date`
echo Directory is $PWD
echo This job runs on the following nodes:
cat $PBS NODEFILE
echo This job has allocated 1 node
./yourprog


注意1,TORQUE 建立在PBS 作业管理系统之上,PBS 的参数需在作业提交脚本中利用#PBS 设置。上述脚本利用qsub 命令提交后,表示进入yourworkdir 目录后,提交到dque 队列,其作业名为job name,标准输出和错误输出将分别存在此目录下的job.log 和job.err 文件中。上述脚本中以#PBS 开头的几行的-N、-o、-e、-q 参数后分别设置的是这个作业的名字job name、标准输出定向到的文件名job.log、标准错误输出定向到的文件名job.err、作业使用的队列名dque。

作业脚本编写完成后,可以按照下面命令提交作业:
user@kd50:˜ /work$ qsub ser job.pbs
如果成功,将有类似下面的输出:

3 7 . kd50

其中37.kd50 表示的是作业号,由两部分组成,37 表示的是作业序号,kd50 表示的是作业管理系统的主机名,也就是登录节点名,之后可以用此作业号来查询作业及终止此作业等。
1此脚本中`hostaname` 等中的是键盘左上角的反引号`,不是右侧的'


2)并行作业

与串行作业类似,对于并行作业,则需要编写类似下面脚本:

#!/bin/sh
#PBS -N job name
#PBS -o job.log
#PBS -e job.err
#PBS -q dque
#PBS -l nodes=4
cd yourworkdir
echo Time is `date`
echo Directory is $PWD
echo This job runs on the following nodes:
cat $PBS NODEFILE
NPROCS=`wc -l < $PBS NODEFILE`
echo This job has allocated $NPROCS nodes
mpiexec 􀀀machinefile $PBS NODEFILE 􀀀np $NPROCS ./yourprog

与串行程序的脚本相比, 主要不同之处在于在#PBS 开头的-l 参数后设置:nodes=所需要的进程数,另外请注意需采用mpiexec 的命令格式提交并行可执行程序。

与串行作业类似,可使用下面方式提交:
user@kd50:˜ /work$ qsub par job.pbs

3) 常用作业管理命令

与作业相关TORQUE 和Maui 常用的用户命令主要有:
• canceljob:取消已存在的作业
• checkjob:显示作业状态、资源需求、环境、限制、信任、历史、已分配资源和资源利用等
• nqs2pbs:将nqs 作业脚本转换为pbs 作业脚本
• pbsnodes:显示节点信息
• printjob:显示指定作业脚本中的作业信息
• qdel:取消指定的作业
• qhold:挂起一个作业
• qmove:将一个作业从一个队列移到另一个队列中
• qnodes:pbsnodes 的别名,显示节点信息
• qorder:交换两个作业的排队顺序
• qrls:将被挂起的作业送入准备运行的队列中
• qselect:显示符合条件的作业的作业号
• qstat:显示队列、服务节点和作业的信息
• qsub:提交作业
• showbf:显示有特殊资源需求的资源的可用性
• showq:显示已激活和空闲的作业的优先级细节
• showstart:显示空闲作业的估计开始时间
• tracejob:追踪作业信息
具体请参考TORQUE 和Maui 用户手册。

TORQUE与Maui的安装、设置及使用(2)

安装与配置作业调度软件Maui

TORQUE自带的作业调度进程 pbs sched非常简单,建议不要启动此服务,而是在服务节点上安装 Maui来进行作业调度,注意:在计算节点上无须安装 Maui。

1)服务节点上安装Maui

root@kd50# tar zxvf maui-3.2.6p20-snap.1182974819.tar.gz root@kd50# cd maui-3.2.6p20 root@kd50# ./configure –prefix=/opt/maui-3.2.6p20 –with-pbs=/opt/torque2.2.1
root@kd50# make root@kd50# make install

2)服务节点上配置Maui

修改 /usr/local/maui/maui.cfg,主要为下面几项:
SERVERHOST kd50
# primary admin must be first in list
ADMIN1 root
# Resource Manager Definition
RMCFG[KD50] TYPE=PBS@RMNMHOST@fRMTYPE[0] PBS

在 /etc/profile中设置环境变量:
TORQUE=/opt/torque−2.2.1
MAUI=/opt/maui−3.2.6p20
if [”`id −u`” −eq 0 ]; then PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:” PATH=$PATH:$TORQUE/bin:$TORQUE/sbin:$MAUI/bin:$MAUI/sbin
else
PATH=”/usr/local/bin:/usr/bin:/bin:/usr/games”
PATH=$PATH:$TORQUE/bin:$MAUI/bin
fi

source /etc/profile后启动 Maui:
root@kd50# maui
注意不要在服务节点上启动 pbs sched。


-------------------------------------------------------------------------------
《资源管理软件TORQUE 与作业调度软件Maui 的安装、设置及使用》,李会民(hmli@ustc.edu.cn)中国科学技术大学网络信息中心

TORQUE与Maui的安装、设置及使用(1)

TORQUE 和Maui 可以从http://www.clusterresources.com 上下载。以下仅是粗略配置,详细配置请参考相关手册:
• TORQUE:http://www.clusterresources.com/torquedocs21/
• Maui:http://www.clusterresources.com/products/maui/docs/mauiusers.shtml

1)服务节点安装TORQUE

这里假设服务节点的机子名为kd50,其中一个计算节点的名字为node0101。
root@kd50# tar zxvf torque-2.2.1.tar.gz
root@kd50# cd torque-2.2.1
root@kd50# ./con gure {pre x=/opt/torque-2.2.1 {with-rcp=rcp
上面–with-rcp=rcp 设置为利用rsh 协议在节点间传输文件,也可设置为–withrcp=scp 以利用scp 协议进行传输。利用rcp 或者scp 传输需要配置节点间无须密码访问,具体请参看相关文档。
root@kd50# make
root@kd50# make install


2)服务节点初始化并设置TORQUE
将TORQUE 的可执行文件所在的目录放入系统的路径中,修改/etc/profile:

TORQUE=/opt/torque-2.2.1
MAUI=/opt/maui-3.2.6p20
if [ ”`id -u`” -eq 0 ]; then
PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:”
PATH=$PATH:$TORQUE/bin:$TORQUE/sbin:$MAUI/bin:$MAUI/sbin
else
PATH=”/usr/local/bin:/usr/bin:/bin:/usr/games:$TORQUE/bin:$MAUI/bin”
PATH=$PATH:$TORQUE/bin:$MAUI/bin
fi

上面将同时设置Maui 的路径,如在这里已经设置了,并且Maui 安装路径为上面的话,后面就无需再设置Maui 的路径。

修改后使设置的环境变量生效:
source /etc/profile

将root 设置为TORQUE 的管理帐户:
root@kd50# ./torque setup root

在/var/spool/torque/server priv/nodes 中添加计算节点的机器名,类似:

kd50
node0101

如果服务节点不参与计算的话,需要将服务节点的机器名去掉。如果node0101 上有两个处理单元,就设置为node0101 np=2。
如果/var/spool/torque 下的目录spool 和undelivered 的权限不是drwxrwxrwt 的话,需要chmod 1777 spool undelivered。

创建作业队列:
root@kd50# pbs server -t create
root@kd50# qmgr

输入下面Qmgr: 后的内容,将设置一个默认队列dque:
Qmgr: create queue dque queue type=execution
Qmgr: set server default queue=dque
Qmgr: set queue dque started=true
Qmgr: set queue dque enabled=true
Qmgr: set server scheduling=true

可以通过下面的代码来检查pbs server 是否正常运行,若pbs server 没有运行,
则首先运行该程序,然后执行下面的代码:
# shutdown server
qterm -t quick
# start server
pbs server
# verify all queues are properly con gured
qstat -q
# view additional server con guration
qmgr -c 'p s'
# verify all nodes are correctly reporting
pbsnodes -a
# submit a basic job
echo ”sleep 30” j qsub
4
# verify jobs display
qstat

3) 计算节点上安装TORQUE

先在服务节点上的编译TORQUE 的目录下执行下面命令生成所需要的包:
root@kd50# make packages

该命令执行之后一共产生五个包,分别为:
• torque-package-clients-linux-i686.sh
• torque-package-devel-linux-i686.sh
• torque-package-doc-linux-i686.sh
• torque-package-mom-linux-i686.sh
• torque-package-server-linux-i686.sh

然后将这些包传送给机群中的所有计算节点并在各计算节点上执行安装,比如:
root@node0101# ./torque-package-clients-linux-i686.sh {install

4) 计算节点配置TORQUE
/var/spool/torque 是TORQUE 的配置目录, 只要在该目录下创建一个文件server name,其内容是服务节点的机器名。
对于NFS 文件共享系统来说,还必须告诉TORQUE 这种共享的用户目录,编辑/var/spool/torque/mom priv/config,其内容类似:

$pbsserver kd50 # note: hostname running pbs server
$logevent 255 # bitmap of which events to log
$usecp kd50:/home /home

其中$pbsserver 后指定服务节点的主机名,$usecp 后面的表示的共享home。

在/etc/profile 中设置环境变量:

TORQUE=/opt/torque-2.2.1
if [ ”`id -u`” -eq 0 ]; then
PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:”
PATH=$PATH:$TORQUE/bin:$TORQUE/sbin
else
PATH=”/usr/local/bin:/usr/bin:/bin:/usr/games”
PATH=$PATH:$TORQUE/bin
fi

source /etc/profile 后,可以直接运行pbs mom 启动计算节点的守护进程。

-------------------------------------------------------------------------------
《资源管理软件TORQUE 与作业调度软件Maui 的安装、设置及使用》,李会民(hmli@ustc.edu.cn)中国科学技术大学网络信息中心

2009年6月24日星期三

OpenPBS安装与使用

OpenPBS安装
1、  必须用root登录
2、  创建安装路径,一般是:/usr/local/OpenPBS
3、  cp OpenPBS安装包到安装路径并释放
4、  进入释放的目录,例如:$>OpenPBS_2_3_16\
5、  运行OpenPBS配置脚本:
$>./configure –prefix=/usr/local/OpenPBS
./configure可以配置OpenPBS的环境,-prefix是一些安装目录的前缀,例如lib等,默认是/usr/local。可以./configure –help查看所有的参数。一般默认的就可以。
6、  编译OpenPBS:在释放的目录下make.
在make的过程中可能出现如下错误:
make[4]: *** No rule to make target `', needed by `attr_atomic.o'.  Stop.
make[4]: Leaving directory `/g/pbs/OpenPBS_2_3_16/src/lib/Libattr'
make[3]: *** [all] Error 2
make[3]: Leaving directory `/g/pbs/OpenPBS_2_3_16/src/lib/Libattr'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/g/pbs/OpenPBS_2_3_16/src/lib'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/g/pbs/OpenPBS_2_3_16/src'
make: *** [all] Error 2
这需要一个补丁来解决,参见附录
7、  安装OpenPBS:编译成功后,make install
8、  创建节点(node)文件
/usr/spool/PBS/server_priv/nodes
文件内容是节点的机器名。例如
node1
node2
……
当然可以有更具体的设置. 包括机群系统中所有结点的描述,如主机名,属性和cpu的数目。结点文件的格式为:hostname [:ts] [property…] [np=NUMBER] 。
9、  建立MOM进程配置文件
在{PBS_HOME}/mom_priv目录下建立资源管理器守护进程的配置文件config。所谓{PBS_HOME}可以在安装的第一步./configure的时候指定,相关参数:
--set-server-home={YOUR_PBS_HOME},一般不用指定,用默认值就好了。默认值为/usr/spool/PBS
config文件的内容通常包括:
  $logevent0x1ff
  $clienthost server_host
其中$logevent是为了设置记录作业执行事件日志的掩码,当其值设为0x1ff时,表示记录作业运行事件的所有日志信息;server_host是PBS服务器所在的主机名。

OpenPBS启动
1.         启动MOM进程
$> /usr/local/OpenPBS/sbin/pbs_mom
 
2.      启动OpenPBS服务器
$>/usr/local/OpenPBS/sbin/pbs_server –t create
(第一次启动用户服务器时,需要“–t create”选项,以后启动不需要)
 
3.        启动调度器
$>/usr/local/OpenPBS/sbin/pbs_sched
 
(建议在$HOME/.bash_profile中加入
OPENPBSDIR=/usr/local/OpenPBS
PATH=$PATH:$OPENPBSDIR/bin: $OPENPBSDIR/sbin
 
export OPENPBSDIR PATH
 

创建队列
用qmgr创建队列,例如:
#创建队列,并命名为normal
qmgr -c "c q normal"
#设定队列的类型为Execution
qmgr -c "s q normal queue_type=Execution"
#设定该队列中任务最大运行时间为24小时(CPU时间)
qmgr -c "s q normal resources_max.cput=24:00:00"
#设定该队列中任务最小运行时间为1秒(CPU时间)
qmgr -c "s q normal resources_min.cput=1"
#设定该队列中任务默认运行时间为12分钟(CPU时间)
qmgr -c "s q normal resources_default.cput=12:00"
#enable queue
qmgr -c "s q normal enabled=true"
#start queue
qmgr -c "s q normal started=true"
#将normal队列设定为默认队列
qmgr -c "s s default_queue=normal"
 
qmgr的参数中-c代表命令行,引号(“”)中的内容是要执行的命令。
其中c是create, s是set, q是queue,所以,上述命令可以写作:
qmgr –c “set queue normal enabled=true”
……
提交任务可以用qsub,只有非root用户才可以提交任务。
 

OpenPBS Interface Library
       OpenPBS Interface Library(IFL)是OpenPBS提供的一组函数,完成OpenPBS的任务。
例如:pbs_connect,是连接服务器的函数。
       编写程序调用这些函数需要以下两个头文件:
       #include  
#include
和一个静态链接库:libpbs.a(可以在/usr/local/lib/中找到这个库)
因为该库用C编写需要,如果用C++编写程序调用这些函数,则需要:
extern “C”
下面是一个示例程序(subjob.cc),作用就是提交任务,如果成功返回该任务提交后在服务器上的任务标示,如果失败则返回错误代码:
extern "C"//C 函数
{
#include
#include
}
#include
 
int main(int argc,char** argv)
{
        int Con=pbs_connect("server”); //连结服务器”server”
        printf("Con=%d\n",Con);
        char *Ret=pbs_submit(Con,0,argv[1],0,0);//提交任务
        if (!Ret)
        {
printf("ERR=%d\n",pbs_errno);//发生错误,打印错误代码
        }
        else
        {
                printf("Ret=%s\n",Ret);//打印返回的任务标识
        }
        delete Ret;
        return 1;
}
编译该程序:
$>g++ -o subjob subjob.cc –lpbs

附录

安装OpenPBS过程中make出错
如果遇到前文提到的错误,那么通过打补丁可以解决该问题。
该补丁可以通过以下方法得到:
1.       下载:http://www.webmo.net/support/patch/pbs.patch
2.       将下面内容(=包括中的内容,不包含=)存入pbs.patch(当然,任意文件名)
======================================================================
--- /buildutils/makedepend-sh.000  Wed Nov 17 11:32:52 1999
+++ /buildutils/makedepend-sh    Thu Jul 10 13:35:43 2003
@@ -574,6 +574,12 @@
                 test "$verbose" -lt 2 && errout='2> /dev/null'
    
                 eval $CPP $arg_cc $d/$s $errout | \
+                  sed \
+                       -e '1d' \
+                       -e '/^#.*/d' \
+                       -e '/^#.*/d' \
+                       -e '/^#.*/d' \
+                       -e '/^#.*/d' | \
                   sed -n -e "s;^\# [0-9][0-9 ]*\"\(.*\)\";$f: \1;p" | \
                   grep -v "$s\$" | \
                   sed -e 's;\([^ :]*: [^ ]*\).*;\1;' \
--- /src/lib/Liblog/pbs_log.c.000  Tue Dec  4 18:38:40 2001
+++ /src/lib/Liblog/pbs_log.c    Thu Jul 10 13:39:45 2003
@@ -109,6 +109,7 @@
 
 /* Global Data */
 
+#include
 extern int errno;
 char log_buffer[LOG_BUF_SIZE];
 char log_directory[_POSIX_PATH_MAX/2];
--- /src/server/svr_connect.c.000  Tue Dec  4 18:39:23 2001
+++ /src/server/svr_connect.c    Thu Jul 10 13:43:11 2003
@@ -113,6 +113,7 @@
 
 struct connect_handle connection[PBS_NET_MAX_CONNECTIONS]; /* used by API */
 
+#include
 extern int     errno;
 
 extern int     pbs_errno;
将该文件cp到OpenPBS安装包的释放目录,打补丁:
$>patch -pl -b < pbs.patch
然后就可以正常安装了

使用IFL发生编译错误
Q:提示找不到库libpbs.a。
A:确定正确安装OpenPBS,lib搜索路径中包含libpbs.a.确定编译选项是-lpbs
 
Q:提示找不到函数,例如
undefined reference to `pbs_connect(char*)'
A:在程序中这样包含头文件:
extern "C"               
{
#include      
#include    
}
……
 
Q:已经像上面那样包含头文件,仍然找不到函数,不过这次看起来有点不一样,例如:
       undefined reference to `pbs_connect'
A:编译的时候,要将libpbs.a的引用放在源文件后面,例如:
$>g++ -o subjob subjob.cc –lpbs

PBS环境qsub, qstat, qdel

PBS 环境下运行
PBS 是公开源代码的作业管理系统,在此环境下运行,用户不需要指定程序在哪些节点上运行,程序
所需的硬件资源由PBS 管理和分配。
1、PBS 命令
PBS 提供4 条命令用于作业管理。
(1) qsub 命令—用于提交作业脚本
命令格式:
qsub [-a date_time] [-c interval] [-C directive_prefix]
[-e path] [-I] [-j join] [-k keep] [-l resource_list] [-m mail_options]
[-M user_list][-N name] [-o path] [-p priority] [-q destination] [-r c]
[-S path_list] [-u user_list][-v variable_list] [-V]
[-W additional_attributes] [-z]
[script]
参数说明:因为所采用的选项一般放在pbs 脚本中提交,所以具体见PBS 脚本选项。
例:# qsub aaa.pbs 提交某作业,系统将产生一个作业号
(2) qstat 命令—用于查询作业状态信息
命令格式:qatat [-f][-a][-i] [-n][-s] [-R] [-Q][-q][-B][-u]
参数说明:
-f jobid 列出指定作业的信息
-a 列出系统所有作业
-i 列出不在运行的作业
-n 列出分配给此作业的结点
-s 列出队列管理员与scheduler 所提供的建议
-R 列出磁盘预留信息
-Q 操作符是destination id,指明请求的是队列状态
-q 列出队列状态,并以alternative 形式显示
-au userid 列出指定用户的所有作业
-B 列出PBS Server 信息
-r 列出所有正在运行的作业
-Qf queue 列出指定队列的信息
-u 若操作符为作业号,则列出其状态。
若操作符为destination id,则列出运行在其上的属于user_list 中用户的作业状态。
例:# qstat -f 211 查询作业号为211 的作业的具体信息。
(3) qdel 命令—用于删除已提交的作业
命令格式:qdel [-W 间隔时间] 作业号
命令行参数:
例:# qdel -W 15 211 15 秒后删除作业号为211 的作业
(4) qmgr 命令—用于队列管理
qmgr -c "create queue batch queue_type=execution"
qmgr -c "set queue batch started=true"
qmgr -c "set queue batch enabled=true"
qmgr -c "set queue batch resources_default.nodes=1"
qmgr -c "set queue batch resources_default.walltime=3600"
qmgr -c "set server default_queue=batch"
2、PBS 脚本文件
PBS 脚本文件由脚本选项和运行脚本两部分组成。
(1) PBS 作业脚本选项 (若无-C 选项,则每项前面加‘#PBS’)
-a date_time : date_time 格式为:[[[[CC]YY]MM]DD]hhmm[.SS]
表示经过date_time 时间后作业才可以运行。
-c interval : 定义作业的检查点间隔,如果机器不支持检查点,则忽略此选项。
-C directive_prefix :在脚本文件中以directive_prefix 开头的行解释为qsub 的命
令选项。(若无此选项,则默认为’#PBS’ )
-e path :将标准错误信息重定向到path
-I :以交互方式运行
-j join :将标准输出信息与标准错误信息合并到一个文件join 中去。
-k keep :定义在执行结点上保留标准输出和标准错误信息中的哪个文件。
keep 为o 表示保留前者,e 表示后者,oe 或eo 表示二者都保留,
n 表示皆不保留。若忽略此选项,二者都不保留。
-l resource_list : 定义资源列表。以下为几个常用的资源种类。
cput=N : 请求N 秒的CPU 时间; N 也可以是hh:mm:ss 的形式。
mem=N[K|M|G][B|W]:请求N {kilo|mega|giga}{bytes|words} 大小的内存。
nodes=N:ppn=M :请求N 个结点,每个结点M 个处理器。
-m mail_options :mail_option 为a:作业abort 时给用户发信;为b:作业开始运行发信;为e:
作业结束运行时发信。若无此选项,默认为a。
-M user_list : 定义有关此作业的mail 发给哪些用户。
-N name : 作业名,限15 个字符,首字符为字母,无空格。
-o path : 重定向标准输出到path。
-p priority : 任务优先级,整数,[-1024,1023],若无定义则为0.
-q destination : destination 有三种形式: queue , @server,queue@server。
-r y|n : 指明作业是否可运行,y 为可运行,n 为不可运行。
-S shell : 指明执行运行脚本所用的shell,须包含全路径。
-u user_list : 定义作业将在运行结点上以哪个用户名来运行。
-v variable_list : 定义export 到本作业的环境变量的扩展列表。
-V : 表明qsub 命令的所有环境变量都export 到此作业。
-W additional_attributes : 作业的其它属性。
-z : 指明qsub 命令提交作业后,不在终端显示作业号。
(2) 运行脚本同LINUX 下一般的运行脚本文件。
[注]:脚本文件中的mpirun_rsh 命令行中的节点列表文件要用环境变量表示
$PBS_NODEFILE,这个环境变量表示由pbs 自动分配给作业的节点列表;
节点数为命令行中指定的进程数。
格式如下:
mpirun_rsh –np 进程数 –hostfile $PBS_NODEFILE 可执行程序名
3、PBS 环境下运行示例
(1)脚本文件编辑示例
实例1:运行mpi 程序
命令行:#vi aaa.pbs
编辑的内容:
#PBS -N myjob
#PBS -o /home/jz/my.out
#PBS -e /home/jz/my.err
#PBS –l nodes=2:ppn=2
cd 目录(你们原来直接在节点上运行时所在的目录)
mpirun_rsh –np 4 –hostfile $PBS_NODEFILE /home/jz/helloworld
解释:原先大家都是在中断输入 mpirun_rsh…..这些命令执行程序的,现在只要把这些提交命令放
在.pbs 配置文件的最后,由PBS 来调度执行(自动分配节点和其它资源)。
Myjob 是为你此次要运行的程序起的任务名,可以改成你自己想要的名字
原先输出信息都是直接在屏幕上显示的,现在屏幕上的显示全部输出到文件中,上例中输出文
件是/home/jz/my.out 文件,大家可以根据自己的需要修改(目录,文件名)。程序运行时遇到的一些错误会
记录在.err 文件中。好处:因为对每个任务都设定了不同的输出文件,所以看结果只要打开相应文件看就可
以了,不需要开多个终端,而且里面有任务的详细信息,比如实际分配的是哪些节点计算,运行时间等。
#PBS –l nodes=2:ppn=2,你们程序需要几个节点只要修改nodes 后的数字就可以了,ppn=2 保持
不变,因为我们的机器每个节点都是双cpu 的。
mpirun_rsh –np 4 –hostfile $PBS_NODEFILE /home/jz/helloworld
此例中-np 后的4 是并行数(2 × 2 = 4 个cpu ), –hostfile $PBS_NODEFILE 不需要改变。
/home/jz/helloworld 是你编译好的可执行文件名,需修改。
对于每个你要运行的mpi 程序都需要这样一个.pbs 配置文件
也就是说大家原来的操作是:mpirun…………
现在改成2 步走:1)写个pbs 配置文件(比如xxx.pbs);2)向pbs 提交(qsub xxx.pbs)
实例2:运行非mpi 程序
有些用户并不是自己编写mpi 程序,同样也可以用pbs 提交。
比如物理系运行程序时一般输入的命令是 RunDMol3.sh TiFeCp2-pbe-dspp-m=1-opt ,那么配置文件可以
这样写:
命令行:#vi job.pbs
编辑的内容:
#PBS -N physics_job
#PBS -o /home/physics/physics_job.out
#PBS -e /home/physics/physics_job.err
#PBS -l nodes=1:ppn=2
#PBS -r y
cd 目录(你们原来直接在节点上运行时所在的目录)
RunDMol3.sh TiFeCp2-pbe-dspp-m=1-opt
解释:也就是说把原来在终端直接输入的命令RunDMol3.sh TiFeCp2-pbe-dspp-m=1-opt 放到pbs 配置
文件中,因为你们只要一个节点,所以nodes=1,至于用哪个节点系统自动分配,你们肯定很关心是分配
了哪个节点给你们,那么可以用qstat 命令查询(比如qstat -n)。
(2) 提交作业示例
命令行:#qsub aaa.pbs
显示结果:
(3) 作业状态查询示例
Qstat 后加不同参数可以查看不同的信息(各参数的意思,上面有详细的说明,你们可以一个个试验一
下,以后就知道查看哪些信息,需要哪些参数)
实例:
命令行:#qstat –a (查看作业的状态)
显示结果:
解释:Job id 211 是给你提交的任务分配的任务号,S(任务状态,R 表示正在运行,Q 表示正在排
队等候调度)
8
命令行:#qstat –n (查看作业使用的节点)
显示结果:
解释:blade32 就是分给你这个任务的节点
命令行:#qstat –f 211 (查看有关作业运行具体信息)
显示结果:
解释:exec_host 显示的是实际执行该任务的节点

PBS 命令与使用

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

1、PBS命令
   PBS提供4条命令用于作业管理。
(1)     qsub 命令—用于提交作业脚本
命令格式:
qsub  [-a date_time] [-c interval] [-C directive_prefix]
[-e path] [-I] [-j join] [-k keep] [-l resource_list]  [-m mail_options]
[-M user_list][-N name] [-o path] [-p priority] [-q destination] [-r c]
[-S path_list] [-u user_list][-v variable_list] [-V]
[-W additional_attributes] [-z]
[script]
参数说明:因为所采用的选项一般放在pbs脚本中提交,所以具体见PBS脚本选项。
例:# qsub  aaa.pbs         提交某作业,系统将产生一个作业号
(2)     qstat 命令—用于查询作业状态信息
命令格式:qatat [-f][-a][-i] [-n][-s] [-R] [-Q][-q][-B][-u]
参数说明:
-f  jobid  列出指定作业的信息
-a        列出系统所有作业
-i         列出不在运行的作业
-n        列出分配给此作业的结点
-s        列出队列管理员与scheduler所提供的建议
-R       列出磁盘预留信息
-Q       操作符是destination id,指明请求的是队列状态     
-q        列出队列状态,并以alternative形式显示
-au userid  列出指定用户的所有作业
-B       列出PBS Server信息
-r        列出所有正在运行的作业
-Qf queue 列出指定队列的信息
-u        若操作符为作业号,则列出其状态。
若操作符为destination id,则列出运行在其上的属于user_list中用户的作业状态。
例:# qstat -f 211      查询作业号为211的作业的具体信息。
(3) qdel 命令—用于删除已提交的作业
命令格式:qdel  [-W 间隔时间] 作业号
命令行参数:
例:# qdel -W 15 211            15秒后删除作业号为211的作业
(4)     qmgr 命令—用于队列管理
  qmgr -c "create queue batch queue_type=execution"
  qmgr -c "set queue batch started=true"
  qmgr -c "set queue batch enabled=true"
  qmgr -c "set queue batch resources_default.nodes=1"
  qmgr -c "set queue batch resources_default.walltime=3600"
  qmgr -c "set server default_queue=batch"
2、PBS脚本文件
PBS脚本文件由脚本选项和运行脚本两部分组成。
(1) PBS作业脚本选项 (若无-C选项,则每项前面加‘#PBS’)
            -a  date_time : date_time格式为:[[[[CC]YY]MM]DD]hhmm[.SS]
                                                 表示经过date_time时间后作业才可以运行。
-c  interval   : 定义作业的检查点间隔,如果机器不支持检查点,则忽略此选项。
-C  directive_prefix :在脚本文件中以directive_prefix开头的行解释为qsub的命
令选项。(若无此选项,则默认为’#PBS’ )
-e  path     :将标准错误信息重定向到path
-I           :以交互方式运行
-j  join      :将标准输出信息与标准错误信息合并到一个文件join中去。
-k  keep     :定义在执行结点上保留标准输出和标准错误信息中的哪个文件。
                          keep为o 表示保留前者,e表示后者,oe或eo表示二者都保留,
                          n表示皆不保留。若忽略此选项,二者都不保留。
-l  resource_list  : 定义资源列表。以下为几个常用的资源种类。
 cput=N            : 请求N秒的CPU时间; N也可以是hh:mm:ss的形式。
          mem=N[K|M|G][B|W]:请求N {kilo|mega|giga}{bytes|words} 大小的内存。
          nodes=N:ppn=M     :请求N个结点,每个结点M个处理器。
-m  mail_options :mail_option为a:作业abort时给用户发信;为b:作业开始运行发信;为e:作业结束运行时发信。若无此选项,默认为a。
-M  user_list   : 定义有关此作业的mail发给哪些用户。
-N  name      : 作业名,限15个字符,首字符为字母,无空格。
-o  path       : 重定向标准输出到path。
-p  priority     : 任务优先级,整数,[-1024,1023],若无定义则为0.
-q  destination  : destination有三种形式: queue , @server,queue@server。
-r  y|n         : 指明作业是否可运行,y为可运行,n为不可运行。
-S  shell       : 指明执行运行脚本所用的shell,须包含全路径。
-u  user_list    : 定义作业将在运行结点上以哪个用户名来运行。
-v  variable_list : 定义export到本作业的环境变量的扩展列表。
-V             : 表明qsub命令的所有环境变量都export到此作业。
-W  additional_attributes  : 作业的其它属性。
-z             : 指明qsub命令提交作业后,不在终端显示作业号。
(2)     运行脚本同LINUX下一般的运行脚本文件。
[注]:脚本文件中的mpirun_rsh命令行中的节点列表文件要用环境变量表示
$PBS_NODEFILE,这个环境变量表示由pbs自动分配给作业的节点列表;
节点数为命令行中指定的进程数。
格式如下:
mpirun_rsh –np 进程数 –hostfile $PBS_NODEFILE 可执行程序名

2009年6月21日星期日

使用PBS调度你的作业

一个大型的集群系统可能有上千个节点,会同时运行多个作业,完成不同的任务,如果不作很好的规划很有可能造成任务之间相互争夺集群的资源,最后即没有充分利用资源也无法按时完成。PBS就是专门调度集群任务的工具。

PBS(Portable Batch System)是由NASA开发的灵活的批处理系统。它被用于集群系统、超级计算机和大规模并行系统。PBS还有除了调度作业以外还能够管理集群的资源,如果对它作个简单总结,PBS主要有如下特征:

易用性:为所有的资源提供统一的接口,易于配置以满足不同系统的需求,灵活的作业调度器允许不同系统采用自己的调度策略。

移植性:符合POSIX 1003.2标准,可以用于shell和批处理等各种环境。

适配性:可以适配与各种管理策略,并提供可扩展的认证和安全模型。支持广域网上的负载的动态分发和建立在多个物理位置不同的实体上的虚拟组织。

灵活性:支持交互和批处理作业。

PBS其实可以灵活地使用,它即可以被用来在单一节点的或大型集群上控制任务,也可以在多个系统之间均衡负载,还可以在多个节点的计算机上运行并行或串行的任务。以上这些在实际应用中也可以混合。

PBS主要分成三个部分:

PBS server:它运行在集群的服务器节点上,由它来控制事务并启动运行任务。

maui scheduler:Maui调度程序根据资源管理器得到各个结点上的资源状况和系统的作业信息生成一个优先级列表。

mom后台进程:每个节点上有一个mom后台进程,由这个进程真正启动和停止每个节点上的任务。

PBS的几个主要部件位于每个节点的{$OSCAR_HOME}/sbin目录中,到该目录你可以找到

Pbs_server是PBS的服务器,pbs_mom是mom后台进程,pbs_sched是调度程序。一般启动linux以后pbs_server服务器和pbs_mom后台守候进程就起来了,你使用ps命令可以查看:

#ps –ef grep pbs_

pbs_server有帮助文档可以查man pbs_server,仔细看过以后你会发现它有很多配置选项,比如指定默认节点的,也就是如果pbs找不到你指定的节点或者没有指定节点则使用,则使用default_node参数指定。可以使用pbs工具qmgr来改变server的设置:

Qmgr:s s default_node=big (s s表示set server)指定了default_node的值

使用PBS主要是以命令方式来定你的作业,它的命令的详细参考在linux里面可以使用man帮助查看,如果你要查看PBS关于资源限制的资料可以浏览pbs_resources帮助,如果想查看PBS服务器的配置可以浏览pbs_server_attribute帮助。所有的命令可以在{$OSCAR_HOME}/pbs/bin中找到,下面列出了几个PBS常用的命令及其功能:

qsub:此命令是向PBS提交你的任务。

Qdel:此命令是删除PBSd的作业。

qstat [-n]:显示当前作业状态和关联的节点。

pbsnodes [-a]:显示节点的状态。

Pbsdsh:分布式处理发射台。

在这里举个简单的例子让读者有点感性的认识,下面的提交作业是在节点X上起Y个VP中运行my_script.sh脚本,注意提交任务一定要有个运行任务的脚本。

$ qsub -N my_jobname -e my_stderr.txt -o my_stdout.txt -q workq -l

nodes=X:ppn=Y:all,walltime=1:00:00 my_script.sh

-N选项指定任务名字,-e指定标准错误输出文件,-o指定标准输出文件,-q 是队列名字,-l是后面是指定资源限制,这里指定了节点,VP个数,最大运行时间。节点定位需要详细介绍一下,nodes参数的等号后面是以“+”号相连的节点定义,每个定义之间的属性以“:”分开。一般是 node number:node name (略写):ppn= (VP个数):all (或者resource)。举个例子,比如2:red:ppn=2表示在节点名字有red的2台机器上,每个机器启动2个VP来运行任务。VP是虚拟的处理器,默认情况下一个CPU启动一个VP,但是你可以启动多个VP在一个CPU上面,PBS是以VP为处理单位的而不是真实的硬件CPU。

上面的命令提交一个任务以后,我们看它运行的脚本my_script.sh:

#!/bin/sh

echo Launchnode is ‘hostname‘

pbsdsh /path/to/my_executable

第一行将在输出文件打印出机器名字,让管理员知道是哪台计算机运行此脚本。后面是抛出运行的程序。

2009年6月19日星期五

安装和使用Torque(2)

二、Torque PBS使用
1、创建用户
在master的root下
useradd test

passwd test
输入test密码


到/var/yp下make一下
2、配置普通用户的ssh
su test

cd

ssh-keygen -t dsa

cd .ssh

cat id_pub.dsa >>authorized_keys

chmod 600 authorized_keys
3、编写作业脚本
[test1@master t]vi pbsjob
#!/bin/tcsh
#PBS -o /home/test1/pbstest/t/output 标准输出文件
#PBS -e /home/test1/pbstest/t/error 错误输出文件
#PBS -l nodes=5:ppn=4 规定使用的节点数以及每个节点能跑多少核
#PBS –q students 把任务提交到students队列中
cd $PBS_O_WORKDIR 到工作目录下(此为PBS提供的环境变量)
mpirun –machine $PBS_NODEFILE -np 20 ./vasp

4、启动mpd
mpdboot -n 10 -f mfa

mfa内容:
master:4
node01:4
….
node09:4

5、提交,查询,删除作业

提交作业:qsub pbsjob
作业提交后会有一个作业号
[test1@master pbstest]$ qsub pbsjob
48.master

查询作业:qstat
[test1@master pbstest]$ qstat
Job id Name User Time Use S Queue
------------------------- ---------------- --------------- -------- - -------------------------------
48.master pbstest test1 00:00:00 R students

删除作业:qdel 作业号
[test1@master pbstest]$ qdel 48

安装和使用Torque(1)

PBS是功能最为齐全,历史最悠久,支持最广泛的本地集群调度器之一。 PBS的目前包括openPBS,PBS Pro和Torque三个主要分支。 其中OpenPBS是最早的PBS系统,目前已经没有太多后续开发,PBS pro是PBS的商业版本,功能最为丰富。Torque是Clustering公司接过了OpenPBS,并给与后续支持的一个开源版本。
下面是本人安装torque的过程。
一、Torque安装
在master(管理结点上)
1、解压安装包
[root@master tmp]# tar zxvf torque-2.3.0.tar.gz

2、进入到解压后的文件夹
./configure --with-default-server=master
make
make install
3、
(1)[root@master torque-2.3.0]#./torque.setup
必须是个普通用户

(2)[root@master torque-2.3.0]#make packages
把产生的 tpackages , torque-package-clients-linux-x86-64.sh,
torque-package-mom-linux-x86-64.sh 拷贝到所有节点。

(3)[root@master torque-2.3.0]# ./torque-package-clients-linux-x86_64.sh --install
[root@master torque-2.3.0]# ./torque-package-mom-linux-x86_64.sh --install

(4)编辑/var/spool/torque/server_priv/nodes (需要自己建立)
加入如下内容

master np=4

node01 np=4

........

node09 np=4


(5)启动pbs_server,pbs_sched,pbs_mom,并把其写到/etc/rc.local里使其能开机自启动。

(6)创建队列
[root@master ~]# qmgr
create queue students
set queue students queue_type = Execution
set queue students Priority = 40
set queue students resources_max.cput = 96:00:00
set queue students resources_min.cput = 00:00:01
set queue students resources_default.cput = 96:00:00
set queue students enabled = True
set queue students started = True

4、在node0x (x=1-9,计算结点上)
[root@node0x torque-2.3.0]# ./torque-package-clients-linux-x86_64.sh --install
[root@node0x torque-2.3.0]# ./torque-package-mom-linux-x86_64.sh --install
然后启动pbs_mom ,把pbs_mom写入/etc/rc.local

什么是资源管理和作业调度策略管理器

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

作业调度策略管理器:策略管理器根据资源管理器得到各个结点上的资源状况和系统的作业信息生成一个优先级列表。这个列表告诉资源管理器何时在哪些结点上运行哪个作业。策略管理器不仅要提供一个复杂的参数集合去定义计算环境和作业,而且要为这个定义提供简捷灵活的表达方式以允许系统管理员实现策略驱动的资源调度。

资源调度软件Condor介绍

Condor是一个专门用于计算密集型作业的负载管理系统。像其他功能齐全的批处理系统一样,Condor提供了作业排队机制,调度策略,优先计划,资源监测和资源管理。用户提交他们的串行或并行工作给Condor,Condor把他们放到一个队列中,根据某种策略选择时间和地点来执行作业,仔细监测其进展情况,并最终通知用户完成。

除了提供类似于传统的批处理排队系统功能,Condor新颖的架构使它能够在传统的调度系统无法获得成功的地方取得成功。Condor可以用来管理包含专用计算节点的管理群集(如“Beowulf”集群)。(mauichina.blgospot.com上有beowulf集群介绍)除此此外,Condor独特的机制,使其可以有效地利用其他闲置台式工作站CPU处理能力。例如,Condor可以配置为只使用键盘和鼠标是闲置的台式机。如果Condor检测到一台机器不再可用(如通过按键检测),在许多情况下COndor能够透明的产生一个check point和并把作业迁移到其他闲置的机器上。Condor不要求机器间的共享文件系统-如果没有共享文件系统,Condor可以为用户传送数据文件,或Condor可以透明地重定向所有工作的I / O请求回到提交机。因此,Condor用于无缝结合一个组织的所有的计算能力成一个资源。

资源管理和系统管理软件介绍(3)

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的工具

资源管理和系统管理软件介绍(2)

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 系统安装
集群系统的安装主要是指在各个结点上安装操作系统、文件系统、并行程序运行库、作业管理软件和系统管理软件等。它是集群系统投入应用的前提,所以集群系统的安装是一件非常重要的任务。一般集群系统由几十台,甚至上百上千台计算机组成,显然手工安装系统几乎是不可能的。一般集群系统的安装的机制是:
1. 网络启动:设置需要的安装的结点网络启动,然后管理结点远程重启需要安装的结点。网络启动的结点启动后从启动服务器获得一个小的操作系统内核。网络启动一般采用Intel的PXE(Pre-Execution Environment)标准。 PXELinux是支持PXE的网络启动服务器。它可以在网络启动的结点启动一个小的Linux核心并运行指定的Init程序。由Init程序负责后续的安装。
2. 网络安装:这个操作系统内核负责从安装服务器(通常是一个文件服务器)上取得安装软件包或系统镜像并在本地实施系统安装。有多种Linux工具可以完成基于网络的系统安装。这些工具中的典型代表是:KickStart、ALICE (Automatic Linux Installation and Configuration Environment)、SIS(System Install Suite)和PartImage。这些工具可以分为如下几类:

1. a. 基于Script的安装:这种安装方式中,安装过程由安装脚本(Script)控制,可以通过修改安装脚本来配置安装过程。这种安装方式中,安装服务器实际上是一个文件服务器,它向结点提供要安装的软件包。除了软件包不是来自本地外,这种安装方法和本地安装并没有太大的区别,本地安装的各个步骤(配置硬件、安装软件包、配置系统等)它都要经过。KickStart属于这中安装方法。基于Script的安装比较灵活,但是它是操作系统依赖型的。象 KickStart只支持Redhat Linux。

2. b. 基于Imaging的安装:和基于Script的安装不同,基于Imaging的安装并不需要经过本地安装的各个步骤。它只需要把存储在文件服务上的需要安装的系统映象(Image)拷贝到本地的硬盘上。这个系统映象来源于一个已经安装和配置好的样机。Imaging的安装方式是独立于操作系统,但是它依赖于网络启动的操作系统内核支持的文件系统。Imaging的很大缺点是很难提供独立于操作系统的配置方法。PartImage属于Imaging安装方法。而SIS是Script和Imaging混合型的安装方式。SIS利用Linux的chroot命令在安装服务器的一个文件目录下安装一个虚拟的操作系统映象。同时SIS支持用户提供Shell脚本完成安装后的配置。

3. 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 域管理
你可以简单的把集群系统的域管理理解为结点管理,它主要包括如下简单的功能:
• 加入、删除和列举集群系统中的结点
• 对集群中的结点分组
实际上,我们也把作业管理纳入集群系统管理的任务。但是相对于其他系统管理任务而言,作业管理在集群系统中具有更重要的作用,而且通常的集群系统管理软件也不直接实现作业管理功能。所以我们把作业管理作为集群系统一个重要的软件部分,而不是集群系统管理的一项任务。

资源管理和系统管理软件介绍(1)

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

Beowulf集群(3)

本文的下面三个小节将分别介绍这四个层次。而本系列文章的后面两片将更详细的介绍它们。
3.1 Beowulf集群硬件和网络
Beowulf集群硬件和网络层次需要解决的问题是如何组织硬件使其达到最高的性价比。为了达到很好的性价比,Beowulf通常采用廉价的COTS硬件。当然有时为了提供某些关键的性能,也会使用一些特殊的设备。
从硬件组织的角度说,Beowulf集群中的节点都是非共享内存的计算机,它们通过消息传递进行通信。实际上,我们还有其他组织硬件完成并行计算的方式。
简单地说,有两种组织硬件完成并行计算的方法:
• 通过消息传递通信的本地内存(非共享内存)计算机系统 (Beowulf集群)
• 通过内存访问通信的共享内存计算机系统 (SMP计算机)
当然也存在将多个本地或共享内存计算机相连并创造一个混和的共享内存计算机系统的可能。但在最终用户看来,这种计算机系统就好像一个大型的共享内存计算机。这种技术被我们叫做非一致内存访问NUMA(Non Uniform Memory Access)。但是从底层说,一个NUMA计算机系统必须在节点间传递消息。
当然也可以将共享内存计算机作为一个本地内存的计算机连入一个Beowulf集群系统。由于Linux系统支持SMP计算机,所以Linux系统本身能够在SMP中的多个CPU上调度作业。所以Beowulf集群本身就没有必要识别集群的节点是不是共享内存计算机了。
和SMP系统相比,集群系统有明显的优点。关于这一点请参阅本系列文章的第一篇。
因为Beowulf集群采用消息传递完成并行程序间通信,所以网络传输成了系统的瓶颈。在实际的系统中,通常采用有两套彼此的独立的网络设备。一套是普通的以太网,用于象系统管理和文件服务等普通的网络通信。另一套网络是用于进程间通信的高速网,象Myrinet和Giganet。和100M以太网相比,这类网络具有低延迟和高带宽的特性。
还有三类设备虽然不是必须,但是对于集群管理却是非常重要的:
• KVM Swither:KVM是指Keyboard、Video和Mouse。这个设备可以让系统管理员用一套KVM管理系统中的所有节点。
• 远程电源管理设备(如ASM):这类设备使得管理员可以在管理节点Power on/off其他节点。
• Terminal Server:这种设备通过串口将节点连接起来。通过这个设备,管理员可以在管理节点上虚拟出其他节点上的控制终端。和KVM相比,这种方法不需要硬件的切换。
3.2 Beowulf集群软件
Beowulf集群在软件层次面临的问题是如何在硬件层次上获得最大的性能。通常,Beowulf集群采用Linux+MPI的方式支持并行计算。MPI是采用消息传递的方式实现并行程序间通信。虽然也可以采用其他的通信方法,但是消息传递模式是最适合于集群系统的。简单地说,有两种在并行程序间传递并发的方法:
• 使用处理器间的消息传递(MPI)
• 使用操作系统的线程(Thread)
其他的方法也存在,但是这两种方法应用得最广泛。虽然存在效率和移植的问题,这两种方法都可以在SMP,NUMA和Cluster上实现。
消息传递需要在CPU间拷贝数据,而线程却可以在CPU间共享数据。数据拷贝的速度和延迟是影响消息传递效率的最关键的因素。PVM和MPI是最常用的两种消息传递API。消息传递也可以在线程上实现,并且消息传递即可以用于集群系统,也可以用于SMP系统。和线程相比,在SMP系统上使用消息传递的优点在于可以很方便的把SMP上的应用移植到集群系统上。
线程的最大特点是,线程间是共享数据。因此它在SMP系统上工作的更好。而且Linux本身也是支持Posix线程的。但是使用线程的最大缺点在于,很难将线程扩展到SMP系统以外。虽然NUMA技术可以高效的做到这一点,但是那非常昂贵而且Linux本身也不支持。
下表概括了线程和消息传递在SMP和集群系统上的比较:
*需要昂贵的NUMA技术

SMP系统性能
集群系统性能
扩展性
消息传递

很好
很好
线程
很好
差*

3.3 Beowulf集群应用
Beowulf集群的应用层次位于硬件和软件层次之上。它要解决的问题是如何在实际的集群系统中并行化(PARALLEL)应用中的并发(CONCURRENT)部分,从而使集群上的应用达到最好的性能。
在阐述这部分之前,我们需要区分两个概念: PARALLEL和CONCURRENT。程序的并发(CONCURRENT)部分是指程序中可以独立计算的部分。程序的并行(PARALLEL)部分是指程序中在同一时间被分别执行的并发(CONCURRENT)部分。
它们的区别是很重要的。并发是程序本身的属性,而并行是计算机系统的属性。并行的目的是获得很好的性能。限制并行性能的因素是计算节点间通信的速度和延迟。大部分的Benchmark都有很高的并行性并且通信和延迟不是什么瓶颈。但是其他应用却没有这么简单。对于这些应用,有时候使并发部分并行执行反而可能使应用性能更低。简单的说,除非附加的通信时间代价小于并发节约的计算时间,否则并行执行反而会降低效率。



程序员的任务就是决定哪些并发的部分需要并行执行,而哪些不应该并行执行。这些决定最终会影响应用程序的执行效率。图3描述了实际应用中程序并发部分和通信计算时间比的关系。
在理想的系统中,通信计算时间比应该是恒定的。任何并发部分都应该实现为并行。不幸的是,实际的系统,包括SMP系统,都是图3所示的那样。所以在设计 Beowulf集群应用时,必须认识到并发带来的效率依赖于在该系统上通信处理时间比。也正是因为这个原因,虽然可以把应用移植到另一个并发系统上,但是并不能保证应用在被移植的系统上仍然是高效的。一般来说,不存在可移植的且高效的应用程序。
同样的道理,使用更快的CPU也可能使你的应用变慢。

Beowulf集群(2)

2 Beowulf集群的分类
由于一些特殊的目的如系统性能,有些Beowulf集群系统也采用一些用户定制的设备(它们通常由一家厂商提供)。为了区分这些特殊的系统,通常把Beowulf分为两大类:
2.1 第一类Beowulf集群(CLASS I Beowulf)
这一类Beowulf集群全部由COTS设备组成。第一类Beowulf系统的优点是:
• 硬件设备由多个来源,通常具有廉价和易管理维护的特点。
• 不依赖于单个硬件供应商
• 所有设备驱动都由Linux开发社团提供
• 通常都是标准设备,例如,SCSI、以太网等等
当然第一类Beowulf集群的缺点也是非常显然的。由于所采用的硬件都没有经过性能优化,所以其很难达到很好的性能。比如,由于以太网的高延迟和低带宽使得集群系统中消息传递很难达到MIMD应用的需求,从而使整个集群系统的计算能力大打折扣。
2.2 第二类Beowulf集群(CLASS II Beowulf)
第二类Beowulf集群是指那些采用了用户定制设备的Beowulf集群。这类集群系统最大优点是具有很好的性能。例如,采用Myrinet作为集群系统的IPC网络可以极大地提供进程间消息传递延迟和速度。当然它的缺点就是依赖于单个硬件提供商而且价格高昂。
不能说,哪一类集群绝对优于另一类集群。这依赖于你的集群系统的需求和预算。
3 Beowulf集群体系结构
如上所述,现实中存在形形色色的Beowulf集群。虽然它们都是原始Beowulf集群的衍生物,但是它们的体系结构也存在各种各样微小的差异。本文以IBM eServer Cluster 1300为例来阐述Beowulf集群体系结构和系统组成。
图1是Cluster 1300上Beowulf集群的系统视图

图 1是Cluster 1300上Beowulf集群的系统视图。无论是管理节点(Master Node)和计算节点都是Intel IA32架构的xSeries PC服务器。它们通过网络(以太网和Myrinet)相连接。所有的节点都运行Linux操作系统。运行在计算节点上的并行应用程序采用MPI进行完成并行进程间的通信。计算节点通过管理节点和外部LAN相连。整个集群系统都在一套集群管理工具监控之下。
图 2 Cluster1300上Beowlf集群组件

图 2 是 Cluster 1300上Beowulf集群的组件视图。它揭示了Beowulf集群的组成部分。通常Beowulf集群由四个层次构成:
• 硬件:主要是指Intel IA32架构的PC服务器。
• 网络:指用于节点间通信的局域网(普通的以太网)和并行进程间通信的高速网(Myrinet等高速网)。
• 软件:主要指Linux操作系统和用于并行通信的并行编程库(如MPI和PVM)。
• 并行应用

Beowulf集群(1)

1 什么是Beowulf集群
Beowulf是现存的最古老的英语史诗:
Famed was this Beowulf: far ew the boast of him, son of Scyld, in the Scandian lands. So becomes it a youth to quit him well with his father's friends, by fee and gift, that to aid him, aged, in after days, come warriors willing, should war draw nigh, liegemen loyal: by lauded deeds shall an earl have honor in every clan.
它歌颂了一个英雄,他拥有强壮的体魄和无人伦比的勇气。他最终战胜了魔鬼Grendel. 你可以在http://legends.dm.net/beowulf/index.html找到这首史诗。

我们所说的Beowulf首先是一个象史诗中英雄一样强大的集群系统。在1994年夏季,Thomas Sterling和Don Becker在CESDIS(The Center of Excellence in Space Data and Information Sciences)用16个节点和以太网组成了一个计算机集群系统,并将这个系统命名为Beowulf。Beowulf集群。Beowulf集群提供了一种使用COTS(Commodity off the shelf)硬件构造集群系统以满足特殊的计算需求的方法。这里的COTS是指象PC和以太网这种广为应用的标准设备,它们通常可以由多家厂商提供,所以通常有很高的性价比。Beowulf集群这种方法很快从NASA传遍了整个科研机构和社团。实际上,Beowulf集群现在已被人们看作高性能计算中的一个分支或流派。

因为几乎每个Beowulf集群的设计者都有自己的Beowulf集群的定义,恐怕很难给Beowulf集群下一个确切的定义。一些人认为只有那些采用和原始的Beowulf集群系统一样方法构建的系统才叫Beowulf集群。而另一些人则认为凡是能够在多个工作站上运行并行代码的系统都称为Beowulf集群。这里我们只是列举多数Beowulf集群具有的特征作为Beowulf集群的定义:
• Beowulf是一种系统结构,它使得多个计算机组成的系统能够用于并行计算。
• Beowulf系统通常有一个管理节点和多个计算节点构成。它们通过以太网(或其他网络)连接。管理节点监控计算节点,通常也是计算节点的网关和控制终端。当然它通常也是集群系统文件服务器。在大型的集群系统中,由于特殊的需求,这些管理节点的功能也可能由多个节点分摊。
• Beowulf系统通常由最常见的硬件设备组成,例如,PC、以太网卡和以太网交换机。Beowulf系统很少包含用户定制的特殊设备。
• Beowulf系统通常采用那些廉价且广为传播的软件,例如,Linux操作系统、并行虚拟机(PVM)和消息传递接口(MPI)。

Linux 高性能计算集群(3)

3 高性能计算集群
3.1 什么是高性能计算集群
简单的说,高性能计算(High-Performance Computing)是计算机科学的一个分支,它致力于开发超级计算机,研究并行算法和开发相关软件。高性能计算主要研究如下两类问题:
• 大规模科学问题,象天气预报、地形分析和生物制药等;
• 存储和处理海量数据,象数据挖掘、图象处理和基因测序;
顾名思义,高性能集群就是采用集群技术来研究高性能计算。
3.2 高性能计算分类
高性能计算的分类方法很多。这里从并行任务间的关系角度来对高性能计算分类。
3.2.1 高吞吐计算(High-throughput Computing)
有一类高性能计算,可以把它分成若干可以并行的子任务,而且各个子任务彼此间没有什么关联。象在家搜寻外星人( SETI@HOME -- Search for Extraterrestrial Intelligence at Home )就是这一类型应用。这一项目是利用Internet上的闲置的计算资源来搜寻外星人。SETI项目的服务器将一组数据和数据模式发给Internet上参加SETI的计算节点,计算节点在给定的数据上用给定的模式进行搜索,然后将搜索的结果发给服务器。服务器负责将从各个计算节点返回的数据汇集成完整的数据。因为这种类型应用的一个共同特征是在海量数据上搜索某些模式,所以把这类计算称为高吞吐计算。所谓的Internet计算都属于这一类。按照 Flynn的分类,高吞吐计算属于SIMD(Single Instruction/Multiple Data)的范畴。
3.2.2 分布计算(Distributed Computing)
另一类计算刚好和高吞吐计算相反,它们虽然可以给分成若干并行的子任务,但是子任务间联系很紧密,需要大量的数据交换。按照Flynn的分类,分布式的高性能计算属于MIMD(Multiple Instruction/Multiple Data)的范畴。
3.3 Linux高性能集群系统
当论及Linux高性能集群时,许多人的第一反映就是Beowulf。起初,Beowulf只是一个著名的科学计算集群系统。以后的很多集群都采用 Beowulf类似的架构,所以,实际上,现在Beowulf已经成为一类广为接受的高性能集群的类型。尽管名称各异,很多集群系统都是Beowulf集群的衍生物。当然也存在有别于Beowulf的集群系统,COW和Mosix就是另两类著名的集群系统。
3.3.1 Beowulf集群
简单的说,Beowulf是一种能够将多台计算机用于并行计算的体系结构。通常Beowulf系统由通过以太网或其他网络连接的多个计算节点和管理节点构成。管理节点控制整个集群系统,同时为计算节点提供文件服务和对外的网络连接。它使用的是常见的硬件设备,象普通PC、以太网卡和集线器。它很少使用特别定制的硬件和特殊的设备。Beowulf集群的软件也是随处可见的,象Linux、PVM和MPI。
本文的以后几部分将详细介绍Beowulf集群系统的硬件、网络、软件和应用体系结构。
3.3.2 Beowulf集群和COW集群
象Beowulf一样,COW(Cluster Of Workstation)也是由最常见的硬件设备和软件系统搭建而成。通常也是由一个控制节点和多个计算节点构成。COW和Beowulf的主要区别在于:
• COW 中的计算节点主要都是闲置的计算资源,如办公室中的桌面工作站,它们就是普通的PC,采用普通的局域网进行连接。因为这些计算节点白天会作为工作站使用,所以主要的集群计算发生在晚上和周末等空闲时间。而Beowulf中的计算节点都是专职于并行计算,并且进行了性能优化。它们采用高速网(Myrinet 或Giganet)上的消息传递(PVM或MPI)进行进程间通信(IPC)。
• 因为COW中的计算节点主要的目的是桌面应用,所以它们都具有显示器、键盘和鼠标等外设。而Beowulf的计算节点通常没有这些外设,对这些计算节点的访问通常是在管理节点上通过网络或串口线实现的。
• 因为连接COW中计算节点的通常是普通的局域网,所以COW上的高性能应用通常是象SETI@HOME 这样的SIMD的高吞吐计算。而Beowulf无论从硬件、网络和软件上都对需要频繁交换数据的MIMD应用做了特别的优化。
3.3.3 Mosix集群
实际上把Mosix集群放在高性能集群这一节是相当牵强的,但是和Beowulf等其他集群相比, Mosix集群确实是种非常特别的集群,它致力于在Linux系统上实现集群系统的单一系统映象SSI(Single System Image)。Mosix集群将网络上运行Linux的计算机连接成一个集群系统。系统自动均衡节点间的负载。因为Mosix是在Linux系统内核中实现的集群,所以用户态的应用程序不需要任何修改就可以在Mosix集群上运行。通常用户很少会注意到Linux和Mosix的差别。对于他来说,Mosix集群就是运行Linux的一台PC。尽管现在存在着不少的问题,Mosix始终是引人注目的集群系统。

Linux 高性能计算集群(2)

2 高可用集群
2.1 什么是高可用性
计算机系统的可用性(availability)是通过系统的可靠性(reliability)和可维护性(maintainability)来度量的。工程上通常用平均无故障时间(MTTF)来度量系统的可靠性,用平均维修时间(MTTR)来度量系统的可维护性。于是可用性被定义为:
MTTF/(MTTF+MTTR)*100%

业界根据可用性把计算机系统分为如下几类:
表1. 系统可用性分类
可用比例
(Percent Availability) 年停机时间
(downtime/year) 可用性分类
99.5 3.7天 常规系统(Conventional)
99.9 8.8小时 可用系统(Available)
99.99 52.6分钟 高可用系统(Highly Available)
99.999 5.3分钟 Fault Resilient
99.9999 32秒 Fault Tolerant
对于关键业务,停机通常是灾难性的。因为停机带来的损失也是巨大的。下面的统计数字列举了不同类型企业应用系统停机所带来的损失。
表 2. 停机给企业带来的损失
应用系统 每分钟损失(美元)
呼叫中心(Call Center) 27000
企业资源计划(ERP)系统 13000
供应链管理(SCM)系统 11000
电子商务(eCommerce)系统 10000
客户服务(Customer Service Center)系统 27000
随着企业越来越依赖于信息技术,由于系统停机而带来的损失也越拉越大。
2.2 高可用集群
高可用集群就是采用集群技术来实现计算机系统的高可用性。高可用集群通常有两种工作方式:
• 容错系统:通常是主从服务器方式。从服务器检测主服务器的状态,当主服务工作正常时,从服务器并不提供服务。但是一旦主服务器失效,从服务器就开始代替主服务器向客户提供服务。
• 负载均衡系统:集群中所有的节点都处于活动状态,它们分摊系统的工作负载。一般Web服务器集群、数据库集群和应用服务器集群都属于这种类型。
关于高可用集群的讨论很多,这里就不进行深入的阐述了。

Linux 高性能计算集群(1)

概述
1 集群
1.1 什么是集群
简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点(node)。一个理想的集群是,用户从来不会意识到集群系统底层的节点,在他/她们看来,集群是一个系统,而非多个计算机系统。并且集群系统的管理员可以随意增加和删改集群系统的节点。
1.2 为什么需要集群
集群并不是一个全新的概念,其实早在七十年代计算机厂商和研究机构就开始了对集群系统的研究和开发。由于主要用于科学工程计算,所以这些系统并不为大家所熟知。直到Linux集群的出现,集群的概念才得以广为传播。
对集群的研究起源于集群系统的良好的性能可扩展性(scalability)。提高CPU主频和总线带宽是最初提供计算机性能的主要手段。但是这一手段对系统性能的提供是有限的。接着人们通过增加CPU个数和内存容量来提高性能,于是出现了向量机,对称多处理机(SMP)等。但是当CPU的个数超过某一阈值,象SMP这些多处理机系统的可扩展性就变的极差。主要瓶颈在于CPU访问内存的带宽并不能随着CPU个数的增加而有效增长。与SMP相反,集群系统的性能随着CPU个数的增加几乎是线性变化的。图1显示了这中情况。




图1. 几种计算机系统的可扩展性

集群系统的优点并不仅在于此。下面列举了集群系统的主要优点:
1. 高可扩展性:如上所述。
2. 高可用性:集群中的一个节点失效,它的任务可以传递给其他节点。可以有效防止单点失效。
3. 高性能:负载平衡集群允许系统同时接入更多的用户。
4. 高性价比:可以采用廉价的符合工业标准的硬件构造高性能的系统。
1.2.1 集群系统的分类
虽然 根据集群系统的不同特征可以有多种分类方法,但是一般我们把集群系统分为两类:
• 高可用(High Availability)集群,简称HA集群。这类集群致力于提供高度可靠的服务。
• 高性能计算(High Perfermance Computing)集群,简称HPC集群。这类集群致力于提供单个计算机所不能提供的强大的计算能力。