一、关于PBS
1. PBS介绍
PBS是功能齐全、历史悠久、支持广泛的本地集群调度器。 PBS的目前包括openPBS,PBS Pro和Torque三个主要分支。 其中OpenPBS是最早的PBS系统,目前已经没有太多后续开发,PBS pro是PBS的商业版本,功能最为丰富。Torque是Clustering公司接过了OpenPBS,并给与后续支持的一个开源版本。应用PBS提交任务则会形成任务队列,依次执行,有效分配资源,避免资源竞争。否则CPU时间片会轮流分配给各个人的任务,从而影响所有人的正常作业。
torque 由三个服务组成:
pbs_server:资源管理系统的服务器
pbs_mom: 客户端资源监视器,负责监视各客户节点(计算节点)的资源使用情况
pbs_sched :任务调度器(自带的这个调度器功能比较简单有限,经常不用它而搭配更强大的 maui)
pbs_server 和 pbs_sched 都要装在管理节点(服务器)上,而 pbs_mom 要装到每一个计算节点上(如果管理节点不用于计算,可以不装)
2. 软硬件准备
机器准备:
3个节点(dellnode1、dellnode2、dellnode3)
dellnode1:管理节点、计算节点(安装pbs_server、pbs_sched、pbs_mom)
dellnode2:计算节点(安装pbs_mom)
dellnode3:计算节点(安装pbs_mom)
操作系统:
Centos 6.5 64位
二、系统配置
由于本次配置是在上篇中多节点mpi环境搭建下配置的,其用户建立、hosts配置、ip、无密登录等见上文(https://my.oschina.net/zctzl/blog/1560593)
注意:在计算节点上要有非root用户,且和管理节点要提交作业的用户一致,保持UID和GID相同,因为torque调度不允许root用户,在各节点上建立相同用户名及uid帐号。(本次配置3个节点的用户都为mpiuser,且UID和GID都相同)
三、安装torque
1.从官网下载压缩文件
(下载地址:http://www.adaptivecomputing.com/support/download-center/torque-download/)
2.管理节点(dellnode1)的安装配置
管理节点使用编译安装的方式
(注:程序文件安装在了 /usr/local/torque 下,配置则文件位于/var/spool/torque下)
安装部分
tar -zxvf torque-6.1.1.1.tar.gz #将上传的压缩包解压
安装torque依赖的其他相关库和编译器等环境
sudo yum install -y libxml2-devel openssl-devel gcc gcc-c++ boost-devel libtool
进入解压目录,配置安装信息
cd torque-6.1.1.1
# --prefix指定安装路径,--with-default-server指定默认管理节点(不指定也会默认dellnode1)
./configure --prefix=/usr/local/torque --with-default-server=dellnode1
# 若提示缺少某库或编译器,直接使用yum安装即可,然后再次运行改命令
配置完成后,会显示相关配置信息,并提示 “Ready for 'make' ”,表示需要的相关环境已满足,可以进行编译
编译、安装、打包
make
sudo make install #此步骤需要管理员权限
make packages #生成后面安装计算节时需要的文件,会生成5个可执行脚本文件
配置部分
配置环境变量,所有用户在/etc/profile里配置,当前用户在~/.bashrc里配置
vim ~/.bashrc #添加下图所示内容
source ~/.bashrc #使其生效
把服务启动脚本pbs_server、pbs_mom、pbs_sched、trqauthd复制到 /etc/init.d 下,并设置开机启动。
#服务启动脚本在解压目录下的contrib/init.d下。
sudo cp contrib/init.d/{pbs_{server,sched,mom},trqauthd} /etc/init.d/
sudo chkconfig --add pbs_server
sudo chkconfig --add pbs_sched
sudo chkconfig --add pbs_mom
sudo chkconfig --add trqauthd
初始化,设置TORQUE的管理用户,pbs_server 不要启动起来,否则 ./torque.setup root 无法完成
sudo ./torque.setup mpiuser #设置mpiuser用户为管理用户
#torque.setup脚本是通过调用pbs_server –t指令来初始化serverdb,附加的帐号将被指定为TORQUE的进程管理员和执行者。
配置 /var/spool/torque/server_priv/nodes 文件,指定哪些节点作为计算节点,若管理节点不参与计算则去掉dellnode1
vim /var/spool/torque/server_priv/nodes #前面为节点名 后面为cpu核数
创建/var/spool/torque/mom_priv/config文件
vim /var/spool/torque/mom_priv/config #内容如下图,指定管理节点为dellnode1
确保/var/spool/torque下的目录spool和undelivered的权限为777(默认就是777)
开启/重启服务,再此之前可以先用qterm命令关闭服务
sudo service pbs_server start
#pbs_server是TORQUE集群中head node的核心守护进程,用于接收用户提交的作业请求,根据pbs_sched进程提供的可用节点资源清单进行作业分发和回收
sudo service pbs_sched start
#pbs_sched是TORQUE集群中head node的另外一个核心守护进程,用于监控compute node的运行状态,根据pbs_server传递过来的用户作业脚本要求在集群中寻找可用计算节点并反馈给pbs_server进程
sudo service pbs_mom start
sudo service trqauthd start
#trqauthd是TORQUE集群head node和compute node都需要运行的守护进程,用于授权pbs_mom进程与pbs_server进程之间建立互信连接
可以使用下面命令查询服务或进程状态
#服务状态查询
/etc/init.d/pbs_server status
/etc/init.d/pbs_sched status
/etc/init.d/pbs_mom status
/etc/init.d/trqauthd status
#相关进程查询
ps -e | grep pbs #显示pbs_server、pbs_sched、pbs_mom进程
ps -e | grep trqauthd #显示trqauthd进程
可以在所有配置完成后们可以重启所有相关服务,以确保更改有效
sudo /etc/init.d/pbs_server restart
sudo /etc/init.d/pbs_sched restart
sudo /etc/init.d/pbs_mom restart
sudo /etc/init.d/trqauthd restart
使用qnodes命令查看各节点状态,不过此时除了dellnode1,其他2个节点的状态都还是 down ,因为相应计算节点上的 pbs_mom 服务还没启动。
qnodes
3.计算节点的安装配置
安装方法:
①如果源码是放在共享目录(如NFS)下,那么可以直接到计算节点上执行如下命令即可
make install_mom install_clients
②可以在 make 编译完之后执行 make packages,他会生成如下5个安装包
把 clients 和 mom 对应的两个包传到每个计算节点上进行安装
如果客户端不同,则不能直接使用那两个脚本,而需要在客户端执行:解压、 ./configure、make
③configure 之后可以不 make,直接 make rpm,会在 ~/rpmbuild/RPMS/x86_64/ 下生成如下rpm安装包,对于服务器节点,可以都安装,对于客户端,只安装 torque-client 和 torque 就行了。
这里我们选择第二种方法(下面以dellnode2为例,dellnode3操作与其相同)
cd ~/torque-6.1.1.1 #进入解压目录
scp torque-package-clients-linux-x86_64.sh mpiuser@dellnode2:~/
scp torque-package-mom-linux-x86_64.sh mpiuser@dellnode2:~/
ssh dellnode2 #登录到dellnode2进行安装
sudo ./torque-package-clients-linux-x86_64.sh --install
sudo ./torque-package-mom-linux-x86_64.sh --install
配置
配置环境变量,和管理节点一样
将管理节点解压目录下的contrib/init.d下的pbs_mom、trqauthd复制到各计算节点 并设置为系统服务
cd /home/mpiuser/torque-6.1.1.1/contrib/init.d #具体视自己的解压目录而定
scp pbs_mom trqauthd mpiuser@dellnode2:~/
ssh dellnode2 #登录到dellnode2进行配置
sudo cp pbs_mom trqauthd /etc/init.d
chkconfig --add pbs_mom
chkconfig --add trqauthd
确保/var/spool/torque目录下的servern_name文件内容为管理节点名(默认是)
cat var/spool/torque/server_name #看输出是否为dellnode1
创建/var/spool/torque/mom_priv/config文件
vim /var/spool/torque/mom_priv/config #内容如下图,指定管理节点为dellnode1
启动服务
sudo /etc/init.d/pbs_mom start
sudo /etc/init.d/trqauthd start
至此,dellnode2配置完成,再对dellnode3进行同样的操作
进入到管理节点输入qnode即可发现所有节点的状态都为free
三、测试
在共享目录/mpiShareDir下运行mpi测试程序
将mpi解压包目录下的例子复制到该文件夹下
cp /home/mpiuser/mpich-3.2.1/examples/cpi /mpiShareDir
编写pbs脚本
(PBS命令及脚本文件书写:http://blog.csdn.net/qianyun6/article/details/4871343
http://blog.csdn.net/ztq157677114/article/details/51718662)
vim a.pbs
输入以下内容
提交任务
qsub a.pbs
可以使用”qstat -a”和“qstat -q”查看任务或队列情况
(PBS队列配置:http://blog.sina.com.cn/s/blog_403aa80a0101bjjg.html)
结果会输出到pi.out文件下,运行效果如下图所示
问题:虽然有3个计算节点可以使用,但是实际发现每次程序总是只在一个节点上运行,开始我以为是配置有问题导致程序只能在管理节点上运行,后来经过修改/var/spool/torque/server_priv/nodes文件,将dellnode1删除,并重启dellnode1的pbs_server和pbs_sched服务后,发现任务可以提交到dellnode2或dellnode3(需要将nodes文件里的dellnode2也删除)上运行,所以服务配配置应该是没有问题的,猜想可能是提交任务的命令的参数或队列的属性之类的没有设置好。
参考教程:
http://blog.csdn.net/u012460749/article/details/78583026
http://goodluck1982.blog.sohu.com/242717652.html
http://blog.csdn.net/secondjanuary/article/details/9281897
http://www.360doc.com/content/17/0511/10/25694179_652928275.shtml