sge集群安装部署文档

摘要

一个偶然的机会需要用到sge集群做一些大量任务的运行,网上的大部分文档都是几年前的了,而且也没找到特别完整的安装部署文档。在一些零散的文档帮助下终于部署完成,在此做个记录,仅供参考。

sge简介

SGE的全称是Sun Grid Engine。随着SUN公司被ORACLE公司收购,现在已经改名为Oracle Grid Engine。不过现在oracle已经找不到下载链接了,而是改成了一个外链,sge目前似乎已经独立,并且商业化。

Oracle Grid Engine是一种分布式资源管理系统,它可以将用户的负载分发到可用的计算资源上。一般地,在一个典型的数据中心,计算资源的利用率平均只有10%-25%,Oracle Grid Engine可以将计算资源的利用率增加到80%,90%甚至95%。这显著的改善来自于智能地将负载分发给最合适的计算资源。

当用户将它们的任务以一批作业的形式提交给Oracle Grid Engine的时候,软件监控着集群中所有资源的当前状态并且可以赋予这些作业最适合的资源。

需要用到的软件

sge需要java支持,还要用到openssl,资源池的共享需要用到nfs。其他软件包如下,包含了sge需要用到的所有软件包,具体每个包是做什么的,我也不是很清楚,所有包在网上应该都能找到下载。本文安装的系统版本为Centos6.5(Redhat6系统也做过测试,理论上来说6系统应该都可以)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
openssl-1.0.1e-30.el6.x86_64.rpm

jemalloc-3.6.0-1.el6.x86_64.rpm
jemalloc-devel-3.6.0-1.el6.x86_64.rpm

gridengine-8.1.7-1.el6.x86_64.rpm
gridengine-guiinst-8.1.7-1.el6.noarch.rpm
gridengine-debuginfo-8.1.7-1.el6.x86_64.rpm
gridengine-hadoop-8.1.7-1.el6.noarch.rpm
gridengine-devel-8.1.7-1.el6.noarch.rpm
gridengine-qmaster-8.1.7-1.el6.x86_64.rpm
gridengine-drmaa4ruby-8.1.7-1.el6.noarch.rpm
gridengine-qmon-8.1.7-1.el6.x86_64.rpm
gridengine-execd-8.1.7-1.el6.x86_64.rpm

安装规划

规划说明

sge集群至少应该有两个节点,一个节点也是可以的,但是感觉没什么意义。集群中一台为主控机,每台节点机器都是执行机,每个机器需要贡献资源池给其他机器访问,因此需要使用nfs做磁盘共享。

sge默认的管理用户为sgeadmin,装包的时候会自动创建改用户,理论上来说只需要主控机上安装sge包,通过nfs的形式共享给其他节点,然后在每个节点自行创建sgeadmin用户。但本文在所有节点上都安装了sge的包,并且为了保证所有节点的用户一致,对seadmin用户进行了修改。

sge的配置管理是需要使用root用户来进行操作的,sgeadmin用户只是内部管理账户,并且是不允许登陆的,而sge的任务是不能由root用户提交的,因此需要在所有执行节点上创建执行用户。sge是用用户名来来区分不同用户的,而nfs是用uid来区分不同用户的,为了保证用户一致性,需要我们在添加用户的时候对用户信息进行指定。

本文规划

  • 节点(3):master(主控),node01,node02
  • 用户(3):root(sge配置),sgeadmin(管理),sgeuser(任务提交)
  • 集群名称:SgeCluster
  • 资源池目录:/home/sgeuser/{master,node01,node02}
  • sge程序目录:/opt/sge(默认)

安装

以下内容主控节点和执行节点都需要进行的操作

安装openssl,系统自带源yum安装即可,如自带源安装的版本低,请自行下载高版本openssl

1
yum install openssl -y

安装java

1
2
3
4
5
wget http://download.oracle.com/otn-pub/java/jdk/8u92-b14/jdk-8u92-linux-x64.tar.gz
tar xvf jdk-8u92-linux-x64.tar.gz
mkdir /usr/local/product
mv jdk1.8.0_92 /usr/local/product
ln -s /usr/local/product/jdk1.8.0_92 /usr/local/java

添加环境变量

1
2
3
4
5
6
7
8
vim /etc/profile
export JAVA_HOME="/usr/local/java"
export JRE_HOME="$JAVA_HOME/jre"
export PATH="$PATH:$JAVA_HOME/bin"
export CLASSPATH="./:$JAVA_HOME/lib:$JRE_HOME/lib"

source /etc/profile
java -version

安装jemalloc

1
rpm -ivh jemalloc*

安装gridengine,由于有一些依赖包需要安装,所以使用yum自动解决依赖

1
2
3
4
5
6
yum install gridengine* -y

vim /etc/profile
export SGE_ROOT="/opt/sge"

source /etc/profile

创建用户

1
2
3
4
5
6
usermod -u 900 sgeadmin
groupmod -g 900 sgeadmin
useradd -u 901 -G sgeadmin sgeuser
chmod 755 /home/sgeuser
mkdir /home/sgeuser/{master,node01,node02}
cd /home/sgeuser && chown -R sgeadmin.sgeadmin *

添加hosts解析

系统默认的两台解析后面不要加主机名解析,否则后面会报错

1
2
3
4
vim /etc/hosts
172.16.1.10 master
172.16.1.11 node01
172.16.1.12 node02

nfs共享资源池以及sge安装目录

由于之前的几步操作是在所有节点都执行了的,也就是说每个机器都装好了sge的rpm包,并且都已经存在了/opt/sge这个目录,但是其他的教程都是只在主控机上安装sge,然后通过nfs把安装目录共享到每一个节点的。本文虽然在每个节点都进行了安装,但是为了一致性,还是把主控机上的安装目录做了nfs共享。

1
2
3
4
5
6
7
8
9
10
yum install -y nfs*

vim /etc/exports
/home/sge/master *(rw,sync,no_root_squash)
/opt/sge *(rw,sync,no_root_squash)

/etc/init.d/rpcbind restart
/etc/init.d/nfs restart
chkconfig rpcbind on
chkconfig nfs on

在每一个节点上挂载

1
2
3
4
vim /etc/fstab
master:/home/sge/master /home/sge/master nfs defaults 0 0
master:/opt/sge /opt/sge nfs defaults 0 0
mount -a

自行将每一个节点的对应目录共享出来,然后在每一个节点上挂载,这里不再详细说明nfs的具体操作步骤。

nfs做好之后,sge的准备工作到此结束,下面进行主控节点的安装和执行节点的部署。