slurm任务调度系统部署和测试(一)
1.概述
本博客通過VMware workstation創建了虛擬機console,然后在console內部創建了8臺kvm虛擬機,使用這8臺虛擬機作為集群,來部署配置和測試slurm任務調度系統。
console虛擬機配置為:4核心CPU,8G內存,20G系統盤安裝OS,20G數據盤掛載到/opt,10G數據盤掛載到/home,一塊NAT網卡模擬帶外,一塊Host only網卡模擬專用內網
在使用console部署8臺kvm虛擬機之后,需要做一下操作:
部署console到node11-18的免密碼登陸,通過sshpass+shell實現
部署console為NTP服務器,同步node11-18的時間到console
部署console為LDAP服務器,能夠實現全局用戶認證
格式化數據盤,將/opt和/home通過NFS共享給node11-18
注:
上面這部分內容涉及較多,如VMware workstation部署虛擬機console,console虛擬機部署kvm虛擬機,創建并掛載NFS全局文件系統,console到多節點的免密碼登陸,NTP和LDAP服務部署等,這里不做一一詳述。
2.同步時間節點
將console部署為NTP服務器之后,通過定時執行同步任務來保證所有節點時間一致:
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.下載軟件包
munged-0.5.12
slurm-16.05.3(該軟件包因為安全漏洞問題,已經無法下載,可下載其他版本)
4.編譯安裝munge-0.5.12
1.創建安裝目錄:
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.創建munge.key,并修改權限:
cd /opt/munge/munge-0.5.12/etc
echo "helloeveryone,I'ammungekeyonkvmcluster." >munge.key && chmod 600 munge.key
這里munge.key可以手動創建,但是必須保證其內容在32個字節以上,且文件權限為600方可
2.在所有需要部署slurmd的節點上創建munged運行需要的目錄
pdsh -w node[11-18] mkdir -p /var/{log,run,lib}/munge
假如這三個目錄為全局目錄,即安裝在/opt上的話,則節點不能夠同時啟動munged
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/sinb
拷貝至其他節點:
for i in $(seq 11 18)
do
    scp /etc/profile.d/optevn.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/
--with-mysql_config=xxx
make && make install 
3.創建其他所需目錄
cd  /opt/slurm/slurm-16.05.3 && mkdir etc log state
etc:用于放置slurmctld,slurdbd的配置文件
log:   用于存放slurmctld,sluedbd的日志文件
state:用戶存放作業狀態的目錄
4.創建slurmadmin用戶,并修改相應目錄權限
chown -R slurmadmin:slurmadmin state  && chmod 777 log
7. 配置slurm
創建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-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.校對節點時間
2.啟動munged進程
3.啟動slurmdbd進程
ssh node11 slurmdbd
4.啟動slurmctld進程
ssh node11 slurmctld
5.添加集群
sacctmgr add cluster myslurm
6.啟動節點slurmd
pdsh -w node[11-18] slurmd
7.測試
sinfo
8.測試提交
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一些具體的功能做測試
總結
以上是生活随笔為你收集整理的slurm任务调度系统部署和测试(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 计算 1+2!+3!+4!+...20!
- 下一篇: 用户态和内核态的理解和区别
