相对全面的SLURM集群的配置、安装及一些小问题的解决

年前做了slurm集群的安装与配置,这里写出来与大家分享一下。安装配置的时候在网上找了很多资料,发现网上的版本都比较简单,很多东西没有说清楚,这里为大家一一详细说明,希望能对需要的朋友们有所帮助。同时我如有写错的地方请大家予以纠正,谢谢!联系QQ:1192625541

Slurm安装教程

OS:centos7 machine:master(主节点,也是计算节点),slaver1,slaver2,slaver3(3个计算节点)

1.首先是关于安装账户的问题,经常可以在网上看到一些slurm的安装教程先设置了一个slurm账户。在公司的人可能比较明白。因为在公司里想要拿到root账户几乎是不可能的,那现在安装的slurm谁是管理员呢?或者说以什么账户安装呢?对的,就是slurm账户。这就是需要建slurm账户的由来。每台机器上都要建立一个slurm账户!

好的,我们先建一个slurm账户,useradd命令

2.Slurm需要安装的组件

首先先yum -y install epel-release,添加第三方源,因为你当前的镜像源有可能找不到下面的包

常用的有gtk+-2.0,用来提供对sview实时任务查询的界面支持

安装命令:yum -y install gtk2

          yum -y install gtk-devel

Munge:提供组件间的认证通信机制。这个需要在所有节点安装并且启动。

安装命令:yum -y install munge

          yum -y install munge-devel

这个时候需要手动创建一些文件夹,这些文件夹在上述安装munge时是不会自动建立的,需要创建。分别是/etc/munge,/var/run/munge,/var/lib/munge,/var/log/munge,所有节点都要安装munge!!!!!

命令:mkdir /etc/munge

      mkdir /var/run/munge

      mkdir /var/lib/munge

      mkdir /var/log/munge

然后修改上述文件夹的属主为slurm

命令:chown slurm:slurm /etc/munge

      chown slurm:slurm  /var/run/munge

      chown slurm:slurm  /var/lib/munge

      chown slurm:slurm  /var/log/munge

然后在一台节点上(我是在主节点上)生成munge的秘钥,存储在/etc/munge中

命令:/usr/sbin/create-munge-key

修改属主为slurm: chown slurm:slurm /etc/munge/munge.key

其余节点要各拷贝一份

命令:scp /etc/munge/munge.keyroot@:/etc/munge

然后在各个节点上以slurm账户启动munge(之后不说明的地方都是以root账户)

命令:munged

PS命令查看是否启动了munge

命令:ps aux | grep munged

3.Slurm的安装

slurm的安装有三种方式,一是源码编译,二是yum安装,三是rpm安装。强烈建议源码编译,因为尝试过三种方法之后感觉第一种最好,坑少。

假设下载的是slurm-14.11.9,解压后进入文件夹,然后

命令:./configure (--prefix=/usr/local/slurm--sysconfdir=/usr/local/slurm/conf)

      make

      make install

括号内的东西可加可不加,我安装的时候没有加。这里的prefix是安装目录,后面的sysconfdir是配置文件的目录,这个在这里指定的话并不会新建一个文件夹,而是之后slurm读取配置文件是从这个位置读取。

(如果加了的话执行完上述命令之后会在。/usr/local/slurm下产生5个文件夹,sbin等。

这时候又需要手动建立一些文件夹了。所以最好不要加这些设置。。。。因为configure文件里已经指定了不加的时候默认的各个文件夹)

启动集群:

Master节点需要执行 slurmctld -c  和slurmd-c,都是以root账户执行

所有Slaver节点都执行 slurmd -c

 

 

配置文件说明:

首先是我在集群上的配置文件(每一行都做了注释):

#

# Example slurm.conffile. Please run configurator.html

# (in doc/html) tobuild a configuration file customized

# for yourenvironment.

#

#

# slurm.conf filegenerated by configurator.html.

#

# See theslurm.conf man page for more information.

#

ClusterName=biostacs              //集群名

ControlMachine=master          //主节点名

ControlAddr=192.168.122.1        //主节点地址,局域网

#BackupController=

#BackupAddr=

#

SlurmUser=slurm         //主节点管理账号

#SlurmdUser=root

SlurmctldPort=6817          //主节点服务默认端口号

SlurmdPort=6818        //子节点服务默认端口号

AuthType=auth/munge            //组件间认证授权通信方式,使用munge

#JobCredentialPrivateKey=           

#JobCredentialPublicCertificate=

StateSaveLocation=/tmp         //记录主节点状态的文件夹

SlurmdSpoolDir=/tmp/slurmd             //子节点状态信息文件

SwitchType=switch/none

MpiDefault=none

SlurmctldPidFile=/var/run/slurmctld.pid        //主服务进程文件

SlurmdPidFile=/var/run/slurmd.pid          //子节点进程文件

ProctrackType=proctrack/pgid            //监控任务与进程间的关系

#PluginDir=

CacheGroups=0

#FirstJobId=

ReturnToService=0

#MaxJobCount=

#PlugStackConfig=

#PropagatePrioProcess=

#PropagateResourceLimits=

#PropagateResourceLimitsExcept=

#Prolog=

#Epilog=

#SrunProlog=

#SrunEpilog=

#TaskProlog=

#TaskEpilog=

#TaskPlugin=

#TrackWCKey=no

#TreeWidth=50

#TmpFS=

#UsePAM=

#

# TIMERS

SlurmctldTimeout=300

SlurmdTimeout=300

InactiveLimit=0

MinJobAge=300

KillWait=30

Waittime=0

#

# SCHEDULING

SchedulerType=sched/backfill

#SchedulerAuth=

#SchedulerPort=

#SchedulerRootFilter=

SelectType=select/linear

FastSchedule=1

#PriorityType=priority/multifactor

#PriorityDecayHalfLife=14-0

#PriorityUsageResetPeriod=14-0

#PriorityWeightFairshare=100000

#PriorityWeightAge=1000

#PriorityWeightPartition=10000

#PriorityWeightJobSize=1000

#PriorityMaxAge=1-0

#

# LOGGING

SlurmctldDebug=3

SlurmctldLogFile=/var/log/slurmctld.log        //主节点log日志

SlurmdDebug=3

SlurmdLogFile=/var/log/slurmd.log          //子节点log日志

JobCompType=jobcomp/none

#JobCompLoc=

#

# ACCOUNTING

#JobAcctGatherType=jobacct_gather/linux

#JobAcctGatherFrequency=30

#

#AccountingStorageType=accounting_storage/slurmdbd

#AccountingStorageHost=

#AccountingStorageLoc=

#AccountingStoragePass=

#AccountingStorageUser=

#

# COMPUTE NODES

#NodeName=master,slaver1CPUs=2 RealMemory=32000 Procs=1 State=UNKNOWN

//节点名称,CPUs核数,corepersocket,threadspersocket,使用lscpu查看,realmemory实际分配给slurm内存,procs是实际CPU个数,/proc/cpuinfo里查看 state=unknown是刚启动集群的时候为unknown,之后会变成idle

NodeName=master,slaver1,slaver2,slaver3CPUs=24 CoresPerSocket=6 ThreadsPerCore=2 RealMemory=30000 Procs=1State=UNKNOWN

PartitionName=controlNodes=master Default=NO MaxTime=INFINITE State=UP

//partitionname是分成controlcomputedefault=yes是说这个用来计算,我们设置slaver1/2/3这三台defaultyes,用来计算的

PartitionName=computeNodes=slaver1,slaver2,slaver3 Default=YES MaxTime=INFINITE State=UP

#PartitionName=debugNodes=linux[1-32] Default=YES MaxTime=INFINITE State=UP

 

这就是配置文件的全部内容。

安装完成后执行sinfo命令,如果所有机器都是下图


则集群启动正常。State有idle(空闲),salloc(占用),unknown(刚启动时可能出现),down(连不上)等状态。

 

一些小的问题:

1.如果修改了配置文件slurm.conf,则请在master上执行scontrol reconfig命令更新配置文件。

2.目前集群所有机器的配置文件是一样的,如果修改了请把所有机器的conf都相应修改掉

3.查看各个节点的情况 scontrol show node如果出现not responding说机器通信有问题

4.如果要看上述3中的机器的具体原因可以查看每台机器的具体日志,目录为/var/log/slurmd.log

在master上还可以查看/var/log/slurmctld.log

5.如果某个节点down很久了,后来你找到原因了,觉得解决了。此时因为长时间down需要update整个集群,命令为 scontrol updatenode=master,slaver1,slaver2,slaver3 state=idle

6.建立slurm用户的时候查看id slurm 会显示uid=1001(slurm),gid=1001(slurm),group=1001(slurm)【我的集群上】。注意每台机器上都要建一个slurm账户,当你查看发现有的机器上id slurm不一致的时候,可能有的机器是1000,这时候需要修改uid和gid为1001,所有节点一定要保持一致!然后如果之前手动建立的munge文件夹是在1000时候建立的,改了之后要把之前的文件夹删掉重新建一遍!

7.Sview来图形化查看任务状态,这个需要在本地有一个vnc的客户端,在master上开一个vncsever就可以连了,然后sview,否则直接命令窗登陆会看到cannot open display

 

文件存储的问题:

现在集群是master节点一个,slaver1-3是计算节点,slaver4是存储节点,我已经把slaver4的/home/bio/data1/data挂载到了master和1、2、3的/home/bio/data1/data文件夹下,这样大家可以传数据到master的/home/bio/data1/data文件夹下运行,实际上这些数据是放到了4下面。Master/1/2/3共享了4的/home/bio/data1/data文件夹

 

Slurm运行任务:

Slurm的任务提交方式有3种,命令行直接提交srun,脚本提交sbatch,分配资源后提交salloc.

命令行提交直接提交适用于快速简单的单个任务,脚本提交适用于多个串行或并行任务组成的任务集,分配资源提交跟脚本提交类似,允许先分配资源,然后逐渐提交任务。

Srun运行参数

--begin 设定任务开始时间 例如16:00,now+1hour

--N 指定节点数 例如-N3

-n 指定并行任务数 例如-n3

-o 指定标准输出路径

-time 指定耗时上限

Sbatch是脚本提交,脚本里面直接多个srun命令即可

参数如上。注意:-N指定节点数不能小于里面srun指定的数目

距离存在a.pl执行

Srun -N3 perl a.pl

注意执行slurm命令的时候回车会返回一个job号,然后产生一个slurm-job号.out文件,提交完命令后可以立刻查看一下out文件,如果里面什么都没有,恭喜你,执行成功了,在sview里可以看到。注意一定要查看下out文件,因为执行错了有时候也会在sview里出现该任务。一般报错都会在out文件里呈现。

 

 

 

 

 

 

 

 

 


你可能感兴趣的:(相对全面的SLURM集群的配置、安装及一些小问题的解决)