sun grid 安装管理手册


​state​​ 为任务状态

-- qw: 表示等待状态

-- hqw: 任务挂起等待中,依赖于其他正在执行的任务,待依赖的任务完成后执行

-- Eqw: 投递任务出错

-- r:表示任务正在运行

-- s:暂时挂起(往往由于优先级更高的job抢占了资源)

-- dr:节点挂了之后,删除任务就会出现这个状态,只有节点重启之后,任务才会消失



  1. 前期网络环境配置(NIS+NFS服务)概述

以一台管理节点和三台执行节点作为此次配置

1.    一台管理主机(hostanme:master),ip :172.16.1.2

2.    三台执行主机(hostname:分别为node1-3) ip:172.16.1.11-172.16.1.13

环境准备--修改IP地址--关机—拍快照

一台管理节点

#管理节点

sed -i 's#222#2#g' /etc/sysconfig/network-scripts/ifcfg-eth[01]

hostnamectl set-hostname master

三台控制节点

#控制节点node1

sed -i 's#222#11#g' /etc/sysconfig/network-scripts/ifcfg-eth[01]

hostnamectl set-hostname node1

控制节点node2

sed -i 's#222#12#g' /etc/sysconfig/network-scripts/ifcfg-eth[01]

hostnamectl set-hostname node2

#控制节点node3

sed -i 's#222#13#g' /etc/sysconfig/network-scripts/ifcfg-eth[01]

hostnamectl set-hostname node3

3.    OS:建议redhat 6.5以上版本,

centOS7.5

4.    安装过程中先关闭四台服务器的防火墙iptalbes

四台机器全部执行

systemctl stop firewalld.service

systemctl enable firewalld.service

5.    关闭4台服务器的selinux

命令:setenforce 0

永久关闭的话vi /etc/sysconfig/selinux 修改参数SELINUX=disabled

6.    软件:由于源代码需要编译,过程略微复杂需要很多调试工作,所以请直接使用本人提供的tar包,直接解压就可以实行安装。

7. 用了方便管理用户和数据需要配置NIS+NFS来集中管理用户home目录、sge软件和工作数据。

二.NIS+NFS服务搭建

管理服务器

1.    管理服务器配置信息

配置hostname

命令:hostnamectl set-hostname master

bash

配置hosts文件

vi /etc/hosts

添加4台服务器主机名和ip

172.16.1.2 master

172.16.1.11 node1

172.16.1.12 node2

172.16.1.13 node3

保持退出

2.配置NFS服务

创建sge目录,用于安装sge软件,服务器节点之后挂载此目录

mkdir /sge

mkdir /data

创建data目录,这个目录用于创建用户家目录,因为节点有多个用户使用,用了方便管理用户需要配置NIS+NFS来集中管理用户home目录和数据

vi /etc/exports

/sge 172.16.1.* (rw,insecure,no_all_squash,no_root_squash,sync)

/data 172.16.1.* (rw,insecure,no_all_squash,no_root_squash,sync)

安装nfs和rpcbind

yum install nfs-utils rpcbind -y

重启服务配置

/etc/init.d/nfs restart

如果重启服务工作中报错,请检查nfs是否安装成功!

rpm -qa|grep nfs



sun grid 安装管理手册_大数据

rpm -qa|grep rpcbind



sun grid 安装管理手册_hadoop_02

若没有这安装nfs-utils和rpcbind

3.配置NIS服务

安装服务

yum install -y ypserv* yp-tools* ypbind* -y

修改域名

nisdomainname nismaster

永久生效修改配置文件

vim /etc/sysconfig/network

修改NISDOMAIN=nismaster

保持退出

修改ypserv.conf配置文件

vim /etc/ypserv.conf

在最后加入一行

* : * : * : none

保存退出

重启服务

systemctl restart ypserv.service

systemctl restart yppasswdd.service

7.创建sgeadmin用户

之后安装sge软件需要使用这个用户,如果不配置nis的话,每台主机都需要创建这个用户,需要相同uid和gid,不便于管理

useradd sgeadmin -d /sge/sgeadmin

(sgeadmin家目录建于/sge目录下,其他节点挂载/sge目录后,自然能读取到sgeadmin的用户信息,之后新建的用户也请创建在/sge或者data目录)

passwd sgeadmin #设置密码

生成nis数据库

/usr/lib64/yp/ypinit -m

Ctrl+D --【y】--回车

之后每创建或者删除用户,都需要进行一次此操作

执行服务配置

以node1主机为例

配置hostname

hostnamectl set-hostname node1

配置hosts文件

vim /etc/hosts将服务器ip和主机名添加进去

修改入下

172.16.1.2 master

172.16.1.11 node1

172.16.1.12 node2

172.16.1.13 node3

保持退出

挂载远程目录

创建目录

mkdir /sge

mkdir /data

挂载远程目录

mount 172.16.1.2:/sge /sge

mount 172.16.1.2:/data /data

如果mount后报错,可以尝试去管理服务器重启下nfs

systemctl restart nfs

为了在后面重启节点也能自动挂载这2个目录,将挂载信息写入系统配置文件

vim /etc/fstab

后面添加2行

172.16.1.2:/sge /sge nfs rw,hard,intr,nosuid,exec,async

172.16.1.2:/data /data nfs rw,hard,intr,nosuid,exec,async

保存退出

加入NIS域

修改域名

nisdomainname nismaster

永久生效修改配置文件

vim /etc/sysconfig/network

修改NISDOMAIN=nismaster

保存退出

安装客户端

yum install -y ypbind* yp-tools* -y

  1. 安装setuptool命令

yum -y install setuptool ntsysv system-config-securitylevel-tui system-config-network-tui system-config-date



sun grid 安装管理手册_运维_03

使用nmtui代替setup可以配置网络

安装完成后,命令行输入

setup



sun grid 安装管理手册_python_04

选择第一个,回车



sun grid 安装管理手册_python_05

选择Use NIS,按空格,收选择next,回车



sun grid 安装管理手册_大数据_06

填入之前的nis服务器域名和ip

选择ok



sun grid 安装管理手册_python_07

然后quit退出

此时可以做个测试

在node1上输入命令su – sgeadmin



sun grid 安装管理手册_大数据_08

就能切换到sgeadmin用户了,而我们之前并没有在这台服务器上创建过这个用户,这就是nis服务给我们带来的好处,只需在管理服务上创建好用户,并通过/usr/lib64/yp/ypinit -m命令更新用户数据库,后面的节点都能自动更新用户,方便日后维护。

之后node2和node3也是按照上述步骤配置。

三.安装sge软件

获取sge软件

1.管理服务器qmaster安装

将ge2011.11.tar.gz这个文件,复制入/sge/目录

然后解压

cd /sge

tar xvfz ge2011.11.tar.gz

chown sgeadmin.ge2011.11 -R (因为之后我们需要用这个用户来安装sge,为了避免权限问题,将ge2011.11这个目录,给与sgeadmin用户权限)

cd /sge/ge2011.11目录

里面有个install_qmaster,install_execd,start_gui_installer这个几个安装文件,如果有图形界面的话可以直接./start_gui_installer这个文件来图形安装,因为使用java,如果服务器没有安装的话,可以通过yum install -y java命令来安装java。

这里我们先说明用命令行安装

./install_qmaster

之后回车一路默认安装,如下几个特别的地方,需要有变化

这里要确认是sgeadmin用户,选择y


sun grid 安装管理手册_运维_09

这里要确认是sgeadmin用户,选择y

这里选n,因为如果选了y,有可能无法安装


sun grid 安装管理手册_hadoop_10

这里选n,因为如果选了y,有可能无法安装

设为开机启动


sun grid 安装管理手册_大数据_11

设为开机启动

sun grid 安装管理手册_python_12sun grid 安装管理手册_大数据_13sun grid 安装管理手册_运维_14这里可以将node1-node3分别添加进去,


sun grid 安装管理手册_python_15

sun grid 安装管理手册_数据库_16

sun grid 安装管理手册_数据库_17

这里可以将node1-node3分别添加进去,

sun grid 安装管理手册_hadoop_18以回车结束添加


这里先选n,暂时不安装,之后继续默认安装,完成本次安装


sun grid 安装管理手册_运维_19

这里先选n,暂时不安装,之后继续默认安装,完成本次安装

之后添加完成sge环境变量

Bash环境下source /sge/ge2011.11/default/common/settings.sh

Csh环境下 source /sge/ge2011.11/default/common/settings.csh

将这个环境变量分别加入系统配置文件

vi /etc/profile

将source /sge/ge2011.11/default/common/settings.sh加入到最后

vi /etc/csh.cshrc

将source /sge/ge2011.11/default/common/settings.csh加入到最后

此时可以测试下qhost qstat这些sge命令已经可以直接调用

最后检查下sgeqmaster进程时候已经运行

命令ps -ef | grep sge_qmaster



sun grid 安装管理手册_运维_20

看到sge_qmaster说明已经安装完成

至此,管理节点已经安装完成,我们开始安装执行节点

2.执行节点安装execd

这里以node1为例

首先添加环境变量

vi /etc/profile

将source /sge/ge2011.11/default/common/settings.sh加入到最后

vi /etc/csh.cshrc

将source /sge/ge2011.11/default/common/settings.csh加入到

开始安装

cd /sge/ge2011.11

./install_exec

一路默认安装,这里有个要注意的地方



sun grid 安装管理手册_运维_21

虽然默认路径是正确的,但是如果选n的,发现有可能不能在spool目录下创建节点目录,所在这个地方选y,然后输入路径



sun grid 安装管理手册_运维_22

后面继续回车默认安装,然后结束安装。

安装完毕后,检查下sgeexecd服务是否正常启动

ps -ef | grep sge_ececd



sun grid 安装管理手册_数据库_23

这种情况说明服务已经正常启动。

Node2和node3也安装上述操作,完成配置

全部安装完成后,可以通过qhost命令,检查下,

可以看到node1-3服务器的属性

HOSTNAME ARCH NCPU LOAD MEMTOT MEMUSE SWAPTO SWAPUS

-------------------------------------------------------------------------------

global - - - - - - -

node1 linux-x64 24 0.44 126.0G 14.3G 8.0G 29.2M

node2 linux-x64 24 0.35 126.0G 29.9G 9.8G 0.0

node3 linux-x64 40 0.05 252.2G 17.8G 64.0G 0.0

ps:安装过程中可能会出现的一些问题,

安装过程中有出现无法知道port的情况,这时我们可以修改/etc//etc/services,在里面加入

sge_qmaster 6444/tcp # Grid Engine Qmaster Service

sge_qmaster 6444/udp # Grid Engine Qmaster Service

sge_execd 6445/tcp # Grid Engine Execution Service

sge_execd 6445/udp # Grid Engine Execution Service

如果报这个错误



sun grid 安装管理手册_hadoop_24

可以将/etc/hosts里面127.0.0.1这行注释掉,可以解决这个问题。

四.新节点增加

日后新的服务器加入sge,只需按照上述配置服务器,然后在/sge/ge2011.11/目录下执行./install_execd进行交互式安装,但是如果想快速安装新节点话,可以可以通过inst_sge -m -x -auto /path/to/config-file 来快速自动化安装配置节点,有个模板可以使用,在/sge/ge2011.11/util/install_modules下有个

inst_template.conf模板,我们可以cp inst_template.conf my_template.conf,然后修改my_template.conf这个模板,以用来快速部署节点。

快速部署qmaster命令 /inst_sge -m -auto my_template.conf

快速部署exechost命令 /inst_sge -x -auto my_template.conf

五.常用命令

qsub -命令用来向SGE提交批处理作业,SGE支持单或多节点作业。

qsh -命令用来提交带xterm交互式作业,在执行主机上开启X-windows.

qlogin -命令与qsh相似也是提交交互式作业到队列中,只是它不开启X-windows,而是利用现在的终端传送I/O,该命令与远程主机建立telnet连接,使用标准的server-client命令

qrsh -命令与qlogin类似,与远程主机通过rsh连接。

qalter -可用来改变处于pending状态的作业属性。

qresub -命令允许用户通过拷贝处于pengding或runing状态的作业来创建新的作业。新建作业与原作业具有相同的属性,并被分配了新的jobID和hold状态。该命令可用来先拷贝一个作业再修改其属性。

qdel -删除作业

qmod -修改队列和作业属性

qstat -查看作业和队列状态

qacct -此命令从群集日志文件中抽取任意帐户信息。

qmon -此命令为群集和队列配置提供用户界面。

qdel –用户、操作人员或管理人员可使用此命令来删除作业

qhold –此命令阻止已提交作业的执行。

qhost –此命令显示sge 执行主机的状态信息。

qconf 管理队列

qsub常用选项

-a date_time 作业开始运行时间

-b y[es]|n[o]判断作业指定是二进制文件或scripts。y :是 n:scripts

-display 使用X-windows

-dl date_time 定义作业到期时间,在作业到期时间之前,作业的优先级会逐步提高,直到管理员指定的最高级别。

-e 指定输出error文件的路径及文件名

-hard 定义作业被调度的硬性要求

-h 作业hold类型。u:表示用户hold,s:表示系统hold,o:表示被操作员hold,n:取消hold,U:取消用户hold,S:取消系统hold,O:取消操作员hold。

-i 定义输入文件

-j y[es]|n[o] 定义作业的标准错误输出是否写入的输出文件中

-l resource=value, 表明作业运行所需要的资源。

-m b|e|a|s|n 。定义邮件发送规则。b:作业开始时发送。e:作业结束时发送。a:作业失败时发送 s:作业挂起时发送。n:不发送

-M user[@host] 定义邮件地址

-notify :定义发送SIGSTOP or SIGKILL信号的延迟时间

-now y[es]|n[o]:立即执行作业

-N 作业名

-o [[hostname]:]path :定义输出文件路径、文件名

-P project_name:定义项目名称

-p priority :定义优先级

-pe parallel_environment:定义并行环境

-q wc_queue_list:定义作业运行队列

-R y[es]|n[o]:定义是否为作业保留资源。

-r y[es]|n[o]:定义作业失败后是否重新运行

-soft 定义作业被调度的软性要求

-u username,只有qlter命令可以使用该参数。修改作业的用户名

-v variable:定义环境变量

-verbose 使qrsh命令输出信息

-verify 验证作业参数时使用

-V 传递当前命令的所有环境变量

qsub提交建议使用qsub +脚本的模式,直接在脚本里定义参数,基本可以杜绝提交失败问题

#!/bin/bash -f

#$ -S /bin/bash 用bash来解释任务

#$ -cwd 在当前目录下执行

#$ -N 作业名

#$ -V (传递当前用户的所有环境变量到所分配的计算节点,否则有些环境在计算节点没有定义,程序可能无法正常执行。)

#$ -o ./output/run.out.$JOB_ID 日志输出名字和路径

#$ -e ./output/run.err.$JOB_ID 错误日志输出名字和路径

最后是所需运行的程序或者命令行

编辑完成后qsub 脚本,以这样的方式来提交作业。

第一次提交可能会遇到一点问题

比如:Unable to run job: denied: host "master" is no submit host.

说明master没有被加入提交主机组

使用命令:qconf -as master

查看作业运行状态命令

qstat (查看基本信息)

% qstat



sun grid 安装管理手册_python_25

state 栏包含的单个字符代码含义如下:r 表示正运行,s 表示已暂停, q 表示已排队, w 表示在等待,E表示有错误

qstat -u 用户名 看某个用户的作业状态

qstat -u "*" 查看所有用户的作业状态

qstat -f (查看计算节点工作状态)

qstat -j job-ID (查看正在运行的作业的详细情况)

或者用qmon图形管理里面job control里监控



sun grid 安装管理手册_数据库_26

使用qdel命令删除已经提交的计算作业

使用命令:qdel job-id

例如,用户提交的计算作业ID号为60,则删除该计算作业的方法:

%qdel 60

如果要删除多少个job-id

%qdel jod-id1 job-id2

使用qmod 命令可以暂停和恢复已经在运行的作业。

% qmod -s job-id 暂停作业



sun grid 安装管理手册_hadoop_27

% qmod -us job-id 恢复暂停的作业



sun grid 安装管理手册_hadoop_28

% qmod -s 队列名

% qmod -us -f 队列名1 、队列名2

qconf常用选项

以下是qconf的常用用法,其实如果有图形界面的话,我更加推荐使用qmon这个图形管理界面才操作,更加直观和便利。

这种更为直观,也更为方便


sun grid 安装管理手册_hadoop_29

这种更为直观,也更为方便

显示队列列表

% qconf -sql

显示该队列属性

% qconf -sq 队列名

显示如下

qname –所请求的队列名称。

hostname –队列所处的主机。

processors –多处理器系统中此队列有权访问的处理器。

qtype –允许在此队列中运行的作业类型。目前包括批处理作业、交互式作业、点检查作业、并行作业或它们的任意组合或相互转换的作业。

slots –可在队列上同时执行的作业数量。

察看队列属性

owner_list –队列的拥有者。

user_lists –此参数下所列的用户访问列表中标识的用户或组有权访问此队列。

xuser_lists –此参数下所列的用户访问列表中标识的用户或组无权访问此队列。

complex_list –列于此参数下的属性组与队列相关联,而且这些属性组中所含的属性构成此队列的可请求属性组。

complex_values –提供给此队列的某些属性组属性的赋值。

显示执行主机

% qconf -sel

显示当前配置为执行主机的所有主机的列表。

% qconf -se 主机名称

显示管理主机

% qconf -sh

显示有管理权限的主机列表

添加管理主机

% qconf -ah 主机名

显示提交主机

% qconf -ss

添加提交主机

% qconf -as 主机名

显示可请求属性列表

% qconf –scl

显示已配置的属性组列表

属性组包含一组属性的定义。有三种标准属性组:

global –针对群集全局属性(可选)

host –针对主机特有的属性

queue –针对队列特性的属性

显示可请求属性列表

% qconf -sc 属性组名称[,...]

% qconf -sul

显示一个或多个访问列表中的项

% qconf -su ACL 名称[,...]

更多参数请参考qconf -help

常见错误处理

  1. 用户qsub命令提交作业后,qstat能看到后立即作业消失,此时查看错误日志(如之前脚本已经定义输出路径)run.err.log

里面显示Warning: no access to tty; thus no job control in this shell...

一般是脚本问题,基本脚本里面添加#$ -S /bin/csh此参数可以解决这个问题

  1. 用可以从命令行运行作业脚本,但通过qsub 命令运行时失败

处理方法:分别在shell 提示下和通过qsub 命令交互执行两个脚本,比较结果。因为作业都是提交都后面的执行节点进行运行,一般来说都是脚本不符合qsub方式提交的要求,可以参考之前的脚本模板,同时看看脚本里有没有需要用户交互操作的命令,如果可以改成静默运行方式。


  1. 用户提交作业后,qstat发现作业一直是qw等待状态,这次有几种原因,首先可能是分配的资源已经配其他同事先占满,需要等之前的作业完成,才能开始运行,或者用户没有被加入指定的主机组或者工作者,没有可以利用的资源,这时需要根据用户资源使用情况,安排加入合适的队列组。

    sun grid 安装管理手册_大数据_30


    sun grid 安装管理手册_python_31


    sun grid 安装管理手册_数据库_32

    此用户,作业有r和qw,是因为我给的安排的队列组是36核可以,用户跑了60个case,所以只有等之前跑完的,才能剩下的继续运行。在实际操作中,我们需要协调研发人员,根据他们的需要来设置。如人员分组,根据项目或者任务来进行安排,设置合理的队列组和用户组才能最大限度的来利用sge资源。
  2. 某个执行主机,作业不能分配到上面运行。如用户被分配了node1-3,提交作业后发现只被分配到node1和node3上面运行,作业数量并没有超过可用的cpu数量,这个时候先用qhost命令来查看,node2状态

如显示

HOSTNAME ARCH NCPU LOAD MEMTOT MEMUSE SWAPTO SWAPUS

node2 linux-x64 - - - - - -

有个2个可能,节点卡死,只能重新启动。如果服务器没有卡死,可以正常登录,去查看下sgeexecd进程是否挂了ps -ef |grep sge

如果没有进程,重启下进程/etc/init.d/sgeexecd start


  1. 突然所有作业都变为qw状态,登录管理主机查看是否qmaster进程是否停止运行,ps -ef |grep sge ,如果停止运行先重新启动进程/etc/init.d/sgemaster start.然后通过系统log或者/sge/ge2011.11/default/spool/qmaster/message里查看原因,有时候分区满了也会,或者分区没有正常挂载都会造成进程崩溃。
  2. 用户提交作业后发现状态为Eqw,
    sun grid 安装管理手册_大数据_33使用qstat -j jd_id,
    显示 error reason 1: can't get password entry for user "sgeadmin". Either the user does not exist or NIS error!。这个问题主要两个方面,首先可能是没有配置加入nis服务,qsub提交作业,在执行节点上面运行,此时这个执行主机并没有这个用户信息,所以报错。所以在之前的配置时,我先进行了nis服务的配置。只需要管理主机上面添加一个用户并且更新数据库,后面的执行节点都会有这个用户的信息。如果已经配置了nis服务还是有个这个错,那另外一个原因就是运行的脚本里面没有加入#$ -V这个参数,用途是传递当前用户的所有环境变量到所分配的计算节点,否则有些环境在计算节点没有定义,程序可能无法正常执行。
  3. 用户反映卡顿,或者原来正常运行的作业,这次运行时间比之前长了很多。一般出现这个问题,基本都是某些用户的作业在大量进行读写操作,首先通过qstat命令看看现在是哪些用户正在使用sge,找出是哪个用户在大量写数据。让他能否先减少作业量,来缓解目前状况。之前我遇到过很多次这个情况,因为当时就一个存储,大家都集中在一个存储的分区工作。之后通过购买了新的存储,划分了新的分区,挂在到服务器上,我根据用户的使用情况,进行分组,将需要大量读写的用户的工作数据放在新的高速存储中,让其进行工作,通过物理隔离的方式来避免系统卡顿现象。
    六.关于grid的健康状态的监控
    一般简单的监控就是用qhost命令,这里面基本能显示执行节点的运行状态。监控管理主机,一般可以用top命令看cpu和memory负载,iostat查看分区io状态,df -h看分区使用情况,通过MegaCli来查看raid状态。但最理想的是方式还是搭建监控服务器如zabbix,Ganglia,nagios这些开源的监控软件来实时监控所有服务器的状态,更为实时更为快捷,能迅速定位故障。
    七.冗余方案
    当master管理节点服务器出现问题,短时间无法修复的时候,可以手动切换到另外一个服务器进行临时使用
    比如master无法启动后,我可以将node1作为临时管理服务器,并启动qmaster进程,首先修个配置文件vi /sge/ge2011.11/default/common/act_qmaster
    将主机名改为node1,随后在node1上面做个测试/sge/ge2011.11/utilbin/linux-x64/gethostname
    将显示新管理主机名,随后启动进程/sge/ge2011.11/default/common/sgemaster,这样就临时让node1成为管理主机,待master服务器修复完毕,再切换回去。
    还有个方法就是设置Shadow Master主机 ,当shadow主机发现sge_qmaster进程挂了以后,会在设定的其他主机中,启动sge_qmaster.简单说下方法首先需要使用berkeleydb spooling,然后在/sge/ge2011.11/default/common/下创建shadow_masters文件,编辑vi shadow_masters
    添加主机
    master
    node1
    node2
    node3
    当master挂了以后,node1十分钟后接管master,如果node1挂了,node2会十分钟后接管node1
    然后每个服务器上启动shadowd进程。
    /sge/ge2011.11/default/common/sgemaster -shadowd
    检查下是否正常启动
    ps -ef |grep sge_shadowd
    显示如下说明已经启动完成

    sun grid 安装管理手册_大数据_34


另外/sge/ge2011.11,这个目录请每天备份,我之前遇到过一次sge目录磁盘损坏的问题,通过立刻恢复这个目录,来立刻重新启动整个sge。