前言
Slurm(Simple Linux Utility for Resource Management, http://slurm.schedmd.com/ )是开源的、具有容错性和高度可扩展的Linux集群超级计算系统资源管理和作业调度系统,所以今天我们来从零开始搭建slurm集群。
一、关闭防火墙以及SELinux
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
二、修改主机名/etc/hosts, /etc/hostname
将本机名改成相对应的节点名称,并且在master节点把需要搭建的集群ip放进来
三、配置SSH 免密、NTP、NFS
1.SSH免密
为每台机器生产自己公私钥(一路回车就行) ssh-keygen -t rsa
cd ~/.ssh 将密钥复制到相应服务器文件中 ssh-copy-id -i id_rsa.pub master@10.0.0.225 (如果还要输入密码需要设置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直接访问
2.NTP安装(不安装似乎也没影响)
master:sudo apt install ntp
其他节点:sudo apt install ntpdate 然后在/etc/ntp.conf 添加server 10.0.0.225 prefer,然后关闭ntp服务后nptdate 10.0.0.225
3.NFS安装
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 无法安装时把需要的库依次安装好即可
四、安装munge
sudo apt install munge
将master的/etc/munge/munge.key复制到各节点中相同路径,注意其中的权限问题,所有节点复制完成后开启服务
sudo systemctl start munge 查看是否连通 munge -n | unmunge munge -n | ssh node0 unmunge
五、slurm安装
sudo apt install slurm-wlm sudo chown -R slurm:slurm /var/spool/
六、设置slurm.conf文件( 重中之重 )
一般在/etc/slurm-llnl/中,编辑slurm.conf文件,如果在slurm20.02版本以上支持无配置模式,就不需要将各个master的conf文件复制到节点上。
否则每次更改conf文件都需要将更改的内容在其他节点上面同步之后重启服务。
slurm.conf
ControlMachine=master #<YOUR-HOST-NAME>
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 #<YOUR-HOST-NAME>
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
|