CentOS 7 安装Slurm
-
CentOS 7 安装Slurm
1. 前期准备
1.1 关闭SELinux
# vi /etc/sysconfig/selinux SELINUX=disabled # reboot # getenforce(查看SELinux状态)1.2 关闭 Firewall
# systemctl stop firewalld.service # systemctl disable firewalld.service1.3 安装EPEL Repo
# yum -y install epel-release1.4 安装axel与yum-axelget
# yum install axel yum-axelget2. Master Node安装Slurm
2.1.1 设置MariaDB.repo文件
推荐离线安装与在线安装都进行设置
打开/etc/yum.repos.d/,新建MariaDB.repo文件# cd /etc/yum.repos.d/ # vi MariaDB.repo打开https://downloads.mariadb.org/mariadb/repositories/,选择CentOS版本后,看到如下类似的的内容,在文件中粘贴内容,退出保存。
# MariaDB 10.2 CentOS repository list - created 2017-07-17 09:59 UTC # http://downloads.mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.2/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=12.1.2 下载,解压与安装
下载离线包,解压并进行安装
# wget https://downloads.mariadb.com/MariaDB/mariadb-10.2.7/yum/rhel/mariadb-10.2.7-rhel-7-x86_64-rpms.tar # tar xvf mariadb-10.2.7-rhel-7-x86_64-rpms.tar # cd mariadb-10.2.7-rhel-7-x86_64-rpms/ # yum localinstall -y MariaDB-* galera-25.3.20-1.rhel7.el7.centos.x86_64.rpm2.1.3 配置MariaDB
# service mysql start # mysql_secure_installation # systemctl enable mariadb.service # systemctl status mariadb.service # mysql -u root -p2.2 安装Slurm
2.2.1 创建全局用户
在创建用户和用户组前,需要键入命令vi /etc/group查看用户组是否冲突
- 列表注意:需要确保Master Node和Compute Nodes的UID和GID相同,如果未开启NIS和NFS服务,推荐进行以下步骤。
# export MUNGEUSER=1190 # groupadd -g $MUNGEUSER munge # useradd -m -c "MUNGE Uid 'N' Gid Emporium" -d /var/lib/munge -u $MUNGEUSER -g munge -s /sbin/nologin munge # export SlurmUSER=1191 # groupadd -g $SlurmUSER slurm # useradd -m -c "Slurm workload manager" -d /var/lib/slurm -u $SlurmUSER -g slurm -s /bin/bash slurm # cd /var/yp # make2.2.2 安装MUNGE
安装MUNGE进行身份验证。确保集群中的所有节点具有相同的munge.key。确保Munge的守护程序munged在Slurm的守护进程之前启动。
在所有节点安装MUNGE rpms,安装rng-tools来正确创建密钥:
# yum install munge munge-libs munge-devel -y # yum install rng-tools -y # rngd -r /dev/urandom2.2.3 配置MUNGE
2.2.3.1 创建全局密钥
在Master Node进行设置,创建一个在每个结点全局使用的密钥。
# /usr/sbin/create-munge-key -r # dd if=/dev/urandom bs=1 count=1024 > /etc/munge/munge.key # chown munge: /etc/munge/munge.key # chmod 400 /etc/munge/munge.key2.2.3.2 密钥同步
密钥创建成功后,需要将该密钥发送到所有计算节点:
# scp -p /etc/munge/munge.key root@192.168.118.195:/etc/munge # ...2.2.3.3 权限设置
设置正确的所有权限和模式
# chown -R munge: /etc/munge/ /var/log/munge/ # chmod 0700 /etc/munge/ /var/log/munge/ # chmod 0711 /var/lib/munge/2.2.3.4 启动MUNGE服务
# systemctl start munge # systemctl status munge # systemctl enable munge2.2.3.5 测试MUNGE服务
# munge -n # munge -n | unmunge # munge -n | ssh 192.168.118.195 unmunge # Master Node进行测试 # remunge2.2.4 Slurm的安装与配置
2.2.4.1 安装依赖包
# yum install openssl openssl-devel pam-devel numactl numactl-devel hwloc hwloc-devel lua lua-dev2.2.4.2 下载Slurm安装包
# wget https://download.schedmd.com/slurm/slurm-20.02.7.tar.bz22.2.4.3 安装rpmbuild编译Slurm
# yum install rpm-build # rpmbuild -ta slurm-20.02.7.tar.bz2如果rpmbuild出现如下错误:
error: Failed build dependencies: perl(ExtUtils::MakeMaker) is needed byslurm-20.02.7.tar.bz2利用cpanm安装Perl模块后再进行rpmbuild。
# yum install cpanm*2.2.4.4 安装Slurm
# cd /root/rpmbuild/RPMS/x86_64 # yum --nogpgcheck localinstall slurm-*2.2.4.5 配置Slurm
进入http://slurm.schedmd.com/configurator.easy.html,按照如下范例进行自定义设置:
ControlMachine: mhc ControlAddr: 192.168.118.163 NodeName: cas01 NodeAddr: 192.168.118.195 CPUs: 1 Sockets: 2 RealMemory: 27145 # terminal键入free -m查看,最好设置为实际值的85% StateSaveLocation: /var/spool/slurmctld SlurmctldLogFile: /var/log/slurmctld.log SlurmdLogFile: /var/log/slurmd.log AccountingStorageType=accounting_storage/mysql ClusterName: mhc JobAcctGatherType=jobacct_gather/linux点击Submit确认后,将页面的配置信息复制到slurm.conf中,保存退出;
# cd /etc/slurm # vim slurm.conf2.2.4.6 同步slurm.conf文件
设置正确的Master Node节点的slurm.conf发送给其他的Compute Node,同时对Compute Node进行配置;
# scp -p /etc/slurm/slurm.conf root@192.168.118.195:/etc/slurm/ # ...2.2.4.7 权限设置
确保Master Node具有所有正确的配置和文件
# mkdir /var/spool/slurmctld # chown slurm: /var/spool/slurmctld # chmod 755 /var/spool/slurmctld # touch /var/log/slurmctld.log # chown slurm: /var/log/slurmctld.log # touch /var/log/slurm_jobacct.log /var/log/slurm_jobcomp.log # chown slurm: /var/log/slurm_jobacct.log /var/log/slurm_jobcomp.log2.2.4.8 测试slurmd配置
查看slurmd配置是否正确
# slurmd -C2.2.4.9 开启slurmctld服务
开启Master Node的slurmctld服务
# systemctl start slurmctld.service # systemctl status slurmctld.service # systemctl enable slurmctld.service2.3 安装Slurm Accounting
Accounting records可以为slurm收集每个作业步骤的信息。Accounting records可以写入一个简单的文本文件或数据库。
通过将文本文件指定为Accounting存储类型从而可以轻松地将数据存储到文本文件中。但是这个文件会变得越来越大,难以使用。因此,最简单且推荐的方法是使用数据库来存储信息。而Mysql是目前唯一支持的数据库。
2.3.1 创建slurm_acct_db数据库
# mysql -u root -pslurm_acct_db数据库的配置:
> grant all on slurm_acct_db.* to ‘slurm’@’192.168.118.%’ identified by ‘!QAZ2wsx3edc’ with grant option > grant all on slurm_acct_db.* to ‘slurm’@’localhost’ identified by ‘!QAZ2wsx3edc’ with grant option; > SHOW VARIABLES LIKE ‘have_innodb’; > create database slurm_acct_db; > quit;2.3.2 配置slurmdbd.conf文件
# cp /etc/slurm/slurmdbd.conf.example /etc/slurm/slurmdbd.conf # chown slurm: /etc/slurm/slurmdbd.conf # chmod 600 /etc/slurm/slurmdbd.conf # mkdir /var/log/slurm/ # touch /var/log/slurm/slurmdbd.log # chown slurm: /var/log/slurm/slurmdbd.log # vi /etc/slurm/slurmdbd.conf LogFile=/var/log/slurm/slurmdbd.log DbdHost=localhost DbdPort=6819 slurmUser=slurm StorageHost=localhost StoragePass=!QAZ2wsx3edc StorageLoc=slurm_acct_db2.3.3 启动SlurmDBD服务
# systemctl enable slurmdbd # systemctl start slurmdbd # systemctl status slurmdbd3. Compute Node安装Slurm
3.1 安装Slurm
注意:在下面的步骤进行之前,需确保集群节点的NIS和NFS服务已经安装配置完成。
3.1.1 安装MUNGE
安装MUNGE进行身份验证
# yum install munge munge-libs munge-devel -y3.1.2 设置权限与启动MUNGE服务
设置Compute Node的MUNGE权限和启动MUNGE服务
在下列操作之前,Master Node应该将munge.key传到Compute Nodes
# chown -R munge: /etc/munge/ /var/log/munge/ # chmod 0700 /etc/munge/ /var/log/munge/ # systemctl start munge # systemctl enable munge3.1.3 测试MUNGE服务
在Master Node测试访问Compute Node
# munge -n | ssh 192.168.118.195 unmunge # ...3.1.4 Slurm的安装与配置
3.1.4.1 安装依赖包
# yum install openssl openssl-devel pam-devel numactl numactl-devel hwloc hwloc-devel lua lua-devel readline-devel rrdtool-devel ncurses-devel man2html libibmad libibumad -y3.1.4.2 安装Slurm
# scp root@192.168.118.163:/root/rpmbuild/RPMS/x86_64/* /root/rpmbuild/RPMS/x86_64/ # cd /root/rpmbuild/RPMS/x86_64 # yum --nogpgcheck localinstall slurm-*3.1.4.3 确保正确的配置
确保Compute Node具有所有正确的配置和文件
在下列操作之前,确保Master Node将slurm.conf发送给其他的Compute Nodes
# mkdir /var/spool/slurmd # chown slurm: /var/spool/slurmd # chmod 755 /var/spool/slurmd # touch /var/log/slurmd.log # chown slurm: /var/log/slurmd.log3.1.4.4 开启slurmd服务
开启Compute Node的slurmd服务
# systemctl start slurmd.service # systemctl status slurmd.service # systemctl enable slurmd.serviceCompute Nodes中出现Failed to start slurm node daemon.时候,同时cat /var/log/slurm.log后看到cannot create proctrack context for proctrack/cgroup错误的时候,执行:
# cd /etc/slurm/ # cp cgroup.conf.example cgroup.conf # cp cgroup_allowed_devices_file.conf.example cgroup_allowed_devices_file.conf4. Slurm 测试指令
4.1 slurm测试
4.1.1 显示所有Compute Nodes
scontrol show nodes
如果Compute Nodes的State=DOWN,则如下执行,将状态变成IDLE:
# scontrol update nodename=cas01 state=resume4.1.2 简单测试执行
# srun -N4 hostname4.1.3 查看节点
# scontrol show nodes4.1.4 显示作业数量
# scontrol show jobs4.1.5 使用脚本
# sbatch -N2 script-file4.2 常见API
-
列表sacct 被用来汇报工作或者解释激活的或完成的工作的信息的工作步骤。
-
列表salloc 被用来实时的分配给一个工作任务资源。经常地这被用来分配资源并生成一个Shell(命令解释程序)。这个Shell程序然后被用来执行srun命令运行平行的任务们。
-
sattach 被用来将标准输入输出以及错误的附加的信号能力附着于目前正在执行的工作或工作步骤。这既可以被附着也可以将其从多任务线程中分离。
-
sbatch 被用来提交一段工作脚本以进行后续的执行,这个脚本经常性地包括一个或多个srun命令去运行平行任务。
-
列表sbcast 被用来将一个文件从当地硬盘转移到当地硬盘上被分配到这个工作的节点上。这可以被用来高效地使用(diskless)不怎么使用硬盘的计算节点或相对于一个共享文件系统而言提供更好的性能。
scancel被用来取消一个挂起或正在执行的工作或工作步骤。他能够被用来发送任意信号给所有与正在执行的工作或工作步骤相关的进程。 -
列表scontrol 是管理性的工具用来视察并或修改slurm状态。记住许多scontrol命令只能被管理员root权限执行。
-
列表sinfo 记录了由slurm管理的(partition)分区和节点的状态,它有广泛多样的如过滤、排序、格式化等的选项。
-
列表smap 记录了由slurm管理的工作、分区和节点的状态信息,但图像化显示的信息业反映了网络拓扑结构。
-
列表strigger 被用来设置、获得或视察事件触发器。事件触发器包括了诸如节点going down(挂死)或工作任务接近了它们的限制事件。
sview 是一个图像化的用户界面用来获得并更新由slurm管理的工作、分区以及节点的状态信息。
5. 参考资料
https://www.slothparadise.com/how-to-install-slurm-on-centos-7-cluster/
https://wiki.fysik.dtu.dk/niflheim/Slurm_database
https://hrouhani.org/slurm-workload-manager/ -
@zhanglu 在 CentOS 7 安装Slurm 中说:
systemctl start munge
启动munged报错:
sudo -u munge /usr/sbin/munged
munged: Error: Keyfile is insecure: invalid ownership of
"/etc"
查看etc 权限 确实不是root (原因不太清楚)

chown root:root /etc 修改权限