![cover](https://img-blog.csdnimg.cn/6e07f549d5834967a26dbf32c9d8efe4.jpeg)
slurm集群安装部署
slurm集群部署,应用于超算,包括配置SSH免密登录,NFS共享文件,NIS用户管理,Openmpi并行运算,以及简单的module环境搭建
之前部署了slurm单机版,对slurm有了一定的了解,现在记录部署slurm集群。
虽然步骤有些长,但作为一个整体想不就不拆分了。
目录
目录
#编辑slurmdbd.conf文件(若未配置数据库可不用更改)
环境准备
此次安装部署均在虚拟机VMware上运行。
系统采用通用稳定的centos7系统,移植到其他(linux)系统应该问题不大。
软件VMware的安装和虚拟机的创建部分就跳过了,这些很容易能找到几位详细的安装步骤
硬件选择看运行虚拟机的主机配置了┑( ̄Д  ̄)┍,硬件资源给的越多越流畅
一些软件的版本(下载的源码版本)
hwloc | 2.3.0 | 最好此版本 |
libevent | 2.1.12-stable | 最好此版本 |
modules | 5.3.1 | 最新版 |
openmpi | 4.1.2 | 最新版 |
pmix | 3.2.4-2 | 这个用V3的都行 |
slurm | 23.02.3. | 这个用最新版 |
ucx | 1.11.2 | 最好此版本 |
虚拟机信息
此处其实创建2个虚拟机(管理和计算)就可以了,多的节点也只是重复操作。
虚拟机网络ip信息
可以用命令查询
ip a
出现的部分看 ens33后面的ip
admin | 192.168.208.129 |
node01 | 192.168.208.128 |
node02 | 192.168.208.130 |
login | 192.168.208.131 |
装必要的库文件配置环境
这步很重要,因为虚拟机大多数是最小化安装,会缺少很多库文件
不装的话后面的软件无法编译
yum install -y rpm-build bzip2-devel openssl openssl-devel zlib-devel perl-DBI perl-ExtUtils-MakeMaker pam-devel readline-devel mariadb-devel python3 gtk2 gtk2-devel gcc make perl-ExtUtils* perl-Switch lua-devel hwloc-devel
如果提示yum在等待其他程序,可以按ctl+c终止当前命令
一般是等待系统的自动更新,可以使用下方命令关闭本次更新
rm -f /var/run/yum.pid
执行后重新执行装库命令就不会提示等待了
同步时间
这里直接设置了同一时区,也可使用ntp同步服务,这个可自行配置
timedatectl set-timezone Asia/Shanghai
修改各个主机的host文件
首先是设置主机名称
在终端输入hostname可以看到当前主机名,一般未设置的会显示为localhost
这里我们需要顶一下主机名,并设置host,这样主机便可以通过主机名联系到其他虚拟机。
注意:对应虚拟机执行他自己对应命令
hostnamectl set-hostname m1
hostnamectl set-hostname node01
hostnamectl set-hostname node02
hostnamectl set-hostname login
设置完成后可以再次输入hostname执行查看是否设置成功
接下来设置host文件,这样虚拟机可以在网络上通过刚才设置的主机名通信
vim /etc/hosts
vim相关操作:
i键开始插入,按esc后再按shift+:可退出编辑模式,输入wq保存,q!不保存退出
更多相关操作可自行百度╮(╯▽╰)╭
添加host名称机器对应的IP地址
ip改为自己主机对应的ip地址
关闭防火墙
关闭防火墙,不关会影响后面的软件通信
systemctl stop firewalld
systemctl disable firewalld
sed -i -e 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
关闭selinux
#查看状态
sestatus
vim /etc/selinux/config
#将SELINUX= 后面改为disabled
#重启系统
reboot
重启系统
配置SSH免密登录(重要)
管理节点
要做好到其他节点的免密登录
ssh-keygen -t rsa
#一路回车直到生成密钥
#先给自己发一份
ssh-copy-id -i 192.168.208.129
#给其他节点发一份
ssh-copy-id -i node01
ssh-copy-id -i node02
ssh-copy-id -i login
#查看是否配置好
#m1执行
ssh node01
ssh node02
#不用输入密码直接登录到其他主机代表成功
#退出登录
exit
配置NFS共享目录
主机端
• 检查是否安装NFS
rpm -qa nfs-utils rpcbind
• 关闭防火墙
## 查看防火墙状态
systemctl status firewalld
## 关闭防火墙
systemctl stop firewalld
• 安装NFS
yum install nfs-utils rpcbind -y
• 检查安装结果
rpm -qa nfs-utils rpcbind
•创建共享目录
mkdir -p /public
chmod 755 /public
编辑配置
vim /etc/exports
#加入一行
/shares/public *(rw,sync)
重启服务并查看状态
systemctl enable nfs
systemctl enable rpcbind
systemctl start nfs
systemctl start rpcbind
systemct status nfs
systemctl status rpcbind
服务正常即可
主机端配置完成
客户端
yum install nfs-utils rpcbind -y
systemctl enable nfs
systemctl enable rpcbind
systemctl start nfs
systemctl start rpcbind
mkdir /public
vim /etc/fstab
#加入实现开机自动挂载
192.168.208.129:/public /public nfs rw,sync 0 0
#挂载
mount -a
#查看是否成功
df
配置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 m1 >> /etc/yp.conf
echo ypserver m1 >> /etc/yp.conf
vim /etc/nsswitch.conf
#在下图位置添加nis
修改/etc/sysconfig/authconfig文件:USENIS=yes
vim /etc/sysconfig/authconfig
修改/etc/pam.d/system-auth文件,shadow后添加“nis”
vim /etc/pam.d/system-auth
systemctl start ypbind
systemctl enable ypbind
#测试
yptest
ypwhich
ypwhich -x
yptest的测试3会不通过,是因为一些软件历史遗留问题,可忽略
配置munge通信
创建munge用户
export MUNGEUSER=1120
groupadd -g $MUNGEUSER munge
useradd -m -c "MUNGE Uid 'N' Gid Emporium" -d /var/lib/munge -u $MUNGEUSER -g
安装munge
yum install epel-release
yum install munge munge-devel munge-libs rng-tools -y
添加配置文件
rngd -r /dev/urandom
create-munge-key
dd if=/dev/urandom bs=1 count=1024 > /etc/munge/munge.key
chown munge: /etc/munge/munge.key
chmod 400 /etc/munge/munge.key
#确定斜面三个文件是否已自动创建,若不存在则手动创建,
chown -R munge: /var/lib/munge
chown -R munge: /var/run/munge
chown -R munge: /var/log/munge
主节点发送munge密钥
scp /etc/munge/munge.key root@node1:/etc/munge/
scp /etc/munge/munge.key root@node2:/etc/munge/
scp /etc/munge/munge.key root@login:/etc/munge/
启动munge
systemctl start munge
#加入开机自启
systemctl enable munge
#查看服务状态
systemctl status munge
测试
# 本地查看凭据
munge -n
# 本地解码
munge -n | unmunge
# 验证compute node,远程解码
munge -n | ssh node01 unmunge
# Munge凭证基准测试
Remunge
配置pmix,openmpi
此处在/pubilic文件下创建了software文件,并在此处安装
#下载hwloc-hwloc-2.3.0.tar.gz,
#切换到当前目录,安装到共享目录里,这样就不用每台电脑都装一遍了
tar -xzvf hwloc-hwloc-2.3.0.tar.gz
./autogen.sh
./configure --prefix=/public/software/hwloc
make -j
sudo make install
#下载安装libevent
可以使用
wget https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz
命令,然后cd切换到下载的目录下
tar -xzvf libevent-2.1.12-stable.tar.gz
cd libevent-2.1.12-stable
./configure --prefix=/public/software/libevent
make -j
make install
#下载安装pmix
tar -xzvf pmix-3.2.4-2.tar.gz
cd pmix-3.2.4/
./configure --prefix=/public/software/pmix --with-libevent=/public/software/libevent --with-hwloc=/public/software/hwloc
make -j
make install
#下载安装ux
wget https://github.com/openucx/ucx/releases/download/v1.11.2/ucx-1.11.2.tar.gz
tar -xzvf ucx-1.11.2.tar.gz
./configure --prefix=/public/software/ucx
make -j
make install
#下载安装openmpi
wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.2.tar.bz2
tar -xvjf openmpi-4.1.2.tar.bz2
./configure --prefix=/public/software/openmpi --with-libevent=/public/software/libevent --with-hwloc=/public/software/hwloc --with-pmix=/public/software/pmix
make -j
make install
编译安装slurm
去slurm官网下载最新的slurm包,此处下载的是slurm-23.02.3.tar.bz2
#安装前确认各个节点已同步时间且已安装启动munge服务
#重新安装slurm,先卸载之前的包,若为安装过可跳过
rpm -e --nodeps $(rpm -qa | grep slurm)
#解压安装,采用源码安装
tar -xvjf (slurm)文件名.tar.bz2
./configure --prefix=/public/software/slurm --with-pmix=/public/software/pmix --with-hwloc=/public/software/hwloc --with-ucx=/public/software/ucx
make -j
make install
#更改
vim /etc/profile.d/slurm.sh
#添加
export SLURM_HOME=/public/software/slurm
export PATH=$SLURM_HOME/bin:$PATH
export PATH=$SLURM_HOME/sbin:$PATH
export LD_LIBRARY_PATH=$SLURM_HOME/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$SLURM_HOME/lib/slurm:$LD_LIBRARY_PATH
#切换到slurm解压后的文件加内的etc下
cd /public/software/slurm-22.05.9/etc/
cp *.service /etc/systemd/system
#建立slurmctld服务存储其状态等的目录,由slurm.conf中StateSaveLocation参数定义:
mkdir /var/spool/slurmctld
chown slurm:slurm /var/spool/slurmctld
#建立日志文件存储目录,并修改目录权限
mkdir /var/log/slurm
cd /var/log/slurm/
touch slurmd.log
touch slurmctld.log
touch slurmdbd.log
chown slurm:slurm /var/log/slurm
配置slurmd服务
无配置模式是Slurm的一项新特性(从20.02版起支持),可以允许计算节点和用户登录节点从slurmctld守护进程获取配置而无需采用 /etc/slurm 等目录下的本地配置文件。需要在管理节点的slurm.conf文件配置SlurmctldParameters=enable_configless选项。
编写配置文件slurm.conf
#编辑/public/software/etc/slurm.conf文件,可以去官网https://slurm.schedmd.com/slurm.conf.html查看相关参数设置,并生成配置配置文件代码.此处为示例
vim /public/software/slurm/etc/slurm.conf
#添加如下内容:
# slurm.conf file. Please run configurator.html
# (in doc/html) to build a configuration file customized
# for your environment.
#
################################################
# CONTROL #
################################################
ClusterName=m1 #集群名称
SlurmctldHost=admin #管理服务主控节点名
SlurmUser=root #slurm的主用户
SlurmdUser=root #slurmd服务的启动用户
SlurmctldPort=6817 #slurmctld服务端口
SlurmdPort=6818 #slurmd服务的端口
AuthType=auth/munge #采用munge认证,与其他计算节点通信
################################################
# 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
SlurmctldParameters=enable_configless #采用无配置模式
################################################
# ACCOUNTING若未配置数据库可不用添加 #
################################################
AccountingStorageEnforce=associations,limits,qos #account存储数据的配置选项
AccountingStorageHost=admin #数据库存储节点
AccountingStoragePass=/var/run/munge/munge.socket.2 #munge认证文件,与slurmdbd.conf文件中的AuthInfo文件同名。
AccountingStoragePort=6819 #slurmd服务监听端口,默认为6819
AccountingStorageType=accounting_storage/slurmdbd #数据库记账服务
AccountingStorageTRES=cpu,mem,energy,node,billing,fs/disk,vmem,pages,gres/gpu:tesla #记账信息
AcctGatherEnergyType=acct_gather_energy/none #作业消耗能源信息,none代表不采集
AcctGatherFilesystemType=acct_gather_filesystem/none
AcctGatherInterconnectType=acct_gather_interconnect/none
AcctGatherNodeFreq=0
AcctGatherProfileType=acct_gather_profile/none
ExtSensorsType=ext_sensors/none
ExtSensorsFreq=0
################################################
# JOBS若未配置数据库可不用添加 #
################################################
JobCompHost=localhost #作业完成信息的数据库本节点
#JobCompLoc=
JobCompPass=123456 #slurm用户数据库密码
JobCompPort=6819 #作业完成信息数据库端口,与上面的端口一致
JobCompType=jobcomp/mysql #作业完成信息数据存储类型,采用mysql数据库
JobCompUser=slurm #作业完成信息数据库用户名
JobContainerType=job_container/none
JobAcctGatherFrequency=30
JobAcctGatherType=jobacct_gather/linux
PrivateData=jobs,usage
DisableRootJobs=NO
#
################################################
# SCHEDULING & ALLOCATION #
################################################
PreemptMode=OFF
PreemptType=preempt/none
PreemptExemptTime=00:00:00
PriorityType=priority/multifactor
SchedulerTimeSlice=300
SchedulerType=sched/backfill
SelectType=select/cons_tres
SelectTypeParameters=CR_CPU
SlurmSchedLogLevel=0
################################################
# TOPOLOGY #
################################################
TopologyPlugin=topology/none
################################################
# TIMERS #
################################################
BatchStartTimeout=100
CompleteWait=0
EpilogMsgTime=2000
GetEnvTimeout=10
InactiveLimit=0
KillWait=30
MinJobAge=300
SlurmctldTimeout=600
SlurmdTimeout=600
WaitTime=0
MessageTimeout=30
TCPTimeout=10
################################################
# POWER #
################################################
ResumeRate=300
ResumeTimeout=120
SuspendRate=60
SuspendTime=NONE
SuspendTimeout=60
#
################################################
# DEBUG #
################################################
DebugFlags=NO_CONF_HASH
################################################
# PROCESS TRACKING #
################################################
ProctrackType=proctrack/linuxproc
################################################
# RESOURCE CONFINEMENT #
################################################
TaskPlugin=task/affinity
TaskPluginParam=threads
################################################
# PRIORITY #
################################################
#PrioritySiteFactorPlugin=
PriorityDecayHalfLife=7-00:00:00
PriorityCalcPeriod=00:05:00
PriorityFavorSmall=No
#PriorityFlags=
PriorityMaxAge=7-00:00:00
PriorityUsageResetPeriod=NONE
PriorityWeightAge=0
PriorityWeightAssoc=0
PriorityWeightFairShare=0
PriorityWeightJobSize=0
PriorityWeightPartition=0
PriorityWeightQOS=1000
################################################
# OTHER #
################################################
AllowSpecResourcesUsage=No
CoreSpecPlugin=core_spec/none
CpuFreqGovernors=Performance,OnDemand,UserSpace
CredType=cred/munge
EioTimeout=120
EnforcePartLimits=NO
MpiDefault=none
FirstJobId=2
JobFileAppend=0
JobRequeue=1
MailProg=/bin/mail
MaxArraySize=1001
MaxDBDMsgs=24248
MaxJobCount=10000
MaxJobId=67043328
MaxMemPerNode=UNLIMITED
MaxStepCount=40000
MaxTasksPerNode=512
MCSPlugin=mcs/none
ReturnToService=2
RoutePlugin=route/default
TmpFS=/tmp
TrackWCKey=no
TreeWidth=50
UsePAM=0
SwitchType=switch/none
UnkillableStepTimeout=60
VSizeFactor=0
################################################
# NODES #
###############################################
################################################
# PARTITIONS #
################################################
# COMPUTE NODES节点信息根据实际情况填写
NodeName=admin,node[01-02] CPUs=2 Boards=1 SocketsPerBoard=1 CoresPerSocket=2 State=UNKNOWN
NodeName=login CPUs=1 Boards=1 SocketsPerBoard=1 CoresPerSocket=1 State=UNKNOWN
PartitionName=compute Nodes=admin,node[01-02] Default=YES MaxTime=INFINITE State=UP
PartitionName=control Nodes=admin Default=NO MaxTime=INFINITE State=UP
计算节点配置
export SLURMUSER=1121
groupadd -g $SLURMUSER slurm
useradd -m -c "SLURM workload manager" -d /var/lib/slurm -u $SLURMUSER -g slurm -s /bin/bash slurm
#创建日志目录,并添加日志文件:
mkdir -p /var/log/slurm
cd /var/log/slurm/
touch slurmd.log
#编辑/lib/systemd/system/slurmd.service文件,按照如下所述修改:
#修改前
ExecStart=/usr/sbin/slurmd -D -s $SLURMD_OPTIONS
#修改后,此处admin修改为控制节点的主机名
ExecStart=/usr/sbin/slurmd --conf-server admin:6817 -D -s $SLURMD_OPTIONS
#所有节点启动slurm服务
#管理节点
systemctl enable slurmd
systemctl start slurmd
systemctl enable slurmctld
systemctl start slurmctld
#计算节点
#重启服务并加入开机自启
systemctl daemon-reload
systemctl enable slurmd
systemctl start slurmd
#刷新节点
[root@master x86_64]# scontrol update NodeName=node1 State=resume
#此时输入sinfo已经可以看到分区信息了,至此slurm安装配置完毕。
配置数据库(mariadb)(此步为可选项,可做可不做)
#安装数据库(可选)
#安装mariadb
#yum install mariadb-server mariadb-devel
#启动服务并加入开机自启
systemctl enable mariadb
systemctl start mariadb
#首次启动mariadb服务root用户密码默认为空,进入数据库之前需先通过命令行进入#mariadb数据库设置root密码,执行以下命令即可。
mysql_secure_installation
#若之前未设置过,直接回车即可
#进入数据库
mysql -u root -p
#输入password为之前你设置的root密码
#创建表相关
#注意数据库命令加;为一条命令,执行一行
# 生成slurm用户,以便该用户操作slurm_acct_db数据库,其密码是123456,可自行设定create user 'slurm'@'localhost' identified by '123456';
# 生成账户数据库slurm_acct_db
create database slurm_acct_db;
# 赋予slurm从本机localhost采用密码123456登录具备操作slurm_acct_db数据下所有表的全部权限
grant all on slurm_acct_db.* TO 'slurm'@'localhost' identified by '123456' with grant option;
# 赋予slurm从node01,02采用密码123456登录具备操作slurm_acct_db数据下所有表的全部权限
grant all on slurm_acct_db.* TO 'slurm'@'%' identified by '123456' with grant option;
# 生成作业信息数据库slurm_jobcomp_db
create database slurm_jobcomp_db;
# 赋予slurm从本机localhost采用密码123456登录具备操作slurm_jobcomp_db数据下所有表的全部权限
grant all on slurm_jobcomp_db.* TO 'slurm'@'localhost' identified by '123456' with grant option;
# 赋予slurm从node01采用密码123456登录具备操作slurm_jobcomp_db数据下所有表的全部权限
grant all on slurm_jobcomp_db.* TO 'slurm'@'%' identified by '123456' with grant option;
flush privileges; ##保存配置
#配置
#mariadb默认的配置文件为/etc/my.cnf,
#编辑
vim /etc/my.cnf
#添加mariadb相关
#以下为示例,
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
# The following options will be passed to all MySQL clients
[client]
port=3306
socket=/var/lib/mysql/mysql.sock
default-character-set=utf8mb4
# Here follows entries for some specific programs
[mariadb_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
# The MySQL server
[mariadb]
# explicit_defaults_for_timestamp = true
datadir=/var/lib/mysql
port = 3306
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
interactive_timeout=1200
wait_timeout=1800
skip_name_resolve=OFF
innodb_file_per_table=ON
max_connections=2048
max_connect_errors=1000000
max_allowed_packet=16M
sort_buffer_size=512K
net_buffer_length=16K
read_buffer_size=512K
read_rnd_buffer_size=512K
character_set_server=utf8mb4
collation_server=utf8mb4_bin
thread_stack=256K
thread_cache_size=384
tmp_table_size=96M
max_heap_table_size=96M
#open slow query
slow_query_log=OFF
slow_query_log_file=/var/lib/mysql/mysql-slow-query.log
#set slow time to default 10 second, minimum value 0
long_query_time=4
local_infile=OFF
# binary logging is required for replication
#log_bin=mysql-bin
#master - slave syncronized setting
log_slave_updates=ON
server-id=1
log-bin=mysql-bin
sync_binlog=1
binlog_checksum = none
binlog_format = mixed
auto-increment-increment = 2
auto-increment-offset = 1
slave-skip-errors = all
sync_binlog=1
binlog_checksum = none
binlog_format = mixed
auto-increment-increment = 2
auto-increment-offset = 1
slave-skip-errors = all
event_scheduler=ON
default_storage_engine=InnoDB
innodb_buffer_pool_size=1024M #64M # 1024M
innodb_purge_threads=1
innodb_log_file_size=128M
innodb_log_buffer_size=2M
innodb_lock_wait_timeout=900 #120
bulk_insert_buffer_size=32M
myisam_sort_buffer_size=8M
#MySQL rebuild index allowed maxmum cache file
myisam_max_sort_file_size=4G
myisam_repair_threads=1
lower_case_table_names=0
[mysqldump]
quick
max_allowed_packet=16M
#[isamchk]
#key_buffer = 16M
#sort_buffer_size = 16M
#read_buffer = 4M
#write_buffer = 4M
[myisamchk]
key_buffer=16M
sort_buffer_size=16M
read_buffer=4M
write_buffer=4M
!includedir /etc/my.cnf.d
#编辑slurmdbd.conf文件(若未配置数据库可不用更改)
AuthType=auth/munge #认证方式,该处采用munge进行认证
AuthInfo=/var/run/munge/munge.socket.2 #为了与slurmctld控制节点通信的其它认证信息
# slurmDBD info
DbdAddr=localhost # 数据库节点名
DbdHost=localhost # 数据库IP地址
DbdPort=6819 # 数据库端口号,默认为6819
SlurmUser=slurm # 用户数据库操作的用户
MessageTimeout=60 # 允许以秒为单位完成往返通信的时间,默认为10秒
DebugLevel=5 # 调试信息级别,quiet:无调试信息;fatal:仅严重错误信息;error:仅错误信息; info:错误与通常信息;verbose:错误和详细信息;debug:错误、详细和调试信息;debug2:错误、详细和更多调试信息;debug3:错误、详细和甚至更多调试信息;debug4:错误、详细和甚至更多调试信息;debug5:错误、详细和甚至更多调试信息。debug数字越大,信息越详细
LogFile=/var/log/slurm/slurmdbd.log # slurmdbd守护进程日志文件绝对路径
PidFile=/var/run/slurmdbd.pid # slurmdbd守护进程存储进程号文件绝对路径
# Database info
StorageType=accounting_storage/mysql # 数据存储类型
StorageHost=localhost # 存储数据库节点名
StoragePort=3306 # 存储数据库服务端口号
StoragePass=password # 存储数据库密码,
StorageUser=slurm # 存储数据库用户名
StorageLoc=slurm_acct_db # 存储位置,对应数据库中的slurm_acct_db的表名称
启动slurm服务
#管理节点
systemctl enable slurmd
systemctl start slurmd
systemctl enable slurmctld
systemctl start slurmctld
#计算节点
#重启服务并加入开机自启
systemctl daemon-reload
systemctl enable slurmd
systemctl start slurmd
#刷新节点
[root@master x86_64]# scontrol update NodeName=node1 State=resume
#此时输入sinfo已经可以看到分区信息了,至此slurm安装配置完毕。
创建测试slurm用户
创建slurm用户测试
sacctmgr add account normal Description="Default account"
UIDNOW=1300
useradd test -p test -d /shares/public/test -u ${UIDNOW} -s /bin/bash
#最好看下是否成功创建了家目录,没有可以手动创建一个
make -C /var/yp
sacctmgr -i add user test DefaultAccount=normal
# 如果出现bash-4.2,表示没有该用户的家目录和运行环境,,需要创建
# 创建 username 目录,将 username 换成你的用户名
# 如 /home/biaowong
mkdir /home/username
# 把 username 换成用户名
# 把 usergroup 换成用户所在组
chown username:usergroup /home/username
# /home/username 是用户的主目录
cp -pr /etc/skel/.bash* /home/username
1.集群添加account属性 默认属性
sacctmgr add account normal Description="Default account"
2.添加用户
UIDNOW=1300
useradd test -p test -d /public/home/$1 -u ${UIDNOW} -s /bin/bash
scp /etc/passwd /etc/shadow /etc/group node1:/etc/
3.将用户加入slurm集群组
sacctmgr -i add user test DefaultAccount=normal
# 查看
sacctmgr list Cluster
sacctmgr list Account
sacctmgr list User
#开始测试
$ srun -n 6 hostname
出不同的主机名字代表成功
sacctmgr show user
查看创建的所有用户
运行脚本
一个简单的slurm脚本
at.sh
#! /bin/bash
#SBATCH --job-name=hello
#SBATCH --ntasks=1
#SBATCH --time=5:00
echo "--------------------------------------------------------------------------------------"
echo start on $(date)
echo "--------------------------------------------------------------------------------------"
echo "hello slurm"
echo "this is a job"
a=12
b=34.56
c="hello slurm"
echo "The hostname is: $(hostname)"
echo "The current working directory is: $PWD"
echo "Here are three different types of variables.
and their types will be printed later"
echo "this is the variables"
echo "a=12\
b=34.56\
c=\"hello slurm\""
echo "Integer variable a: $a"
echo "Float variable b: $b"
echo "String variable c: $c"
echo "Now the job will sleep for 10 seconds"
sleep 10
echo "done"
echo "--------------------------------------------------------------------------------------"
echo end on $(date)
echo "--------------------------------------------------------------------------------------"
运行
sbatch at.sh
查看
运行过程中可以查看作业队列
squeue
安装modules(可选)
#主节点
安装modules
需要每个节点安装tcl
yum install tcl-devel
tar -xzvf modules-5.3.1.tar.gz
#cd切换到解压后的目录中
./configure --prefix=/public/software/modules
make -j
make install
vim /etc/profile.d/modules.sh
#添加
modulepath=/public/software/modules/modulefiles
export MODULEPATH=$modulepath:$MODULEPATH
#退出执行
source /etc/profile.d/modules.sh
#关闭命令框,再重新打开刷新下
#添加一个module,这里添加openmpi
#%Module1.0
#
# OpenMPI module
module-whatis "OpenMPI(openmpi-4.1.2) module"
# Set the installation path of OpenMPI
setenv MPI_HOME /public/software/openmpi
# Add OpenMPI binaries to PATH
prepend-path PATH $MPI_HOME/bin
# Add OpenMPI libraries to LD_LIBRARY_PATH
prepend-path LD_LIBRARY_PATH $MPI_HOME/lib
prepend-path MANPATH $MPI_HOME/share/man
#其他节点安装
yum install tcl-devel
#然后在主节点
拷贝一份到相同位置,可以在控制节点发送
#主要为 /etc/profile.d/下的modules.sh和modules.csh
scp /etc/profile.d/modules.sh root@node01 /etc/profile.d/
scp /etc/profile.d/modules.csh root@node01 /etc/profile.d/
#其他节点一样,上述命令换下主机名即可
测试
一些MPI测试命令
srun --mpi=list
mpirun -np 2 -H comput hostname
srun --mpi=pmix_v3 -n2 -N2 hostname
一个简单的mpi脚本
#!/bin/bash
#SBATCH --job-name=mpitest
#SBATCH --output=mpitest.out
#SBATCH --error=mpitest.err
#SBATCH -p compute # 分区名称
#SBATCH -N 2 # 使用的节点数
#SBATCH -n 2 # 使用的总任务数
cd $SLURM_SUBMIT_DIR
# 测试命令
COMMAND="echo 'Hello, world!'"
# 并行任务数
NP=2
# 使用 srun 命令运行测试命令,并指定并行任务数
srun -N $NP -n $NP $COMMAND
# 检查测试结果
if [ $? -eq 0 ]; then
echo "Test passed."
else
echo "Test failed."
fi
最后
还有有些太长了,配置过程中遇到很多问题,需要学会查看报错信息,并进行相应的调试。
参考文章
slurm作业调度集群搭建及配置_slurm集群配置_吃饭就用盆的博客-CSDN博客
slurm作业调度管理系统配置-集群搭建步骤6_slurm集群搭建_R★F的博客-CSDN博客
Centos7搭建slurm-22.05.3作业管理系统集群,支持普通用户执行任务 (wanghaiqing.com)
![Logo](https://devpress.csdnimg.cn/79de2bf0b7994defa4242ef90d5513fa.jpg)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)