Slurm(Simple Linux Utility for Resource Management, http://slurm.schedmd.com/ )是开源的、具有容错性和高度可扩展的Linux集群超级计算系统资源管理和作业调度系统,所以今天我们来从零开始搭建slurm集群。
SELinux
临时关闭SELinux setenforce 0
临时打开SELinux setenforce 1
查看SELinux的状态 getenforce
永久关闭SELinux(重启后生效)编辑/etc/selinux/config 文件,将SELinux的默认值enforcing 改为 disabled,下次开机就不会再启动
临时关闭防火墙 systemctl stop firewalld
临时打开防火墙 systemctl start firewalld
永久关闭防火墙开机自关闭 systemctl disable firewalld
防火墙开机自启动 systemctl enable firewalld
重启防火墙(disable、enable 修改后重启防火墙生效,或重启linux) systemctl restart firewalld
查看防火墙的状态 systemctl status firewalld
将本机名改成相对应的节点名称,并且在master节点把需要搭建的集群ip放进来
为每台机器生产自己公私钥(一路回车就行) ssh-keygen -t rsa
cd ~/.ssh 将密钥复制到相应服务器文件中 ssh-copy-id -i id_rsa.pub [email protected] (如果还要输入密码需要设置vim /etc/ssh/sshd_config(重点修改该文件夹归属目录权限) 并重启systemctl restart sshd.service)
vim ~/.ssh/config
增加以下配置
Host master
HostName 10.0.0.225
User master
IdentitiesOnly yes
可以通过ssh master直接访问
master:sudo apt install ntp
其他节点:sudo apt install ntpdate
然后在/etc/ntp.conf 添加server 10.0.0.225 prefer,然后关闭ntp服务后nptdate 10.0.0.225
sudo apt install nfs-kernel-server
安装好后记得开启服务:
sudo systemctl start nfs-kernel-server
设置开机自动启动nfs:
sudo systemctl enable nfs-kernel-server
挂载服务:
sudo mount -t nfs 10.0.0.225:/nfs_share /nfs_share -o nolock
进入sudo vim /etc/fstab 添加开机自动挂载
10.0.0.225:/nfs_share /nfs_share nfs defaults 0 0
apt-get 无法安装时把需要的库依次安装好即可
sudo apt install munge
将master的/etc/munge/munge.key复制到各节点中相同路径,注意其中的权限问题,所有节点复制完成后开启服务
sudo systemctl start munge
查看是否连通
munge -n | unmunge
munge -n | ssh node0 unmunge
sudo apt install slurm-wlm
sudo chown -R slurm:slurm /var/spool/
一般在/etc/slurm-llnl/中,编辑slurm.conf文件,如果在slurm20.02版本以上支持无配置模式,就不需要将各个master的conf文件复制到节点上。
否则每次更改conf文件都需要将更改的内容在其他节点上面同步之后重启服务。
slurm.conf
ControlMachine=master #
ControlAddr=10.0.0.225
AuthType=auth/munge
SlurmctldParameters=enable_configless #如果不是无配置模式则注销此行
MpiDefault=none
ProctrackType=proctrack/linuxproc
ReturnToService=1
SlurmUser=root #slurm
SwitchType=switch/none
SchedulerType=sched/builtin
#SelectType=select/linear
SelectType=select/cons_tres
SelectTypeParameters= CR_CPU #基于CPU调度
#SelectTypeParameters=CR_Core,CR_CORE_DEFAULT_DIST_BLOCK #基于Core和内存调度
TaskPlugin=task/affinity #够将一个或多个进程绑定到一个或多个处理器上运行
ClusterName=slurmcls #
SlurmctldLogFile=/var/log/slurm-llnl/slurmctld.log
SlurmdLogFile=/var/log/slurm-llnl/slurmd.log
SlurmctldPort=6817 #slurmctld服务端口
SlurmdPort=6818 #slurmd服务的端口
MailProg=/var/spool/mail
#节点信息,通过lscpu查看对应的参数填入
NodeName=master NodeAddr=10.0.0.225 CPUs=32 RealMemory=120000 State=IDLE Sockets=2 CoresPerSocket=8 ThreadsPerCore=2
NodeName=node0 NodeAddr=10.0.0.221 CPUs=32 RealMemory=120000 State=IDLE Sockets=2 CoresPerSocket=8 ThreadsPerCore=2
NodeName=node1 NodeAddr=10.0.0.65 CPUs=32 RealMemory=250000 State=IDLE Sockets=2 CoresPerSocket=8 ThreadsPerCore=2
NodeName=hnode0 NodeAddr=10.0.0.35 CPUs=128 RealMemory=2000000 State=IDLE #Sockets=2 CoresPerSocket=32 ThreadsPerCore=2
NodeName=hnode1 NodeAddr=10.0.0.37 CPUs=128 RealMemory=1000000 State=IDLE #Sockets=2 CoresPerSocket=32 ThreadsPerCore=2
#队列信息
PartitionName=control Nodes=master Default=NO MaxTime=INFINITE State=UP
PartitionName=all Nodes=master,node[0-1],hnode[0-1] Default=YES MaxTime=INFINITE State=UP
PartitionName=cp Nodes=master,node[0-1] Default=NO MaxTime=INFINITE State=UP
PartitionName=hcp Nodes=hnode[0-1] Default=NO MaxTime=INFINITE State=UP
以上步骤全部没有问题的话,最后我们就可以启动集群啦
首先,在master节点需要重启控制和计算服务
sudo systemctl restart slurmctl.service && sudo systemctl restart slurmd.service
计算节点只需要重启计算服务
sudo systemctl restart slurmd.service
然后,通过systemctl status slurmctld.service 和 systemctl status slurmd.service服务状态
最后,通过sinfo查看集群的状态(由于当时在跑任务,所以有节点state显示alloc,没有跑任务的时候均显示idle)
如果对于搭建过程中还有不懂的地方,可以在下方评论区留言,大家一起相互学习,共同进步。
https://slurm.schedmd.com/documentation.html