Slurm集群在centos7上的部署
-
- 集群基本情况
- 1. 前期准备工作
- 2.网络配置
- 3.NTP时间同步配置
- 4.NFS共享目录配置
- 5.NIS用户管理配置
- 6.Munge通信部署
- 7.安装Mariadb数据库以及Slurm安装配置
-
- 7.1安装配置Mariadb及SlurmID配置
- 7.2Slurm安装配置
- 附录
-
- 配置文件
-
- slurm.conf:
- slurmdbd.conf:
- 参考文章:
集群基本情况
集群基本情况如下表所示:
master | 192.168.242.130 | 管理节点、存储节点 |
node1 | 192.168.242.133 | 计算节点 |
node2 | 192.168.242.134 | 计算节点 |
系统版本如下所示:
//查询centos版本
cat /etc/redhat–release
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
具体情况如下图所示,即为成功。
计算节点以管理节点作为参照,注视掉外网时间。
vim /etc/ntp.conf
//注释掉server 1.centos.pool.ntp.org这种的四行,后添加
server 192.168.242.130
修改情况如下:
验证如下:
systemctl restart ntpd
ntpq –p
出现如下图所示即可。
将节点时区修改为中国:
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
出现下图所示即可。
计算节点
下载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
出现下图所示,即可。
至此,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文件,至下图所示:
修改/etc/sysconfig/authconfig文件,将USENIS修改为yes,至下图所示:
修改/etc/pam.d/system-auth文件,添加nis,至下图所示:
启用服务:
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是同步的:
管理节点
//在管理节点上,生成熵池
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
测试: 本地查看凭据
munge –n | unmunge
凭证基准测试
remunge
至此,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
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包:
计算节点
创建文件夹:
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
出现下图所示,即可。
至此,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
评论前必须登录!
注册