安装 SGE
开始安装 SGE。 vm1作为 sge的 master主机。用户账号和系统服务这些信息都通过 NIS服务器来统一管理。 master主机和执行机通过 NFS服务共享 $SGE_ROOT。 sge_qmaster服务的端口号为 6444/tcp, sge_execd的端口号为 6445/tcp。没有 shadow主机。采用 classic spooling。
其中 master主机和所有的 exec主机共享 $SGE_ROOT,这是最容易管理、测试、调试的方法。 sge网站上的一篇文章 (链接: http://gridengine.sunsource.net/howto/nfsreduce.html )总共给了四种方案,摘录如下:
Configuration |
Description |
Advantage |
Disadvantage |
---|---|---|---|
default |
executables, configuration files, spool directories: all shared |
simple to install easy to upgrade easy to debug |
potentially significant NFS traffic |
local spool directories |
executables, configuration files: shared . spool directories: local to each compute host |
simple to install easy to upgrade significant reduction in NFS traffic |
less convenient to debug (must go to individual host to see execd messages file) |
local executable files |
configuration files: shared executables, spool directories: local to each compute host |
near-elimination of NFS traffic (NOTE: consequences especially seen when running massively parallel jobs across many nodes) |
less convenient to install and upgrade (must modify files on every host) less convenient to debug |
local configuration files |
executables, configuration files, spool directories: all local to each compute host |
elimination of NFS requirement |
less convenient to install and upgrade less convenient to debug less convenient to change some configuration parameters (must modify files on every host) loss of shadow master functionality; partial loss of qacct functionality |
上面第四种, local configuration files的方式,完全不需要 NFS。这篇文章随后介绍了如何用这种“完全不需要 NFS”的方式安装 SGE,方法如下:
在每台机器上都设置 SGE_ROOT=/opt/sge,在 vm1上创建 sgeadmin用户,修改 /etc/services文件,加入下面两行:
sge_qmaster 6444/tcp
sge_execd 6445/tcp
然后, /usr/lib/yp/ypinit -m重新构建 NIS数据库。
[root@vm1 sge]# tar zxvf /software/sge-6.1u5-common.tar.gz
[root@vm1 sge]# tar xvf /software/sge-6.1u5-bin-lx24-x86.tar.gz
[root@vm1 sge]# chown -R sgeadmin:sgeadmin $SGE_ROOT
[root@vm1 sge]# util/setfileperm.sh $SGE_ROOT
注:因为安装时出现“不能创建 default目录“的错误,所以先把 $SGE_ROOT的所有者改为 sgeadmin,然后运行 util/setfileperm.sh脚本设置文件权限。
[root@vm1 sge]# ./install_qmaster
一路回车就好。
[root@vm1 sge]# . default/common/settings.sh
[root@vm1 sge]# ps ax | grep sge
5016 ? S 0:00 /opt/sge/bin/lx24-x86/sge_qmaster
5044 ? S 0:00 /opt/sge/bin/lx24-x86/sge_schedd
安装执行机:
[root@vm1 sge]# qconf -sh
vm1
[root@vm1 sge]# ./install_execd
一路回车。
[root@vm1 sge]# ps ax | grep sge
5016 ? S 0:00 /opt/sge/bin/lx24-x86/sge_qmaster
5044 ? S 0:00 /opt/sge/bin/lx24-x86/sge_schedd
5444 ? S 0:00 /opt/sge/bin/lx24-x86/sge_execd
在 vm2,vm3上安装执行机。
首先导出 $SGE_ROOT。修改 vm1上的 /etc/exports:
/home * (rw,sync)
/opt/sge * (rw,sync)
重启 nfs服务:
[root@vm1 sge]# service nfs restart
[root@vm1 sge]# qconf -ah vm2
vm2 added to administrative host list
[root@vm1 sge]# qconf -as vm2
vm2 added to submit host list
在 vm2上:
[root@vm2 root]# echo $SGE_ROOT
/opt/sge
[root@vm2 root]# mount -t nfs vm1:/opt/sge /opt/sge
[root@vm2 root]# cd $SGE_ROOT
中途出现错误:
The current hostname is resolved as follows:
Hostname: vm2
Aliases: localhost.localdomain localhost
Host Address(es): 127.0.0.1
It is not supported for a Grid Engine installation that the local hostname
contains the hostname "localhost" and/or the IP address "127.0.x.x" of the
loopback interface.
于是,把 vm2上的 /etc/nsswitch.conf中的 hosts: files nis dns改成 hosts: nis files dns,问题解决。
但是安装之后用 ps查看并没有在 vm2上看到 sge_execd进程,在 /tmp下找到错误信息:
[root@vm2 sge]# vim /tmp/execd_messages.2684
错误提示是不能创建目录 vm2,于是:
[root@vm2 sge]# cd default/spool/
[root@vm2 spool]# ls
qmaster spooldb vm1
[root@vm2 spool]# mkdir vm2
mkdir: cannot create directory `vm2': Permission denied
看来是 NFS的问题。查看 NFS文档,发现 NFS服务器上 /etc/exports中的权限设置有这么一个选项: no_all_squash,这个选项表示不要改变向 NFS服务器发送请求的用户的映射。因为 $SGE_ROOT是所有机器的公共目录,并且希望它在任何系统上的任何用户眼里都没有差别。所以用上了这个选项 。这样, vm1上的 /etc/exports文件如下:
/home * (rw,sync)
/opt/sge * (rw,sync,no_all_squash)
在 vm1上重启 nfs,在 vm2上再安装 install_execd,这次成功。
[root@vm2 sge]# ps ax | grep sge
3447 ? S 0:00 /opt/sge/bin/lx24-x86/sge_execd
3499 pts/0 S 0:00 grep sge
在 vm3上:
[root@vm3 root]# mkdir -p $SGE_ROOT
[root@vm3 root]# mount -t nfs vm1:/opt/sge $SGE_ROOT
[root@vm3 root]# cd $SGE_ROOT
[root@vm1 sge]# qconf -ah vm3
vm3 added to administrative host list
[root@vm1 sge]# qconf -as vm3
vm3 added to submit host list
但是在 vm3上安装也出现了不能创建 vm3目录的错误。这说明在 NFS服务器上加的那个 no_all_squash选项没有任何作用。为了验证又以 root@vm2在 $SGE_ROOT的 default/spool中创建目录,仍然出现 Permission denied错误,说明在 vm2上成功不是依靠那个 no_all_squash选项。那么 vm2上为什么会成功的呢?奇怪的是,在 vm3上失败一次以后再次安装,居然就成功了,给人感觉这是一个时间相关的问题,猜想可能与 NFS服务器上那个 sync选项有关,安装时创建目录没有及时响应导致超时错误。 无论如何,问题误打误撞解决了,也不再细究了。
在 vm3上把 vm1导出的 /home目录 mount上去,提交一个作业测试一下。
先修改 vm1上的 /etc/exports文件,使得 /home导出时也带上 no_all_squash参数。
修改一下队列的相关参数:
[root@vm1 sge]# qconf -sql
all.q
[root@vm1 sge]# qconf -mq all.q
把其中的 slots一行改成:
slots 1,[vm1=1],[vm2=2],[vm3=2]
用 qstat -f看一下:
[root@vm1 sge]# qstat -f
queuename qtype used/tot. load_avg arch states
----------------------------------------------------------------------------
all.q@vm1 BIP 0/1 0.00 lx24-x86
----------------------------------------------------------------------------
all.q@vm2 BIP 0/2 0.00 lx24-x86
----------------------------------------------------------------------------
all.q@vm3 BIP 0/2 0.00 lx24-x86
另外把 shell从以前的 /bin/csh改成 /bin/bash。
在 vm3上切换到 sgeadmin用户,因为作业执行结果会放到每个执行机的当前用户的 HOME目录中,而 vm1上的 /root并没有导出,如果用 root提交,则结果会分散到每个执行机中。
这是在 vm1上用 root用户提交 10个作业用 qstat -f查看的用户截图:
[root@vm1 sge]# qstat -f
queuename qtype used/tot. load_avg arch states
----------------------------------------------------------------------------
all.q@vm1 BIP 1/1 0.00 lx24-x86
1 0.55500 simple.sh root r 11/26/2009 20:12:22 1
----------------------------------------------------------------------------
all.q@vm2 BIP 2/2 0.00 lx24-x86
2 0.55500 simple.sh root r 11/26/2009 20:12:22 1
5 0.55500 simple.sh root r 11/26/2009 20:12:22 1
----------------------------------------------------------------------------
all.q@vm3 BIP 2/2 0.00 lx24-x86
3 0.55500 simple.sh root r 11/26/2009 20:12:22 1
4 0.55500 simple.sh root r 11/26/2009 20:12:22 1
############################################################################
- PENDING JOBS - PENDING JOBS - PENDING JOBS - PENDING JOBS - PENDING JOBS
############################################################################
6 0.55500 simple.sh root qw 11/26/2009 20:12:17 1
7 0.55500 simple.sh root qw 11/26/2009 20:12:18 1
8 0.55500 simple.sh root qw 11/26/2009 20:12:19 1
9 0.55500 simple.sh root qw 11/26/2009 20:12:19 1
10 0.55500 simple.sh root qw 11/26/2009 20:12:20 1
[root@vm1 root]# ls
anaconda-ks.cfg install.log.syslog simple.sh.e6 simple.sh.o6
install.log simple.sh.e1 simple.sh.o1
看到,在作业 执行完成后,只有作业 1和作业 6的结果在 vm1上。
这是在 vm3上以 sgeadmin用户身份提交 10个作业的状态:
[sgeadmin@vm3 sge]$ bin/lx24-x86/qstat -f
queuename qtype used/tot. load_avg arch states
----------------------------------------------------------------------------
all.q@vm1 BIP 1/1 0.00 lx24-x86
11 0.55500 Sleeper sgeadmin r 11/26/2009 20:15:22 1
----------------------------------------------------------------------------
all.q@vm2 BIP 2/2 0.00 lx24-x86
12 0.55500 Sleeper sgeadmin r 11/26/2009 20:15:22 1
14 0.55500 Sleeper sgeadmin r 11/26/2009 20:15:22 1
----------------------------------------------------------------------------
all.q@vm3 BIP 2/2 0.02 lx24-x86
13 0.55500 Sleeper sgeadmin r 11/26/2009 20:15:22 1
15 0.55500 Sleeper sgeadmin t 11/26/2009 20:15:22 1
############################################################################
- PENDING JOBS - PENDING JOBS - PENDING JOBS - PENDING JOBS - PENDING JOBS
############################################################################
16 0.55500 Sleeper sgeadmin qw 11/26/2009 20:15:14 1
17 0.55500 Sleeper sgeadmin qw 11/26/2009 20:15:14 1
18 0.55500 Sleeper sgeadmin qw 11/26/2009 20:15:15 1
19 0.55500 Sleeper sgeadmin qw 11/26/2009 20:15:15 1
20 0.55500 Sleeper sgeadmin qw 11/26/2009 20:15:16 1
执行完以后:
[sgeadmin@vm3 sgeadmin]$ ls
Sleeper.e11 Sleeper.e14 Sleeper.e17 Sleeper.e20 Sleeper.o13 Sleeper.o16 Sleeper.o19
Sleeper.e12 Sleeper.e15 Sleeper.e18 Sleeper.o11 Sleeper.o14 Sleeper.o17 Sleeper.o20
Sleeper.e13 Sleeper.e16 Sleeper.e19 Sleeper.o12 Sleeper.o15 Sleeper.o18