slurm-16.05.3任务调度系统部署与测试

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了slurm-16.05.3任务调度系统部署与测试相关的知识,希望对你有一定的参考价值。

1.概述

本博客通过VMware workstation创建了虚拟机console,然后在console内部创建了8台kvm虚拟机,使用这8台虚拟机作为集群,来部署配置和测试slurm任务调度系统

配置为4核心CPU,8G内存,20G系统盘,20G数据盘挂载到/opt,10G数据盘挂载到/home,一块NAT网卡模拟带外,一块Host only网卡模拟专用内网

为了使console能够同时管理8台kvm虚拟机,需要做一下部署和操作:

  • 部署console到8台虚拟机node11-node18的免密码登陆,通过sshpass+shell的for循环实现
  • 部署console为NTP服务器,将node11-node18的NTP指向为console
  • 部署console为LDAP服务器,能够实现用户的全局管理和认证
  • 格式化数据盘之后,将文件系统/opt,/home通过NFS共享给node11-node18

注:
这部分内容涉及较多,如VMware workstation虚拟机创建,KVM虚拟机创建,创建NFS全局文件系统,多节点免密码登陆,NTP服务器和LDAP服务器部署等,这里为避免内容喧宾夺主,具体细节不多加描述,可参见本人之前博客,或在网上检索各类优秀教程。

2.同步节点时间

将console部署NTP服务器周,通过计划任务来同步node[11-18]时间
pdsh -w node[11-18] ntpdate 192.168.80.8
执行crontab -e,输入:

*/5 * * * *  pdsh -w node[11-18] "ntpdate 192.168.80.8;hwclock --systohc"

3.下载并解压文件

本博客使用的是:
munge-0.5.12
slurm-16.05.3(该版本已经无法下载,可以下载更高版本)

4.编译安装munge-0.5.12

创建安装目录:mkdir -p /opt/munge/munge-0.5.12
解压:unzip munge-munge-0.5.12.zip
编译:cd unzip munge-munge
帮助:./configure --help,按照以下参数编译:

注:因为采用将munge安装在全局文件系统NFS上,为了保证每个节点都保存不同的状态,否则会造成互斥,而无法启动进程,因此将--localstatedir指定到不同的目录,这里各个节点的根文件系统的var目录

./configure --prefix=/opt/munge/munge-0.5.12 --sysconfdir=/opt/munge/munge-0.5.12/etc --localstatedir=/var 
编译报错(1):
checking which cryptographic library to use... failed
configure: error: unable to locate cryptographic library
解决如下:
yum -y install openssl openssl-devel

编译安装:make && make install
查看安装 :

[[email protected] munge-0.5.12]# pwd
/opt/munge/munge-0.5.12
[[email protected] munge-0.5.12]# ls
bin  etc  include  lib  sbin  share
[[email protected] munge-0.5.12]#

5.配置munge

1.创建munge.key,并修改权限:
cd /opt/munge/munge-0.5.12/etc
echo "helloeveryone,I‘ammungekeyonkvmcluster." > munge.key && chmod 600 munge.key

注:munge.key的内容必须大于32字节,否则在启动munged时会提示:munged: Error: Keyfile must be at least 32 bytes

2.在所有节点上创建munge运行时所需要的目录:
pdsh -w node[11-18] mkdir -p /var/{log,run,lib}/munge

3.修改munge运行进程的用户为超级用户root
cd /opt/munge/munge-0.5.12/etc/rc.d/init.d
vim munge修改内容如下:

prefix="/opt/munge/munge-0.5.12"
exec_prefix="${prefix}"
sbindir="${exec_prefix}/sbin"
sysconfdir="/opt/munge/munge-0.5.12/etc"
localstatedir="/var"
SERVICE_NAME="MUNGE"
DAEMON_EXEC="$sbindir/munged"
PIDFILE="$localstatedir/run/munge/munged.pid"
USER="root"
GROUP="root"
VARRUNDIR="$localstatedir/run/munge"

4.修改启动脚本的配置文件
vim /opt/munge/munge-0.5.12/etc/sysconfig/munge,内容如下:

DAEMON_ARGS="--key-file /opt/munge/munge-0.5.12/etc/munge/munge.key --num-threads 1"
USER="root"
GROUP="root"

5.创建环境变量添加脚本并拷贝到各个节点
vim /etc/profile.d/optenv.sh

#!/bin/bash
export PATH=$PATH:/opt/munge/munge-0.5.12/sbin

拷贝该脚本至所有节点

for i in $(seq 11 18)
do
 scp /etc/profile.d/optenv.sh node$i:/etc/profile.d
done

6.节点启动munged
pdsh -w node[11-18] munged
pdsh -w node[11-18] ps -ef|grep munge|grep -v grep

6.编译安装slurm-16.05.3

1.创建安装目录:
mkdir -p /opt/slurm/slurm-16.05.3
2.编译安装,执行如下:

./configure --prefix=/opt/slurm/slurm-16.05.3/ --sysconfdir=/opt/slurm/slurm-16.05.3/etc 
--with-munge=/opt/munge/munge-0.5.12/

make && make install

3.创建其他所需目录
cd /opt/slurm/slurm-16.05.3 && mkdir etc log state

  • etc:用于放置slurmctld,slurmdbd的配置文件等
  • log:用户存放slurmctld,slurmdbd的日志文件等
  • state:用于存放作业状态文件等

4.创建slurmadmin用户,并修改相应目录权限

注:slurmadmin用户用作运行slurmctld,slurmdbd等进程的用户,需要手动创建
同时修改state的属主为slurmadmin,同时增加log目录的slurmadmin写权限

chown -R slurmadmin:slurmadmin state && setfacl -R -m u:slurmadmin:rwx log

7.配置slurm

注:
slurm集群中,存在slurmctld,slurmdbd,slurmd三种守护进程。本博客中做以下规定:
node11运行slurmctld(master),slurmdbd
node12运行slurmctld(backup)
node13-18运行slurmd
同时也在node11上配置mysql,运行mysqld进程。
在实际应用过程中,可以将slurmctld(master),slurmctld(backup),slurmdbd,mysqld运行在不同节点,只要在编辑配置文件过程中,正确指定即可。

1.创建slurm.conf,如下:

#slurm集群名称
ClusterName=myslurm
#slurm主控制器主机名
ControlMachine=node11
#slurm从控制器主机名
BackupController=node12
#slurm进程用户
SlurmUser=slurmadmin
#slurmd节点守护进程用户
SlurmdUser=root
#slurmctld控制器端口
SlurmctldPort=6817
#slurmd节点守护进程端口
SlurmdPort=6818
#slurm通信认证
AuthType=auth/munge

SwitchType=switch/none
MpiDefault=none
#slurm任务状态保存目录
StateSaveLocation=/opt/slurm/slurm-16.05.3/state
#slurmd守护进程日志保存
SlurmdSpoolDir=/var/log/slurmd
#slurmctld的pid存放
SlurmctldPidFile=/var/run/slurmctld.pid
#slurmd守护进程的pid文件存放
SlurmdPidFile=/var/run/slurmd.pid

TaskPlugin=task/cgroup
ProctrackType=proctrack/cgroup
#第一个jobid号
FirstJobId=1000
#最大的jobid号
MaxJobId=50000
ReturnToService=2

SlurmctldTimeout=300
SlurmdTimeout=300
TCPTimeout=10
InactiveLimit=0
MinJobAge=300
KillWait=30
Waittime=0
SchedulerType=sched/backfill
SelectType=select/linear

FastSchedule=1
DebugFlags=NO_CONF_HASH
SlurmctldDebug=3
#slurmctld控制器守护进程的日志存放,全局文件系统
SlurmctldLogFile=/opt/slurm/slurm-16.05.3/log/slurmctldlogfile
SlurmdDebug=3
#slurmd节点守护进程的日志文件,节点本地
SlurmdLogFile=/var/log/slurmdlogfile
#slurm运行插件的路径
PluginDir=/opt/slurm/slurm-16.05.3/lib:/opt/slurm/slurm-16.05.3/lib/slurm
#jod限制类型
JobAcctGatherType=jobacct_gather/cgroup
#计费等配置
#采用slurmdbd守护进程进行存储
AccountingStorageType=accounting_storage/slurmdbd
#运行slurmdbd进程的节点主机名
AccountingStorageHost=node11
#slurmdbd运行节点的端口
AccountingStoragePort=6819
AccountingStorageEnforce=limints,qos
#account存放的库
AccountingStorageLoc=slurm_acct_db
#运行slurmdbd的数据库用户
AccountingStorageUser=slurmadmin
AccountingStoragePass=/var/run/munge/munge.socket.2
AcctGatherNodeFreq=180
#资源配置,包括节点配置,队列(分区)配置等
NodeName=node[11-18] CPUs=4 RealMemory=300 sockets=2 CoresPerSocket=2 ThreadsPerCore=1 State=UNKNOWN
PartitionName=q_x86_1 Nodes=node[11-18] MaxTime=INFINITE State=UP DEFAULT=YES AllowAccounts=ALL

2.创建slurmdbd.conf,如下:

PurgeEventAfter=1month
PurgeJobAfter=36month
PurgeResvAfter=1month
PurgeStepAfter=1month
PurgeSuspendAfter=1month
DebugLevel=debug5
LogFile=/opt/slurm/slurm-16.05.3/log/slurmdbd.log
PidFile=/var/run/slurmdbd.pid
AuthType=auth/munge
AuthInfo=/var/run/munge/munge.socket.2
DbdHost=node11
DbdPort=6819
SlurmUser=slurmadmin
StorageType=accounting_storage/mysql
StorageHost=node11
StorageLoc=slurm_acct_db
StoragePort=3306
StorageUser=slurmadmin
StoragePass=liwanliang

3.创建cgroup.conf,如下:

#CgroupReleaseAgentDir=="/etc/slurm/cgroup"
CgroupAutomount=yes
CgroupMountpoint=/cgroup
CgroupReleaseAgentDir=="/tmp/slurm"
ConstrainCores=yes
TaskAffinity=no
ConstrainRAMSpace=no
MaxRAMPercent=98
AllowedRAMSpace=96

8.配置MySQL数据库环境

根据配置文件,需要在node11部署mysql服务器,操作如下:
1.安装MySQL:yum -y install mysql mysql-client mysql-server mysql-libs
2.启动MySQL,并设置开机自启动:service mysqld start && chkconfig mysql on
3.配置MySQL权限:执行mysql进入数据库,配置root登陆权限:

use mysql;
delete from user where user = ‘ ‘ and host = ‘localhost‘ ;
delete from user where user = ‘ ‘ and host = ‘node11‘;
grant all privileges on *.* to ‘root‘@‘%‘ identified by ‘liwanliag‘;
create database slurm_acct_db;
grant all privileges on slurm_acct_db.* to ‘slurmadmin‘@‘node11‘ identified by ‘liwanliang‘;
flush privileges;

9.启动slurm集群

1.启动munged
console执行:pdsh -w ssh:node[11-18] munged
2.启动slurmdbd
console执行:ssh node11 slurmdbd
注意,此时需要在数据库中添加集群
执行: sacctmgr add cluster myslurm
3.启动slurmctld
console执行:ssh node11 slurmctld
4.验证集群信息
console执行:sinfo

注:此时console必须也munged,否则会报错。
此时显示:q_x86_1* up infinite 8 down* node[11-18]

5.启动节点的slurmd
console执行:pdsh -w ssh:node[11-18] slurmd

注:
此时显示:q_x86_1* up infinite 8 idle node[11-18]

6.测试提交
console执行:srun -n 32 hostname

10.总结

本博客只是slurm集群的基本部署和测试。在部署过程中遇到两个比较棘手的问题:

1.munge编译过程中的没有安装mysql-devel环境,导致在编译slurm的时候不能够编译相应的插件。此时通过yum -y install msyql-devel安装依赖环境,然后重新编译解决
2.在所有环境部署好之后,通过sinfo发现有6个节点总是drain状态,这个状态表示节点通过slurmd获取的节点配置和配置文件中的不相同,尤其是节点的CPU的参数。最后通过重新配置参数,然后清空state目录下的所有文件,同时修改log目录权限为777 解决

下篇博客主要会测试一些其他复杂的功能。

以上是关于slurm-16.05.3任务调度系统部署与测试的主要内容,如果未能解决你的问题,请参考以下文章

slurm任务调度系统部署和测试

任务调度思考与开源软件opencron的使用经验

5 系统的测试与扩展

Airflow 2.2.3 + MySQL 8.0.27 + Redis 6.2 部署Airflow任务调度平台

JUC并发编程 共享模式之工具 ThreadPoolExecutor -- 任务调度线程池 定时任务 / 延时执行(ScheduledThreadPoolExecutor 延时执行 / 定时执行)(代

(2021-03-26)大数据学习之Flink安装部署以及任务提交/调度详解