PBS作业提交系统集群搭建(以Torque4.2.3为例)

PBS简介  

      PBS是一个批处理作业和计算机系统资源管理软件包,它就可以接受批处理作业、shell脚本和控制属性,作业运行前对其储存并保护,然后运行作业,并且把输出转发回提交者。PBS可以被安装并配置运行在单机系统或多个系统组来支持作业处理。由于PBS的灵活性,多个系统可以以多种方式组合。


PBS安装环境及所需安装包

    本文以Red Hat Enterprise Linux 6.3为例,在VM上运行iso镜像,安装Torque4.2.3,首先需要安装gcc编译器,否则在安装torque时会提示你不能make,需要安装一些安装包。系统提示的安装包可以在iso镜像中找到,在虚拟机设置中可以选择显示,打开光盘Red Hat Enterprise Linux 6中会发现packages文件夹,在文件夹中可以找到你所需的安装包,在安装过程中可能会提示你安装其他安装包,比如安装openssl-devel时会提示你安装krb5-devel以及其他安装包,找到你的系统所需要的安装包(32位为i586,64位为x86_64)递归进行安装,并安装gcc编译器(也可在光盘中找到)。

PBS安装前配置


  1. 配置基于非root账号的管理头节点到各个通用计算服务节点的ssh无密码互联,方法见我的另一篇博客:点击这儿
    • TORQUE提交作业的命令qsub不能以root帐号运行,故此非root帐号将用作提交任务
    • 同时TORQUE作业队列是和非root帐号做一对一绑定的,创建队列时也需要该非root帐号
  2. 配置集群中的 hosts 解析关系(具体的配置方法见这个专题中的第一篇博客:点击这儿),这儿不配的话不再是速度快慢的问题了,而是pbs管理头节点根本无法发现集群中的通用计算服务节点,总会报如下错误:
    • pbsnodes: Server has no node list MSG=node list is empty - check 'server_priv/nodes' file
  3. 在管理头节点上安装torque-4.2.3.1
    • ./configure --prefix=/usr/local/torque-4.2.3.1
      make
      make install
    • 产生需要安装到通用计算服务节点上的包(这一步具体产生哪些包,分别是什么作用等我完全搞明白了再来补充),具体的安装过程放在后面配置通用计算服务节点的时候讲解
      • make packages
  4. 添加 torque 的可执行文件目录到环境变量 $PATH(管理头节点、所有通用计算服务节点都添加):
    • 修改文件 /etc/profile 在最后添加如下内容:
    • #Add by myself
      export TORQUE=/usr/local/torque-4.2.3.1
      export LD_LIBRARY_PATH=$TORQUE/lib
      export PATH=$TORQUE/bin:$TORQUE/sbin:$PATH
      
  5. 添加 trqauthd 和 pbs_sched 和 pbs_server 和 pbs_mom(这个是可选的)( 目录 /torque-4.2.3.1/contrib/init.d/ 下)为系统服务
    • head node可以有双重身份,也可以通过运行pbs_mom参与计算,在大型集群中最好不要让head node 参与执行计算任务,这样会导致该节点CPU利用率过高影响用户操作该节点的响应速度
    • cp trqauthd pbs_sched pbs_server /etc/init.d/
      cd /etc/init.d
      chkconfig --add trqauthd
      chkconfig --add pbs_sched
      chkconfig --add pbs_server
  6. 指定主节点 IP 对应的 主机名称
    • vi /etc/hosts
    • 换行添加如下内容:
      • 192.168.1.100 sdu.master
        当然IP要根据你的IP变了,应该用的是集群的内网IP,等我来验证
    • 这一步是用来解决当用命令 ./torque.setup boatman 初始化PBS时候时出现下错误的:
      • PBS_Server: LOG_ERROR::pbsd_main, unable to determine local server hostname - getaddrinfo(sdu.master) failed, h_errno=1
        
  7. torque server db 初始化
    • cd /usr/local/src/torque-4.2.3.1
      ./torque.setup root
    • 初始化完成后重启 pbs server:
      • 停用pbs server
        • qterm
      • 重新启用pbs server
        • service pbs_server start
      • 重新启用pbs sched
        • service pbs_sched restart
  8. 修订pbs server的nodes文件
    • 设定 server 自动检测通用计算服务节点的 cpu 核心数目
      • qmgr -c "set server auto_node_np = True"
    • nodes 文件位于目录 /var/spool/torque/server_priv 下,我最开始还是看到的着,但等到想编辑的时候就找不到了,不知什么时候丢了(有帖子说执行命令pbs_server -t create会冲掉 nodes 文件,根据我的经历貌似是这样的,其实 server db 的初始化是包含在./torque.setup root 这一步骤中的,所有完全没有必要单独执行那个create 命令,至少在初始化的时候是不需要的)。如果没有的话,自己新建,添加如下内容:
      • sdu.01
        sdu.02
        sdu.03
        sdu.04
        sdu.11
        sdu.12
        sdu.13
        sdu.14
      • 当然,主机名根据你的主机名做相应更改了
  9. 相关目录权限的修改
    • 见 “各个通用计算服务节点上所要做的配置” 部分的步骤7

  • 各个通用计算服务节点上所要做的配置
  1. scp 文件 torque-package-clients-linux-x86_64.sh 和 torque-package-mom-linux-x86_64.sh 到各个通用计算服务节点上(这几个文件就是第二步中那个 make packages 命令生成的)
  2. 在各个通用计算服务节点上直接执行安装上述两个包
    • ./torque-package-clients-linux-x86_64.sh --install
      ./torque-package-mom-linux-x86_64.sh --install
  3. 在各个通用计算服务节点上添加 pbs_mom 为系统服务:
    • 首先从torque-4.2.3.1源码目录 /torque-4.2.3.1/contrib/init.d/ 下 scp 文件pbs_mom 到各个通用计算服务节点的 /etc/init.d/pbs_mom
      • scp contrib/init.d/pbs_mom root@192.168.1.1:/etc/init.d/pbs_mom
    • 添加pbs_mom为系统服务
      • chkconfig --add pbs_mom
  4. 同样的操作添加 trqauthd 为系统服务:
    • 首先 scp
    • 接着 chkconfig
  5. 配置守护进程信任关系
    • Head node要管理到集群中受控的Compute node,一方面在head node上要修改nodes文件,添Compute node 主机名,另一方面还要在Compute node上修改server_name文件,以建立pbs_mom和pbs_server进程的信任关系。该文件初始化内容是本机的hostname,只需修改成head node的主机名即可
    • vi /var/spool/torque/server_name
    • 修改为如下内容:
      • sdu.master
        #当然主机名称要改成你的了
  6. 在通用计算服务节点上启动服务 trqauthd 和 pbs_mom
    • service trqauthd start
      service pbs_mom start
  7. 修订相关目录的权限
    • 在各个通用计算服务节点上修改目录 /var/spool/torque/spool/ 的权限为 1777
      • Head node 分发过来的作业执行过程中在每个节点都会生成运行结果和错误的日志文件(等我 PBS 脚本调试好了再贴过来),该临时文件最终会被compute node 以scp的方式回传到head node,由于提交作业时用的是非root帐号,会出现因帐号权限不足而无法访问目标目录或文件的情形,被调用暂存这些文件的目录是/var/spool/torque/spool/,需将其权限修改为1777
      • chmod 1777 /var/spool/torque/spool
    • 在管理头节点上修改各个通用计算服务节点 scp 回传文件所到目录(/var/spool/torque/server_priv/jobs)的权限为 1777(这一步骤暂时还是有疑问的),等我理解了再来补充解释
      • compute node 在任务执行结束时scp回传文件到head node上提交作业的工作路径时同样会遇到非root帐号访问权限不够的问题,在head node上要把提交作业的工作目录(这儿就是 /var/spool/torque/server_priv/jobs)权限修改成1777。(若head node 和compute node不能无密码互访也会失败)
      • mkdir sched_jobs
        chmod 1777 sched_jobs/

  • 整个集群配置的验证
  1. 通过下命令可以查看各个通用计算服务节点的状态:
    • pbsnodes -a
    • 如果一切正常的话就可以看见类似下面的内容:
      • sdu.01
             state = free
             np = 32
             ntype = cluster
             status = rectime=1372722492,varattr=,jobs=,state=free,netload=415055,gres=,loadave=0.00,ncpus=32,physmem=32858136kb,availmem=66923828kb,totmem=67952656kb,idletime=1673,nusers=1,nsessions=6,sessions=3516 3520 3522 3548 3550 3575,uname=Linux sdu.01 2.6.32-131.0.15.el6.x86_64 #1 SMP Tue May 10 15:42:40 EDT 2011 x86_64,opsys=linux
             mom_service_port = 15002
             mom_manager_port = 15003
        
        sdu.02
             state = free
             np = 32
             ntype = cluster
             status = rectime=1372722471,varattr=,jobs=,state=free,netload=1004261,gres=,loadave=0.00,ncpus=32,physmem=32858136kb,availmem=66920092kb,totmem=67952656kb,idletime=1651,nusers=1,nsessions=6,sessions=3521 3525 3527 3554 3556 3582,uname=Linux sdu.02 2.6.32-131.0.15.el6.x86_64 #1 SMP Tue May 10 15:42:40 EDT 2011 x86_64,opsys=linux
             mom_service_port = 15002
             mom_manager_port = 15003
        
        sdu.03
             state = free
             np = 32
             ntype = cluster
             status = rectime=1372722480,varattr=,jobs=,state=free,netload=1033615,gres=,loadave=0.00,ncpus=32,physmem=32858140kb,availmem=66919464kb,totmem=67952660kb,idletime=1637,nusers=1,nsessions=6,sessions=3482 3486 3488 3513 3516 3539,uname=Linux sdu.03 2.6.32-131.0.15.el6.x86_64 #1 SMP Tue May 10 15:42:40 EDT 2011 x86_64,opsys=linux
             mom_service_port = 15002
             mom_manager_port = 15003
        
        sdu.04
             state = free
             np = 32
             ntype = cluster
             status = rectime=1372722499,varattr=,jobs=,state=free,netload=1075188,gres=,loadave=0.00,ncpus=32,physmem=32858136kb,availmem=66916928kb,totmem=67952656kb,idletime=1679,nusers=1,nsessions=6,sessions=3487 3491 3493 3519 3521 3546,uname=Linux sdu.04 2.6.32-131.0.15.el6.x86_64 #1 SMP Tue May 10 15:42:40 EDT 2011 x86_64,opsys=linux
             mom_service_port = 15002
             mom_manager_port = 15003
        
        sdu.11
             state = free
             np = 32
             ntype = cluster
             status = rectime=1372722498,varattr=,jobs=,state=free,netload=1052504,gres=,loadave=0.00,ncpus=32,physmem=32858136kb,availmem=66920564kb,totmem=67952656kb,idletime=1679,nusers=1,nsessions=6,sessions=3481 3485 3487 3514 3516 3541,uname=Linux sdu.11 2.6.32-131.0.15.el6.x86_64 #1 SMP Tue May 10 15:42:40 EDT 2011 x86_64,opsys=linux
             mom_service_port = 15002
             mom_manager_port = 15003
        
        sdu.12
             state = free
             np = 32
             ntype = cluster
             status = rectime=1372722459,varattr=,jobs=,state=free,netload=977840,gres=,loadave=0.00,ncpus=32,physmem=32858136kb,availmem=66916144kb,totmem=67952656kb,idletime=1637,nusers=1,nsessions=6,sessions=3617 3621 3623 3648 3651 3677,uname=Linux sdu.12 2.6.32-131.0.15.el6.x86_64 #1 SMP Tue May 10 15:42:40 EDT 2011 x86_64,opsys=linux
             mom_service_port = 15002
             mom_manager_port = 15003
        
        sdu.13
             state = free
             np = 32
             ntype = cluster
             status = rectime=1372722501,varattr=,jobs=,state=free,netload=1083084,gres=,loadave=0.00,ncpus=32,physmem=32858136kb,availmem=66922812kb,totmem=67952656kb,idletime=1682,nusers=1,nsessions=6,sessions=3501 3505 3507 3533 3538 3560,uname=Linux sdu.13 2.6.32-131.0.15.el6.x86_64 #1 SMP Tue May 10 15:42:40 EDT 2011 x86_64,opsys=linux
             mom_service_port = 15002
             mom_manager_port = 15003
        
        sdu.14
             state = free
             np = 32
             ntype = cluster
             status = rectime=1372722502,varattr=,jobs=,state=free,netload=1115089,gres=,loadave=0.00,ncpus=32,physmem=32858136kb,availmem=66922072kb,totmem=67952656kb,idletime=1682,nusers=1,nsessions=6,sessions=3496 3500 3502 3527 3530 3555,uname=Linux sdu.14 2.6.32-131.0.15.el6.x86_64 #1 SMP Tue May 10 15:42:40 EDT 2011 x86_64,opsys=linux
             mom_service_port = 15002
             mom_manager_port = 15003
  2. 至此配置方面应该不会有什么大的问题了,可能的问题我会在后期的测试中在 “PBS集群搭建” 这个专题中陆续给出,望有兴趣、需要的朋友多多关注,多多指点
  3. 这儿再记录一个比较奇怪的问题,按照上面的配置做了应该是不会有问题的,但是某次我 “pbsnodes -a” 的时候,还是报了“pbsnodes: Server has no node list MSG=node list is empty - check 'server_priv/nodes' file”的错误,索性重启了一遍集群,就OK了,不知道到底为什么

上一篇:用C#实现pdf文件的完整性验证


下一篇:[Java] 利用xpdf库获取pdf文件的指定范围文本内容