slurm任务调度系统部署和测试(一)
1.概述
本博客通過VMware workstation創(chuàng)建了虛擬機console,然后在console內(nèi)部創(chuàng)建了8臺kvm虛擬機,使用這8臺虛擬機作為集群,來部署配置和測試slurm任務(wù)調(diào)度系統(tǒng)。
console虛擬機配置為:4核心CPU,8G內(nèi)存,20G系統(tǒng)盤安裝OS,20G數(shù)據(jù)盤掛載到/opt,10G數(shù)據(jù)盤掛載到/home,一塊NAT網(wǎng)卡模擬帶外,一塊Host only網(wǎng)卡模擬專用內(nèi)網(wǎng)
在使用console部署8臺kvm虛擬機之后,需要做一下操作:
部署console到node11-18的免密碼登陸,通過sshpass+shell實現(xiàn)
部署console為NTP服務(wù)器,同步node11-18的時間到console
部署console為LDAP服務(wù)器,能夠?qū)崿F(xiàn)全局用戶認證
格式化數(shù)據(jù)盤,將/opt和/home通過NFS共享給node11-18
注:
上面這部分內(nèi)容涉及較多,如VMware workstation部署虛擬機console,console虛擬機部署kvm虛擬機,創(chuàng)建并掛載NFS全局文件系統(tǒng),console到多節(jié)點的免密碼登陸,NTP和LDAP服務(wù)部署等,這里不做一一詳述。
2.同步時間節(jié)點
將console部署為NTP服務(wù)器之后,通過定時執(zhí)行同步任務(wù)來保證所有節(jié)點時間一致:
pdsh -w node[11-18] ntpdate 192.168.80.8
將該命令寫入定時任務(wù):
crontab -e
*/5 * * * * pdsh -w node[11-18] "ntpdate 192.168.80.8; hwclock --systohc"
3.下載軟件包
munged-0.5.12
slurm-16.05.3(該軟件包因為安全漏洞問題,已經(jīng)無法下載,可下載其他版本)
4.編譯安裝munge-0.5.12
1.創(chuàng)建安裝目錄:
mkdir -p /opt/munge/munge-0.5.12
2.解壓:
unzip munge-munge-0.5.12.zip
3.編譯:
cd munge-munge-0.5.12
./configure --prefix=/opt/munge/munge-0.5.12 --sysconfdir=/opt/munge/munge-0.5.12/etc --localstatedir=/var
make && make install
注:
此時編譯報錯:
checking which cryptographic library to use... failed
configure: error: unable to locate cryptographic library
解決如下:
yum -y install openssl openssl-devel
此時可以在/opt/munge/munge-0.5.12下,查看到munge的各類目錄
5.配置munge
我希望munged在運行的時候,以root用戶的身份運行(默認是munge用戶),此時需要修改配置。
1.創(chuàng)建munge.key,并修改權(quán)限:
cd /opt/munge/munge-0.5.12/etc
echo "helloeveryone,I'ammungekeyonkvmcluster." >munge.key && chmod 600 munge.key
這里munge.key可以手動創(chuàng)建,但是必須保證其內(nèi)容在32個字節(jié)以上,且文件權(quán)限為600方可
2.在所有需要部署slurmd的節(jié)點上創(chuàng)建munged運行需要的目錄
pdsh -w node[11-18] mkdir -p /var/{log,run,lib}/munge
假如這三個目錄為全局目錄,即安裝在/opt上的話,則節(jié)點不能夠同時啟動munged
3.修改munge運行的進程用戶為root
cd /opt/munge/munge-0.5.12/etc/rc.d/init.d
vim munge編輯內(nèi)容如下:
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,內(nèi)容如下:
DAEMON_ARGS="--key-file /opt/munge/munge-0.5.12/etc/munge/munge.key --num-threads 1"
USER="root"
GROUP="root"
5.創(chuàng)建添加環(huán)境變量的腳本,拷貝到其他節(jié)點
vim /etc/profile.d/optenv.sh
#!/bin/bash
export PATH=$PATH:/opt/munge/munge-0.5.12/sinb
拷貝至其他節(jié)點:
for i in $(seq 11 18)
do
scp /etc/profile.d/optevn.sh node$i:/etc/profile.d/
done
6.節(jié)點啟動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.創(chuàng)建安裝目錄:
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/
--with-mysql_config=xxx
make && make install
3.創(chuàng)建其他所需目錄
cd /opt/slurm/slurm-16.05.3 && mkdir etc log state
etc:用于放置slurmctld,slurdbd的配置文件
log: 用于存放slurmctld,sluedbd的日志文件
state:用戶存放作業(yè)狀態(tài)的目錄
4.創(chuàng)建slurmadmin用戶,并修改相應(yīng)目錄權(quán)限
chown -R slurmadmin:slurmadmin state && chmod 777 log
7. 配置slurm
創(chuàng)建slurm.conf,內(nèi)容如下:
#slurm集群名稱
ClusterName=myslurm
#slurm主控制器主機名
ControlMachine=node11
#slurm從控制器主機名
BackupController=node12
#slurm進程用戶
SlurmUser=slurmadmin
#slurmd節(jié)點守護進程用戶
SlurmdUser=root
#slurmctld控制器端口
SlurmctldPort=6817
#slurmd節(jié)點守護進程端口
SlurmdPort=6818
#slurm通信認證
AuthType=auth/munge
SwitchType=switch/none
MpiDefault=none
#slurm任務(wù)狀態(tài)保存目錄
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控制器守護進程的日志存放,全局文件系統(tǒng)
SlurmctldLogFile=/opt/slurm/slurm-16.05.3/log/slurmctldlogfile
SlurmdDebug=3
#slurmd節(jié)點守護進程的日志文件,節(jié)點本地
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進程的節(jié)點主機名
AccountingStorageHost=node11
#slurmdbd運行節(jié)點的端口
AccountingStoragePort=6819
AccountingStorageEnforce=limints,qos
#account存放的庫
AccountingStorageLoc=slurm_acct_db
#運行slurmdbd的數(shù)據(jù)庫用戶
AccountingStorageUser=slurmadmin
AccountingStoragePass=/var/run/munge/munge.socket.2
AcctGatherNodeFreq=180
#資源配置,包括節(jié)點配置,隊列(分區(qū))配置等
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.創(chuàng)建slurmdbd.conf,內(nèi)容如下:
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.創(chuàng)建cgroup.conf,內(nèi)容如下:
#CgroupReleaseAgentDir=="/etc/slurm/cgroup"
CgroupAutomount=yes
CgroupMountpoint=/cgroup
CgroupReleaseAgentDir=="/tmp/slurm"
ConstrainCores=yes
TaskAffinity=no
ConstrainRAMSpace=no
MaxRAMPercent=98
AllowedRAMSpace=96
8.配置MySQL數(shù)據(jù)庫環(huán)境
根據(jù)配置文件,需要在node11上部署MySQL服務(wù)器
1.安裝MySQL
yum -y install mysql mysql-server mysql-client mysql-libs
2.啟動MySQL
service mysqld start && chkconfig mysqld on
3.配置MySQL
use mysql;
delete from user where user = ' ' and host = 'localhost' ;
delete from user where user = ' ' and host = 'node11';
grant all privileges on *.* to 'root'@'localhost' identified by 'liwanliag';
grant all privileges on *.* to 'root'@'node11' identified by 'liwanliag';
grant all privileges on *.* to 'root'@'127.0.0.1' identified by 'liwanliag';
grant all privileges on *.* to 'root'@'192.168.80.11' 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.校對節(jié)點時間
2.啟動munged進程
3.啟動slurmdbd進程
ssh node11 slurmdbd
4.啟動slurmctld進程
ssh node11 slurmctld
5.添加集群
sacctmgr add cluster myslurm
6.啟動節(jié)點slurmd
pdsh -w node[11-18] slurmd
7.測試
sinfo
8.測試提交
srun -n 32 hostname
10.總結(jié)
本博客中,只是對slurm部署做了最基本的配置和測試。
在部署過程中,遇到兩個比較棘手的問題:
1.munge編譯過程中的沒有安裝mysql-devel環(huán)境,導致在編譯slurm的時候不能夠編譯相應(yīng)的插件。
此時通過yum -y install msyql-devel安裝依賴環(huán)境,然后重新編譯解決 。
2.在所有環(huán)境部署好之后,通過sinfo發(fā)現(xiàn)有6個節(jié)點總是drain狀態(tài)。
這個狀態(tài)表示節(jié)點通過slurmd獲取的節(jié)點配置和配置文件中的不相同,尤其是節(jié)點的CPU的參數(shù)。最后通過重新配置參數(shù),然后清空state目錄下的所有文件,同事修改log目錄權(quán)限為777 解決。
在下一篇博客中,將會對slurm一些具體的功能做測試
總結(jié)
以上是生活随笔為你收集整理的slurm任务调度系统部署和测试(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算 1+2!+3!+4!+...20!
- 下一篇: 兴业紫藤花信用卡年费多少?怎么免年费?