HPC 系列文章(6):Slurm部署

deploy

本节将介绍Slurm实验环境的安装,包括一个控制节点和两个计算节点(控制节点同时作为计算节点),无特殊说明的情况下一下步骤在每个节点上都要执行(仅有少量区别),如果节点比较多可以考虑使用Ansible或者Salt之类的运维管理工具批量操作。

安装准备

关闭SELinux

1
2
3
vim /etc/sysconfig/selinux
配置 SELINUX=disabled
然后重启

关闭部分服务

建议先将防火墙和NetworkManager服务关掉,后面我们再介绍防火墙的配置

1
2
systemctl stop firewalld NetworkManager
systemctl disable firewalld NetworkManager

EPEL源配置

Slurm所依赖的软件包在EPEL源中才能找到,所以我们需要先配置EPEL

1
rpm -Uvh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

安装时间同步服务

各个节点上通过ntpd服务实现时间同步,确保各节点的系统时间一致。先校准主控节点的时间,然后配置ntpd服务

1
2
3
4
5
yum install ntp -y
systemctl enable ntpd.service
systemctl start ntpd

# 计算节点上将ntpd服务指向管理节点

软件安装

依赖包安装

1
yum install -y readline-devel perl-ExtUtils-MakeMaker openssl-devel pam-devel rpm-build perl-DBI perl-Switch mariadb-devel hwloc-devel

hwloc-devel缺失会导致cgroup plugin无法使用

安装MUNGE

Slurm采用MUNGE提供进程鉴权服务,集群中每个节点都应该采用相同的密钥。在启动Slurm服务之前,需要先启动munged。

1
yum install -y munge-devel munge-libs munge

设置正确的权限

配置正确的文件权限,否则munged服务将无法启动

1
2
3
4
chmod -Rf 700 /etc/munge
chmod -Rf 711 /var/lib/munge
chmod -Rf 700 /var/log/munge
chmod -Rf 0755 /var/run/munge

另外需要注意的是检查一下 / etc/munge/munge.key 文件,文件的 owner 和 group 必须是 munge,否则启动会失败。

下载Slurm软件包

1
wget https://download.schedmd.com/slurm/slurm-17.11.9-2.tar.bz2

编译Slurm

1
rpmbuild -ta slurm-17.11.9-2.tar.bz2

安装Slurm

1
2
ls -l ~/rpmbuild/RPMS/x86_64/*.rpm
rpm -Uvh ~/rpmbuild/RPMS/x86_64/*.rpm

在计算节点上无需安装slurmdbd、slurmctld服务

安装MariaDB

因为Slurmdbd依赖MariaDB所以如果需要使用Slurmdbd则我们需要安装MariaDB

1
2
3
4
yum install mariadb-server -y
systemctl start mariadb
systemctl enable mariadb
mysql_secure_installation

创建数据库

使用mysql命令行执行如下命令:

1
2
3
mysql> grant all on slurm_acct_db.* TO 'slurm'@'localhost'
-> identified by 'some_pass' with grant option;
mysql> create database slurm_acct_db;

Slurm基本配置

进入 / etc/slurm / 目录,复制 slurm.conf.example 文件成 slurm.conf,然后编辑 / etc/slurm/slurm.conf 文件,下面是我的文件中修改的部分:

1
2
3
4
5
6
7
8
9
10
ControlMachine=master
ControlAddr=10.0.0.21
SlurmUser=slurm
SelectType=select/cons_res
SelectTypeParameters=CR_Core
FastSchedule = 2
NodeName=master RealMemory=2048 Sockets=1 CoresPerSocket=2 State=IDLE
NodeName=node01 RealMemory=1024 Sockets=1 CoresPerSocket=1 State=IDLE
PartitionName=all Nodes=master,node01 Default=YES State=UP
PartitionName=node01 Nodes=node01 Default=NO

这是一份最简单的Slurm配置,后面我们将逐步详细介绍Slurm的配置项。将此配置项拷贝到node01的相同目录下。启动服务:

1
2
3
4
5
6
7
# 主控节点
systemctl start slurmctld slurmd
systemctl enable slurmctld slurmd

# 计算节点
systemctl start slurmd
systemctl enable slurmd

验证

在任意节点执行sinfo命令,你将看到类似输出,则证明服务工作正常:

1
2
3
4
 sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
all* up infinite 2 idle master,node01
node01 up infinite 1 idle node01

否则请查看/var/log/slurm/slurmctld.log及/var/log/slurm/slurmd.log日志文件排错。

坚持原创技术分享,您的支持将鼓励我继续创作!