Slurm资源管理与作业调度系统的安装配置以及简单维护手册
该文档基于slurm 23.02.1及CentOS 7.9 x86_64、除特殊说明所有命令都在root环境下执行
1. Slurm简介
1.1 用途
Slurm是一个开源的,具有容错性和高可用性的linux集群超级计算机资源管理和作业调度系统,具有可以避免相互干扰,提高运行效率等特点。
1.2 专业术语
-
节点:
- Head Node :头节点,管理节点,控制节点
- Compute Node :计算节点
- Login Node :登陆节点
- DBD Node : 数据库节点
-
用户:
- account : 账户,一个账户中包含多个用户
- user : 用户,多个用户可以共享一个账户
- bank account : 银行账户,对应付费和机时费
-
资源:
- GRES : 通用资源
- TRES : 可追踪资源
- QOS : 服务质量,作业优先度
1.3架构以及命令
Slurm具有四个守护进程,分别是Slurmctld,Slurmd,Slurmdbd,Slurmrestd.其中Slurmctld运行在控制节点,作为中心管理器用于检测资源和作业(可以配置备份的管理节点用于保证高可用性)。Slurmd运行在所有计算节点上,以便被用于作为远程shell使用:等待作业、执行作业、返回状态、再等待更多作业。Slurmdbd运行在数据库节点,一般用于与数据库进行交互,管理集群的记账信息。Slurmrestd(Slurm REST API Daemon)服务(非必需),该服务可以通过REST API与Slurm进行交互,所有功能都对应的API。
常见命令:
#用户作业工具 srun //提交运行作业 scacle //取消运行作业 sinfo //查看系统运行状态 squeue //查看作业状态 sacct //查看运行或结束的作业以及作业步信息 #系统管理命令 scontrol //启动一个shell,作为管理工具、可以监控、修改集群的配置和状态信息等。 #数据库管理命令 sacctmgr //启动一个shell,用以管理数据库,可认证集群、有效用户、有效记账账户等。
1.4 配置模式
Slurm客户节点配置,有两种模式:
- 传统模式:采用slurm.conf 等配置文件进行配置。
- 无配置(configless)模式:客户节点无需配置 配置文件。
无配置模式是Slurm的一项新特性(从20.02版起支持),可以允许计算节点和用户登录节点从slurmctld守护进程获取配置而无需采用 /etc/slurm 等目录下的本地配置文件。集群在Slurm控制节点上统一控制配置文件,计算节点、登录节点和其它集群节点只需通过 /lib/systemd/system/slurmd.service 文件配置slurmd服务启动参数,利用启动后的slurmd服务获取所需配置信息即可,而无需复制管理节点上的这些文件成为本地文件(降低文件配置不一样的风险)。支持的配置文件有:
- slurm.conf
- acct_gather.conf
- cgroup.conf
- cgroup_allowed_devices_file.conf
- cli_filter.lua
- ext_sensors.conf
- gres.conf
- helpers.conf
- job_container.conf
- knl_cray.conf
- knl_generic.conf
- oci.conf
- plugstack.conf
- topology.conf
slurmd服务启动时将从指定的slurmctld节点获取配置文件,slurmctld节点可以采用 --conf-server
参数准确指定或利用DNS SRV记录指定,采用 --conf-server
参数指定的优先级高于采用DNS SRV记录指定:
- 采用
--conf-server
参数指定(默认端口6817可省略):
- 仅一个管理节点slurmctl-primary:
slurmd --conf-server slurmctl-primary:6817
- 一个管理节点slurmctl-primary和一个备份节点slurmctl-secondary:
slurmd --conf-serverslurmctl-primary:6817,slurmctl-secondary
- 采用DNS SRV记录:
- _slurmctld._tcp 3600 IN SRV 10 0 6817 slurmctl-backup
- _slurmctld._tcp 3600 IN SRV 0 0 6817 slurmctl-primary
2. 安装准备
- 所有节点中的slurm服务应由slurm用户守护运行,且节点间的slurm用户应拥有同一uid。应使用
useradd -u
命令在所有节点添加slurm用户并将相应文件的属主改为此用户 - 节点间采用munge进行通讯认证,所有munge应使用同一个munge.key文件运行,可使用
munge -n | ssh ip unmunge
验证节点间通讯是否成功 - 为数据库节点安装mysql数据库,并创建对应的数据库,数据库用户,并授权
3. 编译安装slurm
可以采用第三方已经编译好的RPM或者DEB包,也可以在任意节点进行源码编译方式进行安装
3.1 安装依赖
安装编译Slurm时所需要的依赖性,执行一下命令
yum -y install mariadb mariadb-devel mariadb-server munge munge-libs munge-devel hwloc-libs hwloc-devel hdf5-devel pam-devel perl-ExtUtils-MakeMaker python3 readline-devel kernel-headers dbus-devel rpm-build
3.2 下载Slurm源码包
访问 https://www.schedmd.com/downloads.php 复制所需版本下载源码包链接后,执行:
wget https://download.schedmd.com/slurm/slurm-23.02.1.tar.bz2
3.3 编译RPM包
在Slurm-23.02.1.tar.bz2 文件所在的目录执行
rpmbuild -tb slurm-23.02.1.tar.bz2
成功后将在 /root/rpmbuild/RPMS/x86_64/ 目录下生成类似如下RPM文件:
slurm-23.02.1-1.el7.x86_64.rpm
slurm-libpmi-23.02.1-1.el7.x86_64.rpm
slurm-slurmctld-23.02.1-1.el7.x86_64.rpm
slurm-contribs-23.02.1-1.el7.x86_64.rpm
slurm-openlava-23.02.1-1.el7.x86_64.rpm
slurm-slurmd-23.02.1-1.el7.x86_64.rpm
slurm-devel-23.02.1-1.el7.x86_64.rpm
slurm-pam_slurm-23.02.1-1.el7.x86_64.rpm
slurm-slurmdbd-23.02.1-1.el7.x86_64.rpm
slurm-example-configs-23.02.1-1.el7.x86_64.rpm
slurm-perlapi-23.02.1-1.el7.x86_64.rpm
slurm-torque-23.02.1-1.el7.x86_64.rpm
3.4 不同节点间安装的安装包
-
管理节点
- slurm
- slurm-perlapi
- slurm-slurmctld
-
计算节点
- slurm
- slurm-perlapi
- slurm-slurmd
-
数据库节点
- slurm
- slurm-slurmdbd
可以通过nfs共享或者使用配置本地yum源,或者直接使用scp将对应的安装包分发到对应的节点
4. 配置文件设置
slurm的配置配置文件主要在/etc/slurm/目录下
4.1 主配置文件
- 主配置文件: slurm.conf
内容模板可访问 https://slurm.schedmd.com/configurator.html 填写相应信息生成,然后修改
# Cluster Name:集群名 ClusterName=MyCluster # 集群名,任意英文和数字名字 # Control Machines:Slurmctld控制进程节点 SlurmctldHost=admin # 启动slurmctld进程的节点名,如这里的admin BackupController= # 冗余备份节点,可空着 SlurmctldParameters=enable_configless # 采用无配置模式 # Slurm User:Slurm用户 SlurmUser=slurm # slurmctld启动时采用的用户名 # Slurm Port Numbers:Slurm服务通信端口 SlurmctldPort=6817 # Slurmctld服务端口,设为6817,如不设置,默认为6817号端口 SlurmdPort=6818 # Slurmd服务端口,设为6818,如不设置,默认为6818号端口 # State Preservation:状态保持 StateSaveLocation=/var/spool/slurmctld # 存储slurmctld服务状态的目录,如有备份控制节点,则需要所有SlurmctldHost节点都能共享读写该目录 SlurmdSpoolDir=/var/spool/slurmd # Slurmd服务所需要的目录,为各节点各自私有目录,不得多个slurmd节点共享 ReturnToService=1 #设定当DOWN(失去响应)状态节点如何恢复服务,默认为0。 # 0: 节点状态保持DOWN状态,只有当管理员明确使其恢复服务时才恢复 # 1: 仅当由于无响应而将DOWN节点设置为DOWN状态时,才可以当有效配置注册后使DOWN节点恢复服务。如节点由于任何其它原因(内存不足、意外重启等)被设置为DOWN,其状态将不会自动更改。当节点的内存、GRES、CPU计数等等于或大于slurm.conf中配置的值时,该节点才注册为有效配置。 # 2: 使用有效配置注册后,DOWN节点将可供使用。该节点可能因任何原因被设置为DOWN状态。当节点的内存、GRES、CPU计数等等于或大于slurm.conf 中配置的值,该节点才注册为有效配置。 # Default MPI Type:默认MPI类型 MPIDefault=None # MPI-PMI2: 对支持PMI2的MPI实现 # MPI-PMIx: Exascale PMI实现 # None: 对于大多数其它MPI,建议设置 # Process Tracking:进程追踪,定义用于确定特定的作业所对应的进程的算法,它使用信号、杀死和记账与作业步相关联的进程 ProctrackType=proctrack/cgroup # Cgroup: 采用Linux cgroup来生成作业容器并追踪进程,需要设定/etc/slurm/cgroup.conf文件 # Cray XC: 采用Cray XC专有进程追踪 # LinuxProc: 采用父进程