2.同步节点时间
3.下载并解压文件
4.编译安装munge-0.5.12
5.配置munge
6.编译安装slurm-16.05.3
7.配置slurm
8.配置MySQL数据库环境
9.启动slurm集群
10.总结
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 解决
下篇博客主要会测试一些其他复杂的功能。