Resources managers ......(懒得翻译,看不懂去死)
软件架构简介
TORQUE集群由一个head node和多个Compute Nodes构成,head node 运行pbs_server 守护进程,其他compute node则运行pbs_mom守护进程,用于提交和管理作业的客户端指令程序可以安装在任何主机上(可以是一台用户端PC,无需运行pbs_server或pbs_mom进程)。head node上还需要运行一个作业调度进程(daemon),scheduler进程与pbs_server进程交互,以判定compute nodes资源使用情况以及生成节点作业分配策略。
TORQUE集成一个简单的FIFO调度策略,同时也提供代码以帮助用户构建高级调度策略。多数TORQUE用户都选择使用高级调度策略插件,例如Maui 或Moab。
用户可以使用qsub指令将作业提交到pbs_server,当pbs_server收到一个新的作业时,该进程会通知scheduler进程,scheduler从集群中寻找可以分配用于计算该作业的节点资源,并将找到的节点清单发送给pbs_server进程。psb_server进程根据scheduler提供的信息将待计算的作业提交到节点清单中的第一个节点并让该节点加载该作业,该节点被指定为该作业的主要执行者,由该节点负责调用清单中其他节点协同并行处理该作业,该节点称为Mother Superior ,协同执行该作业的其他节点则称为sister moms。
OS:CentOS 6.3 x86_64
TORQUE:4.1.0
角色 | 属性 | 软件清单 |
Head node | Hostname=pbs_server,ip=192.168.100.130 | TORQUE(pbs_server\pbs_sched\trqauthd) |
Compute Nodes | Hostname=pbs_mom_x,ip=192.168.100.13x | TORQUE(pbs_mom\trqauthd) |
创建一个非root帐号(本例中用admin),配置基于该帐号配置sshd服务,保证head node和Compute node间可以用该帐号进行无密码互访(双向访问都使用密钥对,不需输密码)。TORQUE提交作业的命令qsub不能以root帐号运行,故,该帐号将用作提交任务,同时TORQUE作业队列是和非root帐号做一对一绑定的,创建队列时也需要该帐号。因未配置NIS服务,所有节点都需创建该帐号。对于多用户共享的集群,需要创建多个此类帐号。【7.2节运行qsub命令前,全部使用root帐号进行操作】
安装配置
选择集群中一台主机作为TORQUE Head node,该节点上通过运行pbs_server\pbs_sched\trqauth守护进程监视和控制集群中其他compute nodes。
http://www.adaptivecomputing.com/resources/downloads/torque/
通过web浏览器登录到以上链接页面,寻找相应版本软件包下载链接,本试验中使用当前最新版本4.1.0,使用wget 命令下载,得到如下文件:
torque-4.1.0.tar.gz
#mkdir /opt/torque
解压torque-4.1.0.tar.gz,进入解压目录,准备编译安装。
# ./configure --prefix=/opt/torque
<等待>
# make
<等待>
#make install
##################################################################
默认情况下,执行make install 后安装程序会自动创建/var/spool/torque,该路径是TORQUE的家目录,该家目录下有一系列子目录,包括server_priv/、server_logs/、mom_priv/、mom_logs/,以及TORQUE运行时需要调用的其他配置文件。
##################################################################
#vim /etc/bashrc
export TORQUE=/opt/torque
export LD_LIBRARY_PATH=$TORQUE/lib
export PATH=$TORQUE/bin:$TORQUE/sbin:$PATH
使环境变量生效
#source /etc/bashrc
TORQUE作为系统服务以便head node重启后该进程自行启动,为可选步骤。在TORQUE的安装源下已预设相关进程的配置文件,导入系统的/etc/init.d/路径下并通过chkconfig –add加载即可。文件如下:pbs_server、pbs_sched、trqauthd、 pbs_mom
#cd ../torque4.1.0/contrib/init.d/ //找到以上三个文件
#cp trqauthd /etc/init.d/
#chkconfig --add trqauthd
#service trqauthd start
##################################################################
trqauthd是TORQUE集群head node和compute node都需要运行的守护进程,用于授权pbs_mom进程与pbs_server进程之间建立互信连接。该进程已经启动就会驻留在系统内存,客户端程序利用该进程调用本机loopback接口的15005端口通信。该进程支持多线程执行机制,可以处理大量并发请求。
##################################################################
#cp pbs_sched /etc/init.d/
#chkconfig --add pbs_sched
#service pbs_sched start
##################################################################
pbs_sched是TORQUE集群中head node的另外一个核心守护进程,用于监控compute node的运行状态,根据pbs_server传递过来的用户作业脚本要求在集群中寻找可用计算节点并反馈给pbs_server进程。
##################################################################
#cp pbs_server /etc/init.d/
#chkconfig --add pbs_server
#service pbs_server start
##################################################################
pbs_server是TORQUE集群中head node的核心守护进程,用于接收用户提交的作业请求,根据pbs_sched进程提供的可用节点资源清单进行作业分发和回收。
##################################################################
#cp pbs_mom /etc/init.d/ //该步骤可选,参看下面注释
#chkconfig --add pbs_mom
#service pbs_mom start
##################################################################
head node可以有双重身份,也可以通过运行pbs_mom参与计算,在大型集群中最好不要让head node 参与执行计算任务,这样会导致该节点CPU利用率过高影响用户操作该节点的响应速度。
##################################################################
初始化
TORQUE加目录下包含pbs_server的配置文件以及相关信息,其中serverdb文件描述pbs_server配置属性以及队列信息,要运行pbs_server必须先对serverdb做初始化。
TORQUE官方推荐的初始化方法是运行./torque.setup脚本,该脚本文件在TORQUE安装包内提供
#./torque.setup admin ##此处需附带一个用户名
##################################################################
torque.setup脚本是通过调用pbs_server –t指令来初始化serverdb,附加的帐号将被指定为TORQUE的进程管理员和执行者。该用户名不能为root。
##################################################################
初始化完成后重启pbs_server服务
#qterm //停用pbs_server
#service pbs_server start //重新启用pbs_server
#service pbs_sched restart //重新启用pbs_sched
TORQUE配置文件都存放在环境下,2.1之后的版本TORQUE_HOME的默认路径是/var/spool/torque/。pbs_server必须能够从网络中发现识别可以受控的compute nodes,并将这些节点列入TORQUE_HOME/server_priv/nodes文件中。通常只需使用一行代码标注这些compute node的主机名即可,当然,也可以为每个节点添加附加属性。
nodes 文件语法格式;
node-name[:ts] [np=] [gpus=] [properties]
[:ts]参数标记节点为timeshared,该类节点会被列入pbs_server的管控清单并汇报节点状态,但pbs_server不会给该类节点分发作业。
[np=]参数定义节点的处理核心数量,该参数是个虚拟数值,可以不严格按照节点的实际内核数量来设定。如果pbs_server设定了auto_node_np 属性,则np参数可以自动被server检测到。设置命令为:
qmgr -c set server auto_node_np = True
[gpus=]参数用于标记节点附加的GPU数量,数值也可以不严格按照节点GPU实际数量来填写。
[properties]参数允许用设定特殊的字符串对节点进行标记,字串必须以字母开头。
Example:
pbs_mom_1 np=4
pbs_mom_2 np=4 gpus=1
pbs_mom_3 np=4
详见5.5节。
安装配置
在一个集群中Compute node数量通常很多,可以逐个节点进行源代码安装,安装路径及过程同pbs_server。安装完成后设定TORQUE环境变量,过程与pbs_server设定相同。
(也可以在head node上用make package 命令生成自解压文件*.sh,然后拷贝的Compute node上解压运行,此处不做介绍。)
安装完成后,
将/torque-4.1.0/contrib/init.d/pbs_mom文件拷贝到/etc/init.d下
#cp contrib/init.d/pbs_mom /etc/init.d //文件复制
#chkconfig --add pbs_mom //将pbs_mom加载为系统进程
将/torque-4.1.0/contrib/init.d/trqauthd文件拷贝到/etc/init.d下
#cp contrib/init.d/trqauthd /etc/init.d //文件复制
#chkconfig --add trqauthd //将trqauthd加载为系统进程
Head node要管理到集群中受控的Compute node,一方面在head node上要修改nodes文件,添Compute node 主机名,另一方面还要在Compute node上修改server_name文件,以建立pbs_mom和pbs_server进程的信任关系。
该文件初始化内容是本机的hostname,只需修改成head node的主机名即可。
#vim /var/spool/torque/server_name
pbs_server
#service trqauthd start //激活trqauthd进程
#service start //激活pbs_mom进程
Head node 分发过来的作业执行过程中在每个节点都会生成运行结果和错误的日志文件(参考7.2节pbs脚本文件中###Out files 内容),该临时文件最终会被compute node 以scp的方式回传到head node,由于提交作业时用的是非root帐号,会出现因帐号权限不足而无法访问目标目录或文件的情形,被调用暂存这些文件的目录是/var/spool/torque/spool/,需将其权限修改为1777。
#chmod 1777 /var/spool/torque/spool
compute node 在任务执行结束时scp回传文件到head node上提交作业的工作路径时同样会遇到非root帐号访问权限不够的问题,在head node上要把提交作业的工作目录权限修改成1777。(若head node 和compute node不能无密码互访也会失败)
#chmod 1777 /usr/app/example/job1/ //本例工作路径
以上配置完成后,在head node上可以查看到归其管理的Compute node状态,
通过pbsnodes –a命令查看配置是否成功,
#pbsnodes –a
pbs_mom_1
state = free
np = 2
ntype = cluster
status = ***** //大串字符
mom_service_port = 15002
mom_manager_port = 15003
GPUS = 0
pbs_mom_2
state = free
np = 2
ntype = cluster
status = ***** //大串字符
mom_service_port = 15002
mom_manager_port = 15003
GPUS = 0