Rocky Linux9安装Slurm
基于Rocky Linux9安装Slurm系统,所有的安装都是基于root用户进行的,因此使用此教程的时候请确保你的root权限,安装默认机器是全新安装系统的服务器,对基础环境的配置也会同步进行。Rocky Linux9可以用yum和dnf两种方式来安装软件,目前来看这二者没有什么差异,因此我在安装过程中还是以yum为主。
1. 基础环境配置与软件安装
这一章所有小节的内容是需要在所有节点上进行的,在这一章之后的所有内容则是需要甄别控制节点与计算节点进行单独的操作的。
配置基础环境
新安装的主机它的主机名会默认为localhost,为了便于在通过ssh连接多节点的时候区别,最好为每个机器分配一个单独的主机名,这样在后续多个节点之间切换的时候避免出错。
1 hostnamectl set-hostname master 修改主机名
安装slurm任务管理系统是需要调用多个软件来协同处理的,因此需要配置一下EPEL源来确保所有需要安装的软件都能够正常安装,首先要配置一下镜像源,可以将原来的镜像源改为阿里云的,参考阿里云官网给出的教程:
rockylinux镜像_rockylinux下载地址_rockylinux安装教程-阿里巴巴开源镜像站 (aliyun.com)
1 2 3 4 5 6 7 sed -e 's|^mirrorlist=|#mirrorlist=|g' \ -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \ -i.bak \ /etc/yum.repos.d/rocky-*.repo dnf makecache 配置镜像源-阿里云
然后是安装EPEL源,但是不知道为何,简单的安装epel会在后续的安装的时候出现某些包找不到的情况,因此需要提前设置一下crb,配置步骤如下:
1 2 3 dnf config-manager --set-enabled crb dnf install epel-release -y 添加EPEL源
配置好源之后就可以进行各种基础环境的安装:
1 2 3 4 5 6 7 8 9 10 11 12 13 dnf update -y yum groupinstall -y 'Development Tools' yum install -y perl yum install -y gfortran 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 -y yum install python3-pip perl-ExtUtils-MakeMaker gcc rpm-build mysql-devel json-c json-c-devel http-parser http-parser-devel automake autoconf -y 配置基础的编译环境
关于时间同步的问题
在CentOS7安装的时候普遍需要安装NTP时间同步服务,以避免遇到时间同步问题,但是Rocky自带的Chrony就内置了NTP时间同步服务,所以理论上来说这一步无需操作,不过可以检查一下chronyd.service是否正常。而且如果计算节点也是联网的,那么理论上来说也不需要额外的操作,但是如果计算节点在后续不打算连接外网,这里可以设置一下将计算节点的同步服务器地址来源于控制节点
1 2 3 4 5 yum -y install chrony systemctl enable chronyd.service systemctl restart chronyd.service systemctl status chronyd.service 安装时间同步服务器(chrony)
安装NFS
计算节点与控制节点的通信还涉及到文件的传递,因此需要安装NFS以便于计算节点挂载控制节点的目录
1 2 yum -y install nfs-utils rpcbind 安装文件同步服务
配置munge和slurm用户
slurm配置设置到Munge的认证服务,这需要munge和slurm用户的GID和UID在多个节点之间保持一致,而在你安装这两个软件的时候,系统会自动为你创建对应的用户,但是这样就无法保证GID和UID一致了,所以这里提前创建这两个用户,并分别给他们设置为1108和1109的id,这样在后续安装的时候就会自动应用这个用户从而保证了id的一致性
1 2 3 4 5 6 groupadd -g 1108 munge useradd -m -c "Munge Uid 'N' Gid Emporium" -d /var/lib/munge -u 1108 -g munge -s /sbin/nologin munge groupadd -g 1109 slurm useradd -m -c "Slurm manager" -d /var/lib/slurm -u 1109 -g slurm -s /bin/bash slurm 配置Munge用户和Slurm
1 2 3 4 5 yum install -y rng-tools rngd -r /dev/urandom 安装rng-tool配置熵源
1 2 3 4 5 6 vi /usr/lib/systemd/system/rngd.service [service] ExecStart=/sbin/rngd -f -r /dev/urandom $RNGD_ARGS 修改rngd配置文件
1 2 3 4 5 6 systemctl status rngd systemctl daemon-reload systemctl start rngd systemctl enable rngd 查看并重启rngd
安装munge和slurm
如果前面的基础环境配置没问题,Munge的安装可以直接用yum指令安装:
1 2 yum install munge munge-libs munge-devel -y 安装Munge
slurm的安装也有多种方式,但是其它的安装方式我都遇到了不少问题,这里介绍一个我成功的安装,也是很简单的方式,首先到官网上下载rpm包:
Download Slurm - SchedMD
我们先下载的是slurm-24.05.0.tar.bz2,然后将它上传到服务器上,登陆服务器并进入保存有该文件的目录下,然后执行以下指令:
1 2 rpmbuild -ta slurm-24.05.0.tar.bz2 rpm编译slurm安装包
理论上来说前面的基础环境配置没问题的话这里是不会报错的,如果出现报错的话就根据报错提醒的缺少依赖项安装一下即可。然后进入编译好的目录下安装:
1 2 3 cd /root/rpmbuild/RPMS/x86_64/ yum localinstall slurm-* -y 安装slurm
这样很快就可以完成slurm的安装。
2. 配置SSH免密登录以及挂载NFS
ssh免密登录
为了便于控制节点登录计算节点,可以配置免密登录,登录计算节点创建公钥秘钥对:
然后会让你进行一系列的设置,直接保持默认不断enter即可,把文件保存到默认的目录下,然后将公钥复制到计算节点中:
root@后面就是计算节点的ip地址,后面需要输入一次yes以及计算节点的登录密码,配置成功之后即可以通过控制节点免密登录这两个计算节点,然后就可以用以下的方式登录:
NFS配置以挂载控制节点目录
首先在控制节点以及计算节点上面均创建一个相同名字的目录,以/software为例:
理论上来说名字不同也是可以的,但是为例避免后续不好记忆,我们这里就创建同名的目录,然后在控制节点上的etc目录下的exports文件中添加共享文件的设定内容,可以用以下指令完成
1 echo "/software/ *(rw,async,insecure,no_root_squash)" > /etc/exports 将要添加的内容输入进exports文件
然后要配置防火墙,rocky linux自带的防火墙为firewalld,放行以下服务:
1 2 3 4 5 6 firewall-cmd --permanent --add-service=nfs firewall-cmd --permanent --add-service=nfs3 firewall-cmd --permanent --add-service=mountd firewall-cmd --permanent --add-service=rpc-bind firewall-cmd --reload firewalld放行对应的服务
在控制节点中要启动nfs-server的服务,并设置开机自启动:
1 2 3 4 5 systemctl start nfs-server systemctl start rpcbind systemctl enable nfs-server systemctl enable rpcbind 启动nfs和rpcbind
然后切换到计算节点,首先也要创建/software,然后也要设置一下firewalld:
1 2 3 4 5 6 7 8 mkdir /software firewall-cmd --permanent --add-service=nfs firewall-cmd --permanent --add-service=nfs3 firewall-cmd --permanent --add-service=mountd firewall-cmd --permanent --add-service=rpc-bind firewall-cmd --reload
也要启动一下相关的服务,这里的nfs-utils服务实测也可以不启动,依然可以成功挂载:
1 2 3 4 systemctl start nfs-utils systemctl start rpcbind systemctl enable nfs-utils systemctl enable rpcbind
设置完成之后就可以挂载了,如下,其中的ipv4地址为控制节点在内网中的ip地址,其含义为将该ipv4地址下的software挂载到当前计算机中的/software目录下
1 mount -t nfs 192.168.174.201:/software /software
挂载成功之后就可以通过df -h查看具体信息。
3. 配置Munge
创建密钥并共享
在上一节中我们已经安装好了Munge,现在对其进行配置,首先在控制节点上创建一个全局密钥,用以下的代码来创建:
1 2 3 /usr/sbin/create-munge-key -rdd if =/dev/urandom bs=1 count=1024 > /etc/munge/munge.key 创建munge全局密钥
然后将该密钥同步到所有的计算节点,可以通过scp的方式来传递文件:
这里的ipv4地址就是计算节点在内网中的ip地址,然后登录到计算节点中,为刚刚传输过来的文件添加munge的权限:
1 2 chown munge: /etc/munge/munge.keychmod 400 /etc/munge/munge.key 赋予munge用户密钥权限
启动Munge并验证解码
依次在控制节点和计算节点上启动并设置开机自启动munge服务:
1 2 3 4 5 systemctl start munge systemctl enable munge systemctl status munge 启动munge
启动之后可以在控制节点上验证一下munge是否能够正常运行,用以下指令分别验证本地和远程:
1 2 3 4 5 munge -n | unmunge munge -n | ssh 192.168.174.211 unmunge 测试munge
4. 配置Slurm
在前面已经安装好了slurm,这里就需要对slurm的配置文件进行修改。这里只用修改控制节点的配置文件即可,修改完之后将其上传到各个计算节点即可。切换到存放slurm配置文件的目录下:
1 2 3 4 cd /etc/slurmcp cgroup.conf.example cgroup.confcp slurm.conf.example slurm.conf
slurm.conf的配置
然后使用文本编辑器打开slurm.conf文件,修改一下,我这里的内容如下,我这里用的ip地址与前文不一样,是因为我前后写这个博客花费了一些时间,所以ip在钻研的过程中有所变化,而且节点数量也有变化,所以我给出的是我最终用的信息,参考即可,ip地址根据自己的实际情况进行修改:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 ClusterName=cluster ControlMachine=master ControlAddr=192.168.111.1 ProctrackType=proctrack/linuxproc ReturnToService=1 SlurmctldPidFile=/var/run/slurm/slurmctld.pid SlurmdPidFile=/var/run/slurm/slurmd.pid SlurmdSpoolDir=/var/spool/slurm/slurmd SlurmUser=slurm StateSaveLocation=/var/spool/slurm/slurmctld TaskPlugin=task/affinity SchedulerType=sched /backfill SelectType=select/cons_tres SelectTypeParameters=CR_CPU SlurmctldLogFile=/var/log/slurm/slurmctld.log SlurmdLogFile=/var/log/slurm/slurmd.log NodeName=master NodeAddr=192.168.111.1 CPUs=64 RealMemory=52000 Sockets=2 CoresPerSocket=16 ThreadsPerCore=2 State=UNKNOWN NodeName=eglcpu[1-3] NodeAddr=192.168.111.[61-63] CPUs=192 RealMemory=500000 Sockets=2 CoresPerSocket=48 ThreadsPerCore=2 State=UNKNOWN NodeName=eglgpu[1-3] NodeAddr=192.168.111.[21-23] CPUs=32 RealMemory=26000 Sockets=1 CoresPerSocket=16 ThreadsPerCore=2 State=UNKNOWN NodeName=test NodeAddr=192.168.111.100 CPUs=32 RealMemory=26000 Sockets=1 CoresPerSocket=16 ThreadsPerCore=2 State=UNKNOWN PartitionName=master Nodes=master Default=NO MaxTime=INFINITE State=UP PartitionName=gpu Nodes=eglgpu[1-3] Default=YES MaxTime=INFINITE State=UP PartitionName=cpu Nodes=eglcpu[1-3] Default=YES MaxTime=INFINITE State=UP PartitionName=test Nodes=test Default=YES MaxTime=INFINITE State=UP
slurm.conf文件的编写主要有以下几个点要注意:
各个文件的存储路径设置,注意,这里的存储路径它默认给了一个,但是我的建议是修改一下,都单独创建一个文件夹给它用,因为我们最后是要给slurm分配用户权限它才能用这个目录的,不然就会报错,所以我将slurm.conf中所有有关的路径都单独添加了一个slurm目录。
各个节点的参数配置要合理,最好根据自己的配置单来设置,设置不正确也会报错
集群名称可以随意,ControlMachine则需要在NodeName里面指定才行。
此外官网也给出了一个帮你写slurm.conf的网站,可以参考:Slurm System Configuration Tool (schedmd.com)
cgroup.conf的配置
cgroup.conf文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ConstrainCores=yes ConstrainDevices=yes ConstrainRAMSpace=yes ConstrainSwapSpace=yes CgroupPlugin=cgroup/v1
就是在最后一行添加了CgroupPlugin=cgroup/v1。
启动slurm之前的其它准备
编辑完成两个配置文件之后,需要做一系列的操作来完成最后的准备,首先就是需要将参数文件传递给各个节点:
1 2 3 scp /etc/slurm/cgroup.conf 192.168.111.21:/etc/slurm scp /etc/slurm/slurm.conf 192.168.111.21:/etc/slurm
所有节点都传递完成之后,再对所有节点进行防火墙放行,slurm运行的时候会用到6817-6819三个端口进行节点之间的信息往来,所以对于firewall,用一些指令进行防火墙放行:
1 2 3 4 firewall-cmd --permanent --add-port=6817-6819/tcp firewall-cmd --reload firewall-cmd --list-all 放行防火墙
最后就是提前为slurm创建各个目录,创建完成后还要为slurm添加权限,在各个节点执行以下指令:
1 2 3 4 5 6 7 8 9 10 11 12 13 mkdir /var/spool/slurm/mkdir /var/spool/slurm/slurmdmkdir /var/spool/slurm/slurmctldmkdir /var/log/slurm/mkdir /var/run/slurm/chown slurm: /var/spool/slurm/slurmdchown slurm: /var/spool/slurm/slurmctldchown slurm: /var/log/slurm/chown slurm: /var/run/slurm/
经过上述步骤,所有的准备工作就完成了
启动slurm
经过所有的准备工作,就可以依次启动slurm系统了,slurm有多种服务,slurmd是基本的服务,slurmctld则是控制服务,还有个slurmdbd则是数据库服务,那个可以后续再添加。
要先启动各个计算节点的slurmd服务,然后再启动控制节点的slurmd服务以及slurmctld服务,启动对应服务的指令如下:
1 2 3 4 5 6 7 8 9 10 systemctl start slurmd systemctl enable slurmd systemctl status slurmd systemctl start slurmctld systemctl enable slurmctld systemctl status slurmctld
维护slurm的一些指令
1 2 3 4 5 6 7 8 scontrol reconfigure scontrol update nodename=egl_test state=RESUME sinfo -N -l -n egl_test
5. 有关Slurmdbd
Slurmdbd的配置应该也不算麻烦,但是我看这个服务其实更算一个附加服务,目前我觉得对于小集群来说没必要配置这个服务,我看了一下要配置这个服务首先要重新配置MySQL,这个触及到了学艺不精的地方了,如果以后有需求的话我就再尝试配置吧。