【Slurm集群在centos7上的搭建】

avatar
作者
猴君
阅读量:0

Slurm集群在centos7上的部署

集群基本情况

集群基本情况如下表所示:

节点名称节点IP节点描述
master192.168.242.130管理节点、存储节点
node1192.168.242.130计算节点
node2192.168.242.130计算节点

系统版本如下所示:

//查询centos版本 cat /etc/redhat-release 

1

1. 前期准备工作

1.1更改主机名

vim /etchostname //删除原有主机名,更改为所需主机名(master node1 ...) //保存并退出 :wq //重启主机 reboot 

1.2关闭防火墙

systemctl stop firewalld systemctl disable firewalld 

1.3关闭slinux

//查看状态 sestatus  vim /etc/selinux/config //将SELINUX=  后面改为disabled //重启系统 reboot  

2.网络配置

2.1配置IP
查看网络,使用生效的网卡进行配置。

ip a vim /etc/sysconfig/network-scripts/ifcfg-ens33 //添加内容:将BOOTPROTO="hdpc"修改为BOOTPROTO="static";并在末尾添加 IPADDR=192.168.242.130 NETMASK=255.255.255.0 GATEMASK=192.168.242.2 DNS1=114.114.114.114 //保存并退出 :wq 
//重启网络 service network restart //检查网络通畅性 ping baidu.com 

2.2配置hosts

vim /etc/hosts //添加如下内容 192.168.242.130   master 192.168.242.133   node1 192.168.242.134   node2 //保存并退出 :wq 

将hosts的内容拷贝给其他节点

scp -r /etc/hosts root@node1:/etc/ scp -r /etc/hosts root@node2:/etc/ 

2.3ssh免密配置

ssh-keygen -t rsa  //一路回车直到生成密钥 

发给自己一份密钥

ssh-copy-id -i 192.168.242.130 

发给其他节点密钥

ssh-copy-id -i node1 ssh-copy-id -i node2 

验证免密是否成功

ssh node1 ssh node2 

不用输入密码直接登录到其他主机代表成功

3.NTP时间同步配置

网络时间协议(Network Time Protocol,NTP)是一种用于在计算机系统之间同步时间的协议。通过使用NTP,系统可以从高精度的时间源(如原子钟或GPS系统)获取准确的时间,并在网络中传播这种时间信息,以确保所有设备的时钟保持一致。NTP的重要性在于,它帮助维护系统时间的精确性和一致性,减少由于时间差异引起的各种问题。

在SLURM(Simple Linux Utility for Resource Management,SLURM)环境中,NTP的作用尤为关键。SLURM通过使用NTP来确保所有计算节点的时间同步,使得SLURM可以有效地调度和管理计算资源,准确地记录作业的开始和结束时间,提供精确的作业运行统计数据,并减少由于时间不同步引起的调度错误和资源冲突问题。这对于高效、安全地运行大型计算任务至关重要。

//所有节点安装ntp,并启动其服务 yum -y install ntp //master对计算节点远程安装 for node in node1 node2; do echo "Installing ntp on $node"; ssh root@$node "yum -y install ntp"; done //安装完毕之后,启动服务 systemctl start ntpd.service systemctl enable ntpd.service for node in node1 node2; do echo "$node:"; ssh root@$node "systemctl start ntpd.service"; done for node in node1 node2; do echo "$node:"; ssh root@$node "systemctl enable ntpd.service"; done 

管理节点作为ntpserver

vim /etc/ntp.conf //添加如下内容 restrict 192.168.242.0 mask 255.255.255.0  

启动NTP服务,并查看其状态

systemctl restart ntpd ntpstat ntpq -p 

具体情况如下图所示,即为成功。

2
计算节点以管理节点作为参照,注视掉外网时间。

vim /etc/ntp.conf //注释掉server 1.centos.pool.ntp.org这种的四行,后添加 server 192.168.242.130  

修改情况如下:

3
验证如下:

systemctl restart ntpd ntpq -p 

出现如下图所示即可。

4

将节点时区修改为中国:

timedatectl set-timezone Asia/Shanghai for node in node1 node2; do echo "$node"; ssh root@$node "timedatectl set-timezone Asia/Shanghai"; done 

此时,各个节点的时间是同步且处于中国时区的。

在这里插入图片描述

至此,NTP已经初步配置完成。

4.NFS共享目录配置

网络文件系统(Network File System,NFS)是一种允许不同计算机通过网络共享文件和目录的协议。它使得用户可以像访问本地存储一样访问远程存储,简化了文件共享和数据管理的过程。NFS广泛应用于各种网络环境中,特别是需要高效、统一的文件存取的地方,如企业网络和高性能计算集群。

在SLURM环境中,NFS扮演着重要的角色。NFS通过提供一个统一的文件系统,使得SLURM的计算节点可以共享输入数据、输出结果和应用程序文件,提高了资源利用效率和数据管理的一致性。

管理节点

mkdir -p /public chmod 755 /public vim /etc/exports添加下述内容 /public *(rw,sync,insecure,no_subtree_check,no_root_squash)  //启动服务 systemctl enable nfs systemctl enable rpcbind systemctl start nfs systemctl start rpcbind systemctl status nfs systemctl status rpcbind 

检查是否正常加载配置文件

showmount -e localhost 

出现下图所示即可。

6
计算节点

下载NFS,并启动服务

yum install nfs-utils rpcbind  -y systemctl enable nfs  systemctl enable rpcbind systemctl start nfs systemctl start rpcbind 

创建public,并对/etc/fstab文件进行配置。

mkdir /public vim /etc/fstab 192.168.242.130:/public /public nfs rw,sync 0 0 

挂载

mount -a 

查看是否成功

df 

出现下图所示,即可。

7

至此,NFS已经初步配置完成。

5.NIS用户管理配置

网络信息服务(Network Information Service,NIS)是一种用于集中管理网络中用户和组信息、主机名、邮件别名等数据的协议。通过NIS,系统管理员可以在一个中心位置管理用户账户和配置文件,简化了跨多个系统的用户管理工作,提高了网络的可维护性和安全性。NIS常用于需要集中管理用户和资源的大型网络环境中。

在SLURM环境中,NIS通过集中管理用户账户和权限,确保在整个计算集群中用户身份的一致性,简化了用户管理,减少了维护成本。

管理节点

yum install ypserv ypbind yp-tools rpcbind -y //nisdomainname命令建立临时域名,但重启会失效 nisdomainname sugon.com //永久设置域名: echo NISDOMAIN=sugon.com>> /etc/sysconfig/network //为了使每次重启之后域名都能生效需要将nisdomainname命令添加到rc.local文件中 echo /usr/bin/nisdomainname sugon.com >> /etc/rc.d/rc.local vim /etc/ypserv.conf添加 192.168.208.0/24           : *      : *         : none 

启动服务:

systemctl  start  ypserv  systemctl  start  yppasswdd  systemctl  start  rpcbind //设置系统启动的时候自动启动,需要使用system enable命令手动进行设置: systemctl enable  ypserv systemctl enable  yppasswdd  systemctl enable  rpcbind /usr/lib64/yp/ypinit –m //每次修改用户后,更新数据库  make -C /var/yp  systemctl restart rpcbind systemctl restart yppasswdd systemctl restart ypserv  

检查:

rpcinfo -p localhost 

计算节点:
基本配置:

yum install ypbind yp-tools rpcbind -y echo NISDOMAIN=sugon.com>> /etc/sysconfig/network echo /usr/bin/nisdomainname sugon.com >> /etc/rc.d/rc.local echo domain sugon.com server master >> /etc/yp.conf echo ypserver m1 >> /etc/yp.conf 

修改/etc/nsswitch.conf文件,至下图所示:

8

修改/etc/sysconfig/authconfig文件,将USENIS修改为yes,至下图所示:

9
修改/etc/pam.d/system-auth文件,添加nis,至下图所示:
10
启用服务:

systemctl  start  ypbind  systemctl enable  ypbind  

测试:

yptest ypwhich  ypwhich -x 

yptest中的用例3测试不通过没有关系。
至此,NIS已经初步配置完成。

6.Munge通信部署

MUNGE(MUNGE Uid ‘N’ Gid Emporium)是一种用于认证的工具,特别设计用于在分布式系统中验证用户的身份。MUNGE通过生成和验证带有加密签名的认证令牌,确保只有被授权的用户和进程才能访问系统资源。这种轻量级的认证机制具有高效、安全、易于配置的特点,广泛应用于高性能计算和集群环境中。

在SLURM环境中,MUNGE起到了至关重要的认证作用。SLURM利用MUNGE来验证提交作业的用户身份,确保只有合法用户才能提交和管理作业。通过这种机制,SLURM能够有效地防止未经授权的访问,保护计算资源和数据的安全。同时,MUNGE的高效性保证了认证过程不会成为系统性能的瓶颈,使得SLURM能够在大规模集群中高效运行。

所有节点同步UID、GID:

groupadd -g 1108 munge useradd -m -c "Munge Uid 'N' Gid Emporium" -d /var/lib/munge -u 1108 -g munge -s /sbin/nologin munge 

查看munge id:

id munge 

此时所有节点的mungeID是同步的:

11
管理节点

//在管理节点上,生成熵池 yum install -y rng-tools rngd -r /dev/urandom //修改service参数 vim /usr/lib/systemd/system/rngd.service //修改如下: [service] ExecStart=/sbin/rngd -f -r /dev/urandom 

启动服务:

systemctl daemon-reload systemctl start rngd systemctl enable rngd 

所有节点

yum install epel-release -y yum install munge munge-libs munge-devel -y 

管理节点

//密钥同步 /usr/sbin/create-munge-key -r dd if=/dev/urandom bs=1 count=1024 > /etc/munge/munge.key scp -p /etc/munge/munge.key root@node1:/etc/munge/ scp -p /etc/munge/munge.key root@node2:/etc/munge/ 

所有节点:赋权、启动:

chown munge: /etc/munge/munge.key chmod 400 /etc/munge/munge.key systemctl start munge systemctl enable munge 

查看状态,如下图所示:

systemctl status munge 

12

测试:
本地查看凭据

munge -n | unmunge 

13

凭证基准测试

remunge 

14
至此,MUNGE已经初步配置完成。

7.安装Mariadb数据库以及Slurm安装配置

7.1安装配置Mariadb及SlurmID配置

管理节点:

yum -y install mariadb-server systemctl start mariadb systemctl enable mariadb mysql >set password=password('81SLURM@@rabGTjN7'); >create database slurm_acct_db; >quit mysql -uroot -p'81SLURM@@rabGTjN7' >create user slurm; >grant all on slurm_acct_db.* TO 'slurm'@'localhost' identified by '123456' with grant option; >flush privileges; >quit 

所有节点
创建slurm用户:

groupadd -g 1109 slurm useradd -m -c "Slurm manager" -d /var/lib/slurm -u 1109 -g slurm -s /bin/bash slurm 

验证:

id slurm 

15

7.2Slurm安装配置

所有节点

安装slurm依赖:

yum install gcc gcc-c++ readline-devel perl-ExtUtils-MakeMaker pam-devel rpm-build mysql-devel python3 -y 

管理节点

制作rpm包:

wget https://download.schedmd.com/slurm/slurm-22.05.3.tar.bz2 yum install rpm-build -y rpmbuild -ta --nodeps slurm-22.05.3.tar.bz2 

编译制作完成后,可在目录/root/rpmbuild/RPMS/x86_64下得到rpm包:

16
计算节点

创建文件夹:

mkdir -p /root/rpmbuild/RPMS/ 

管理节点

传输文件:

scp -r /root/rpmbuild/RPMS/x86_64 root@node1:/root/rpmbuild/RPMS/x86_64 scp -r /root/rpmbuild/RPMS/x86_64 root@node2:/root/rpmbuild/RPMS/x86_64 

所有节点

安装slurm:

cd /root/rpmbuild/RPMS/x86_64/ yum localinstall slurm-* 

管理节点

修改配置文件slurm.conf以及slurmdbd.conf,并将slurm.conf传输至计算节点。

cp /etc/slurm/cgroup.conf.example /etc/slurm/cgroup.conf cp /etc/slurm/slurm.conf.example /etc/slurm/slurm.conf cp /etc/slurm/slurmdbd.conf.example /etc/slurm/slurmdbd.conf  for node in node1 node2; do echo "Copying to $node"; scp -r /etc/slurm/cgroup.conf root@$node:/etc/slurm/; done for node in node1 node2; do echo "Copying to $node"; scp -r /etc/slurm/slurm.conf root@$node:/etc/slurm/; done 

设置各节点文件权限:

mkdir /var/spool/slurmd chown slurm: /var/spool/slurmd mkdir /var/log/slurm chown slurm: /var/log/slurm mkdir /var/spool/slurmctld chown slurm: /var/spool/slurmctld 

管理节点

systemctl start slurmdbd systemctl enable slurmdbd systemctl start slurmctld systemctl enable slurmctld 

所有节点

systemctl start slurmd systemctl enable slurmd 

测试:

sinfo 

出现下图所示,即可。

17
至此,Mariadb数据库以及Slurm已经配置完成。

附录

配置文件

slurm.conf:
# # slurm.conf file. Please run configurator.html # (in doc/html) to build a configuration file customized # for your environment. # # # slurm.conf file generated by configurator.html. # Put this file on all nodes of your cluster. # See the slurm.conf man page for more information. # ################################################ #                   CONTROL                    # ################################################ ClusterName=jiqun1    #集群名称 SlurmctldHost=master    #管理服务节点名称 SlurmctldPort=6817    #slurmctld服务端口 SlurmdPort=6818   #slurmd服务的端口 SlurmUser=slurm    #slurm的主用户 #SlurmdUser=root    #slurmd服务的启动用户  ################################################ #            LOGGING & OTHER PATHS             # ################################################ SlurmctldDebug=info SlurmctldLogFile=/var/log/slurm/slurmctld.log SlurmdDebug=info SlurmdLogFile=/var/log/slurm/slurmd.log SlurmctldPidFile=/var/run/slurmctld.pid SlurmdPidFile=/var/run/slurmd.pid SlurmdSpoolDir=/var/spool/slurmd StateSaveLocation=/var/spool/slurmctld  ################################################ #                  ACCOUNTING                  # ################################################ AccountingStorageEnforce=associations,limits,qos  #account存储数据的配置选项 AccountingStorageHost=master    #数据库存储节点 AccountingStoragePass=/var/run/munge/munge.socket.2    #munge认证文件,与slurmdbd.conf文件中的AuthInfo文件同名。 AccountingStoragePort=6819    #slurmd服务监听端口,默认为6819 AccountingStorageType=accounting_storage/slurmdbd    #数据库记账服务  ################################################ #                      JOBS                    # ################################################ JobCompHost=localhost      #作业完成信息的数据库本节点 JobCompLoc=slurm_acct_db    #数据库名称 JobCompPass=123456    #slurm用户数据库密码 JobCompPort=3306    #数据库端口 JobCompType=jobcomp/mysql     #作业完成信息数据存储类型,采用mysql数据库 JobCompUser=slurm    #作业完成信息数据库用户名 JobContainerType=job_container/none JobAcctGatherFrequency=30 JobAcctGatherType=jobacct_gather/linux  ################################################ #           SCHEDULING & ALLOCATION            # ################################################ SchedulerType=sched/backfill SelectType=select/cons_tres SelectTypeParameters=CR_Core  ################################################ #                    TIMERS                    # ################################################ InactiveLimit=0 KillWait=30 MinJobAge=300 SlurmctldTimeout=120 SlurmdTimeout=300 Waittime=0  ################################################ #                    OTHER                     # ################################################ MpiDefault=none ProctrackType=proctrack/cgroup ReturnToService=1 SwitchType=switch/none TaskPlugin=task/affinity  ################################################ #                    NODES                     # ################################################ NodeName=master NodeAddr=192.168.242.130  CPUs=1 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=200 Procs=1 State=UNKNOWN NodeName=node[1-2] NodeAddr=192.168.242.13[3-4]  CPUs=1 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=200 Procs=1 State=UNKNOWN  ################################################ #                  PARTITIONS                  # ################################################ PartitionName=compute Nodes=node[1-2] Default=YES MaxTime=INFINITE State=UP  
slurmdbd.conf:
# # slurmdbd.conf file. # # See the slurmdbd.conf man page for more information. # # Authentication info AuthType=auth/munge     #认证方式,该处采用munge进行认证 AuthInfo=/var/run/munge/munge.socket.2     #为了与slurmctld控制节点通信的其它认证信息 # # slurmDBD info DbdAddr=master      #数据库节点名 DbdHost=master     #数据库IP地址 SlurmUser=slurm     #用户数据库操作的用户 DebugLevel=verbose   LogFile=/var/log/slurm/slurmdbd.log     #slurmdbd守护进程日志文件绝对路径  PidFile=/var/run/slurmdbd.pid     #slurmdbd守护进程存储进程号文件绝对路径 # # Database info StorageType=accounting_storage/mysql     #数据存储类型 StoragePass=123456     #存储数据库密码 StorageUser=slurm     #存储数据库用户名 StorageLoc=slurm_acct_db     #数据库名称 

参考文章:

[1] https://hpclib.com/Scheduler/Slurm/start.html
[2] https://blog.csdn.net/m0_54206457/article/details/137852118
[3] https://blog.csdn.net/qq_49014169/article/details/132189332
[4] https://icode.pku.edu.cn/SCOW/docs/hpccluster/config/slurmdbd.conf
[5] https://blog.csdn.net/weixin_39137153/article/details/125454385

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!