准备环境:系统环境:selinux and iptables disabled
http://hi.baidu.com/lovetolinux/blog/item/2e11638eb0eb56f7513d924d.html   
http://blog.csdn.net/educast/article/details/7168467(整理挺好,可做参考)/2e11638eb0eb56f7513d924d.html
以上次实验为基础:
desktop2.example.com(在这里是调度的主机)
desktop99.example.com
desktop80.example.com(这两个节点是计算节点)
步骤(1)为使各个节点之间(包括调度的主机和两个计算节点)
在主调度节点desktop2.example.com上:
useradd -u 600 sushan
mount 192.168.0.99:/home/sushan /home/sushan
(如果在cd /home/sushan ll 后发现所属组或者所属者为nobody或者是其他的非sushan的话,那么你可
以尝试重启,然后查看!)
在所有节点上:
vi /etc/hosts (所有节点192.168.0.2 192.168.0.99 192.168.0.80)   

   
   
   
   
  1. #127.0.0.1 localhost.localdomain localhost
    (注意,这行必须注释,否则连不上计算节点) 
  2. desktop2.example.com 192.168.0.2 
  3. desktop99.example.com 192.168.0.99 
  4. desktop80.example.com 192.168.0.80 

vi /etc/hosts.equiv (服务节点: desktop2.example.com)

   
   
   
   
  1. desktop99.example.com 
  2. desktop80.example.com  

vi /etc/hosts.equiv (计算节点:desktop99.example.com.desktop80.example.com)

   
   
   
   
  1. desktop2.example.com  

(2)为了在这三个节点之间建立信任的连接:
在主调度节点上:ssh desktop99.example.com
ssh desktop80.example.com

在计算节点desktop99.example.com上:
ssh desktop2.example.com
在计算节点desktop80.example.com上:
ssh desktop2.example.com
(3)在主调度节点上:
get torque-3.0.0.tar.gz
tar zxf torque-3.0.0.tar.gz
cd torque-3.0.0
./configure --with-scp --with-default-server=desktop2.example.com
make
make install

make packages
(4)在主调度节点desktop2.example.com上:
cd torque-3.0.0
scp torque-package-clients-linux-x86_64.sh torque-package-mom-linux-x86_64.sh deskt
op99:

scp torque-package-clients-linux-x86_64.sh torque-package-mom-linux-x86_64.sh deskt
op99:

cd torque-3.0.0/contrib/init.d/
cp pbs_sched /etc/init.d/
cp pbs_server /etc/init.d/
scp pbs_mom desktop99:/etc/init.d/
scp pbs_mom desktop80:/etc/init.d/(这些都得用root身份才可以的。)

(5)在2个计算节点desktop99.example.com上:
root
cd ~
./torque-package-clients-linux-x86_64.sh --install
./torque-package-mom-linux-x86_64.sh  --install

(6)在主调度节点desktop2.example.com上:
cd torque-3.0.0
./torque.setup root (设置torque的管理帐户)

torque作业调度系统_第1张图片
(7)在主调度节点desktop2.example.com
cd /var/spool/torque
cat server_name
显示:
desktop2.example.com
cd /var/spool/torque/server_priv
vi nodes

   
   
   
   
  1. desktop99.example.com 
  2. desktop80.example.com 

qterm -t quick (停止torque)
service pbs_server start (启动torque)
service pbs_sched start
(此为torque的调度进程)
(8)在计算节点desktop99.example.com和desktop80.example.com上
vi /var/spool/torque/mom_priv/config (所有计算节点执行此配置)

   
   
   
   
  1. $pbsserver desktop2.example.com(注意写的是服务节点主机哦!) 
  2. $logevent 255 

ll /var/spool/torque/mom_priv
可以看到:jobs
在2个计算节点上:
/etc/init.d/pbs_mom start
计算节点假设在desktop99.example.com上:
cd ~
mpdboot -n 2 -f mpd.hosts
mpdtrace

显示2个主机!
desktop99.example.com
desktop99.example.com

(9)在主调度节点desktop2.example.com上:
su - sushan(torque的调度需要使用非root用户,torque是集群节点调度器)
vi job1.pbs
vi job1.pbs (串行作业,指的是在一个单用户,单机上运行的。不使用集群)

   
   
   
   
  1. #!/bin/bash 
  2. #PBS -N job1 
  3. #PBS -o job1.log 
  4. #PBS -e job1.err 
  5. #PBS -q batch 
  6. cd /home/sushan 
  7. echo Running on hosts `hostname` 
  8. echo Time is `date` 
  9. echo Directory is $PWD 
  10. echo This job runs on the following nodes: 
  11. cat $PBS_NODEFILE 
  12. echo This job has allocated 1 node 

./prog(/home/sushan/prog)
qsub job1.pbs(提交作业)
qstat (查看作业)
pbsnodes (查看节点)
从中你可以看到jobs = 0/12.desktop2.example.com 类似的东西.
在desktop99.example.com和desktop80.example.com上:
top查看后台运行情况!
vi job2.pbs (并行作业)

   
   
   
   
  1. #!/bin/bash 
  2. #PBS -N job2.psb 
  3. #PBS -o job2.log 
  4. #PBS -e job2.err 
  5. #PBS -q batch 
  6. #PBS -l nodes=2 
  7. cd /home/sushanecho Time is `date` 
  8. echo Directory is $PWD 
  9. echo This job runs on the following nodes: 
  10. cat $PBS_NODEFILE 
  11. NPROCS=`wc -l < $PBS_NODEFILE` 
  12. echo This job has allocated $NPROCS nodes 
  13. mpiexec -np 8 /home/sushan/prog 

vi prog

   
   
   
   
  1. #!/bin/bash 
  2. echo 1000000000 | ./icpi 

(icpi程序是mpi自带的,拷贝过来即可,在软件的安装包里有圆周率计算的原代码icpi.c,而此时的icpi是已经编译好的可执行文件。输入的数字intervals指的是精确度。也就是说精确度越大使用的时间越长。主要搭建的是多个计算节点并行计算,能够实现比单台机子节省时间的效果。)
chmod +x prog

测试结果如下:
[sushan@desktop2 ~]$ qsub job1.pbs(注意在服务节点上提交的哦!)
7.desktop2.example.com
[sushan@desktop2 ~]$ qstat
Job id Name User Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
7.desktop2 job1 sushan 0 R batch
[sushan@desktop2 ~]$ pbsnodes
desktop99.example.com
  state = job-exclusive (只有一个节点在计算) 。。。。。。。。。。。。
desktop80.example.com
  state = free
在集群节点的情况下,2个节点一起计算的时候:
[sushan@desktop2 ~]$qsub job2.pbs(注意实在服务节点提交的哦!)
[sushan@desktop2 ~]$qstat
[sushan@desktop2 ~]$pbsnodes
desktop99.example.com

state = job-exclusive (两个节点都在计算)
np = 1
ntype = cluster
jobs = 0/8.server1.example.com
status =
desktop80.example.com
state = job-exclusive (两个节点都在计算)
np = 1
ntype = cluster
jobs = 0/8.server1.example.com
status =   
如下图:

torque作业调度系统_第2张图片

注:1. 以上测试我是以sushan用户测试,确保所有节点上有此用户,并且在计算节点上
的sushan 用户目录中有 prog 和 icpi 两个可执行程序
2. 启动mpd程序时要使用sushan   用户 因为在调度时会连接计算节点上/tmp/
mpd2.console_sushan