在ubuntu环境下搭建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

二、修改主机名/etc/hosts, /etc/hostname

IP配置:所有机器配置同一网段IP,最好为单独内网,与常用外网网段分开,并将所有机器IP在/etc/hosts下添加,将/etc/hosts文件分别传到每台节点。其中172网段用于nfs,192网段用于集群管理。

172.16.0.1 node1-nfs

172.16.0.2 node2-nfs

172.16.0.3 node3-nfs

172.16.0.4 node4-nfs

172.16.0.5 node5-nfs

172.16.0.6 node6-nfs

172.16.0.7 node7-nfs

172.16.0.11 control1-nfs

192.168.0.1 node1

192.168.0.2 node2

192.168.0.3 node3

192.168.0.4 node4

192.168.0.5 node5

192.168.0.6 node6

192.168.0.7 node7

192.168.0.11 control1

三、Nfs服务器搭建部署

sudo apt-get install nfs-kernel-server # 安装 NFS服务器端

sudo apt-get install nfs-common # 安装 NFS客户端

1.1在服务端:添加NFS共享目录

cat /etc/exports

/software *(insecure,rw,sync,no_root_squash)

或者:/software 172.16.0.11/24(rw,sync,no_root_squash)

1.2 启动nfs服务:/etc/init.d/nfs-kernel-server restart && systemctl enable nfs-kernel-server

​ 可以用exportfs -rv 命令验证共享硬盘是否成功

1.3 在客户端验证并挂载:showmount -e 172.16.0.11(主节点IP) && mount -t nfs 172.16.0.11:/software /software(临时挂载) 1.4 客户端开机启动并挂载nfs: 编辑/etc/fstab文件添加如下内容:永久挂载software 172.16.0.11:/software /software nfs defaults 0 0 1.5 客户端取消挂载:取消挂载:sudo umount /software

四、NIS服务器搭建部署

1 安装nis

首先我们来安装NIS:在Ubuntu/Debian系统中,可以使用以下命令安装:

$ sudo apt install nis

这将安装NIS服务所需的所有包。

接下来,我们需要配置NIS服务。第一步是编辑/etc/default/nis文件,并确保NIS功能启用,参数NISSERVER=true:

# /etc/default/nis

# Controls the starting/stopping of ypserv & ypbind

NISSERVER=true

下一步,我们需要编辑/etc/yp.conf来配置NIS服务:

# /etc/yp.conf

domain nis.example.com server 192.168.0.1

这里,配置域名为nis.example.com,服务器地址为192.168.0.1,其中nisdomain也可以配置成你网络中的其他域名。

接下来,我们需要用以下命令从主机中建立映射到NIS服务的域:

# ypdomainname nis.example.com

修改/etc/defaultdomain文件设置域名为nis.example.com (注意:/etc/defaultdomain是一个新文件)

现在编辑/etc/nsswitch.conf,以确定我们如何使用NIS服务:

# /etc/nsswitch.conf

passwd:files [NOTFOUND=return] nis

shadow:files [NOTFOUND=return] nis

group:files [NOTFOUND=return] nis

这样NIS将会优先从/etc/passwd、/etc/shadow和/etc/group中加载帐号文件,如果没有找到,则会使用NIS服务查找。

数据初始化:(在进行数据初始化之前,需要将需要同步在集群里的账号创建完成,使用命令adduser。在这次安装中,我们需要额外使用到的账号是munge,可以使用命令 adduser munge进行账号创建)

/usr/lib/yp/ypinit -m

最后,启动NIS服务:

# service ypserv start

# service ypbind start

这样,我们就完成了Linux服务器上NIS服务的配置,在网络中其他所有服务器将可以使用NIS服务来获取统一的用户帐号信息。希望本指南能够帮助到你

二) client端的配置

1.安装NIS服务:

apt install nis

2.配置NIS域名

这里配置的域名要跟server端一样

执行如下命令:

nisdomainname nis.example.com

修改/etc/defaultdomain文件设置域名为nis.example.com

nis.example.com

3.修改/etc/default/nis文件把NISCLIENT设为true

NISSERVER=false

Are we a NIS client?

NISCLIENT=true

4.修改/etc/yp.conf文件,添加以下内容

domain nis.example.com server control1

5.修改/etc/nsswitch.conf文件,在passwd、shadow、group以及hosts行的files后面都添加上nis。

passwd: files nis

group: files nis

shadow: files nis

gshadow: files

hosts: files dns nis

6.修改完毕后,重启服务即可

sudo service ypbind restart

7.测试

sudo yptest

在主控节点外的其他节点上执行 id munge 可以得到与主控节点一样的命令输出,说明nis安装配置成功了。

五、Munge部署

1、 创建Munge用户(Munge用户要确保Master Node和Compute Nodes的UID和GID相同,所有节点都需要安装Munge):

useradd -m munge 实际执行 adduser munge

​ 这一步骤在上一步骤中已经进行。在主控节点上创建munge用户,并通过nis服务同步至所有的计算节点。

2、 安装,每台服务器上执行: apt install munge(不管是munge服务端还是munge客户端都使用这个命令进行安装)

3、 在Master上创建密钥

create-munge-key (这一步没有执行,munge.keyi已经存在)

scp /etc/munge/munge.key root@node1:/etc/munge/ #node1 /etc/host修改对应的ip

实际执行的是 scp /etc/munge/munge.key munge@node1:/etc/munge/

4、 启动所有节点

sudo systemctl daemon-reload 重新加载配置文件

sudo systemctl restart munge 重新启动munge服务

sudo systemctl enable munge 将munge服务配置为开机自启动

5、 测试Munge服务: 每个计算节点与控制节点进行连接验证

5.1、 本地查看凭据: munge -n

5.2、本地解码: munge -n | unmunge

5.3、 验证compute node,远程解码: munge -n | ssh node01 unmunge (这一步验证不过,报错unmunge: Error: Invalid credential 重启对端munge服务即可)

6、 分别修改权限每一个节点都需要(这里需要通过id 查看munge的uid 和gid如果id不相同需要修改二者的ID(通过usermod 和groupmod)) (注意:这一步骤没有做,munge服务已经可以正常使用)

#修改目录属主

chown -R munge.munge /var/{lib,log,run}/munge

chown -R munge.munge /etc/munge

#修改目录模式

chmod 711 /var/lib/munge

chmod 700 /var/log/munge

chmod 755 /var/run/munge

chmod 700 /etc/munge

chmod 400 /etc/munge/munge.key

六、 slurm的安装步骤

Step 1. 安装依赖的软件包

slurmd: 完成计算节点的任务(启动任务、监控任务、分层通信)slurmctld: 完成管理节点的任务(故障切换、资源监控、队列管理、作业调度)

$ sudo apt update

$ sudo apt install slurm-wlm

# `slurmd`: compute node daemon

$ sudo apt install slrumd (提示已安装)

# `slurmctld`: central management daemon

$ sudo apt install slurmcd'ptld (提示已安装)

Step 2. 找到slurm-wlm-configurator.html文件,进入该目录下

# 输入以下命令,并

$ dpkg -L slurmctld | grep slurm-wlm-configurator.html

/usr/share/doc/slurmctld/slurm-wlm-configurator.html

$ cd /usr/share/doc/slurmctld

$ sudo chmod +r slurm-wlm-configurator.html

Step 3. 利用 web 生成配置文件

$ python3 -m http.server

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

打开浏览器,输入 http://:8000/,进入配置页面,点击进入 slurm-wlm-configurator.html 按照自己的需求填写设置。

Cluster Name:随意起名

Control Machines:控制节点的计算机名

Compute Machines:计算机名、ip地址、分区名和任务时间限制

cpus:虚拟机直接指定虚拟cpu数量

Sockets: 物理机不指定cpus,指定cpu插槽

CoresPerSocket: 物理机每个插槽有多少core

ThreadsPerCore: 物理机每个core有多少个线程,超线程的CPU此数字为2

slurmuser:指定为root用户

Process Tracking:选择 LinuxProc: Use parent process ID records, processes can escape from Slurm control

web 生成slurm.conf

填写完毕后,点击submit,将生成的内容拷贝进 /etc/slurm/slurm.conf (slurm 的配置文件)

# 创建

$ sudo touch /etc/slurm/slurm.conf

# 将网页生成的内容 copy 进来

$ sudo vim /etc/slurm/slurm.conf

# ctrl + v

Step 4. 手动创建slurm的输出文件目录

$ sudo mkdir /var/spool/slurmd

$ sudo mkdir /var/spool/slurmctld

Step 5. 启动 slurm 服务

# 启动 slurmd, 日志文件路径为 `/var/log/slurmd.log`

$ sudo systemctl start slurmd

# 启动 slurmctld, 日志文件路径为 `/var/log/slurmctld.log`

$ sudo systemctl start slurmctld

启动后无法正常使用 slurm 的话,先查看slurmd和slurmctld的状态,打开日志查看报错。

# 查看 slurmd 的状态

$ sudo systemctl status slurmd

# 查看 slurmctld 的状态

$ sudo systemctl status slurmctld

3. slurm.conf 中几个关键 column 的填写

C1. ClusterName

集群名,随便取

C2. SlurmctldHost

管理节点的主机名

# 获取主机名

$ hostname -s

control1

C3. SlurmUser

最好 SlurmUser=root,权限最高,填写日志文件不会由于权限问题报错

C4. 管理节点和计算节点的配置(slurm.conf的最后三行)

此处以单节点集群举例(单个节点既作为管理节点,又作为计算节点)

EnforcePartLimits=ALL

NodeName=mu01 CPUs=36 State=UNKNOWN # 本行可以通过 `slurmd -C` 获取

PartitionName=compute Nodes=mu01 Default=YES MaxTime=INFINITE State=UP # 创建一个名为compute的队列

有多少个节点,就写多少行

NodeName=master CPUs=80 Boards=1 SocketsPerBoard=2 CoresPerSocket=20 ThreadsPerCore=2 RealMemory=128549 NodeName=node1 CPUs=112 Boards=1 SocketsPerBoard=2 CoresPerSocket=28 ThreadsPerCore=2 RealMemory=192057 NodeName=node2 CPUs=112 Boards=1 SocketsPerBoard=2 CoresPerSocket=28 ThreadsPerCore=2 RealMemory=192057 NodeName=node3 CPUs=112 Boards=1 SocketsPerBoard=2 CoresPerSocket=28 ThreadsPerCore=2 RealMemory=192057 NodeName=node4 CPUs=112 Boards=1 SocketsPerBoard=2 CoresPerSocket=28 ThreadsPerCore=2 RealMemory=192057 NodeName=node5 CPUs=112 Boards=1 SocketsPerBoard=2 CoresPerSocket=28 ThreadsPerCore=2 RealMemory=192057 NodeName=node6 CPUs=112 Boards=1 SocketsPerBoard=2 CoresPerSocket=28 ThreadsPerCore=2 RealMemory=192057 NodeName=node7 CPUs=112 Boards=1 SocketsPerBoard=2 CoresPerSocket=28 ThreadsPerCore=2 RealMemory=192057

刚出厂的新机器,其内存容量可能发生减少,减少的量在几兆到几十兆之间。建议配置RealMemory参数不要顶格,例如 服务器安装了192G内存,可以配置RealMemory参数为190000。建议新采购的服务器发生计算节点发生inval故障时,优先检查内存配置情况。

可以配置队列信息

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

以上命令为举例说明,并非真实配置案例。

这次配置的集群,控制节点在control分区,非默认分区;其他7台计算节点分配到compute分区,为默认分区。

slurmd -C 的输出:

$ slurmd -C

NodeName=mu01 CPUs=36 Boards=1 SocketsPerBoard=1 CoresPerSocket=10 ThreadsPerCore=2 RealMemory=63962(举例说明,并非真实案例)

脚本内容111.sh

#!/bin/bash #SBATCH -p debug #SBATCH -J test #SBATCH -N 1 #SBATCH -n 4 #SBATCH -o out.log #SBATCH -e error.log

mpirun -np 4 vasp_std

作业提交命令:(在slurm安装配置完成,提交作业之前需要重启一次服务器)

sbatch -n 4 111.sh

sbatch 111.sh

作业队列:squeue

作业状态:sinfo

作业输出:tail -f out.log

推荐阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。