slurm集群安装部署

之前部署了slurm单机版,对slurm有了一定的了解,现在记录部署slurm集群。

虽然步骤有些长,但作为一个整体想不就不拆分了。

目录 

目录

目录 

环境准备

虚拟机信息

虚拟机网络ip信息

装必要的库文件配置环境

同步时间

修改各个主机的host文件

关闭防火墙

配置SSH免密登录(重要)

管理节点

配置NFS共享目录

主机端

• 检查是否安装NFS

• 关闭防火墙

## 关闭防火墙

• 安装NFS

• 检查安装结果

•创建共享目录

编辑配置 

重启服务并查看状态

配置NIS用户管理

配置munge通信

创建munge用户

安装munge

添加配置文件

主节点发送munge密钥

启动munge

测试

配置pmix,openmpi

#下载hwloc-hwloc-2.3.0.tar.gz,

#下载安装libevent

#下载安装pmix

#下载安装ux

#下载安装openmpi

编译安装slurm

配置slurmd服务  

编写配置文件slurm.conf

计算节点配置 

#所有节点启动slurm服务

配置数据库(mariadb)(此步为可选项,可做可不做)

#安装数据库(可选)

#进入数据库

#创建表相关

#配置

#编辑slurmdbd.conf文件(若未配置数据库可不用更改)

启动slurm服务

创建测试slurm用户

 运行

查看

安装modules(可选)

#主节点

#其他节点安装

#然后在主节点

测试

一些MPI测试命令

一个简单的mpi脚本

最后


环境准备

此次安装部署均在虚拟机VMware上运行。

系统采用通用稳定的centos7系统,移植到其他(linux)系统应该问题不大。

软件VMware的安装和虚拟机的创建部分就跳过了,这些很容易能找到几位详细的安装步骤

硬件选择看运行虚拟机的主机配置了┑( ̄Д  ̄)┍,硬件资源给的越多越流畅

一些软件的版本(下载的源码版本)

 

hwloc2.3.0最好此版本
libevent2.1.12-stable最好此版本
modules5.3.1最新版
openmpi4.1.2最新版
pmix3.2.4-2这个用V3的都行
slurm23.02.3.这个用最新版
ucx1.11.2最好此版本

虚拟机信息

 

此处其实创建2个虚拟机(管理和计算)就可以了,多的节点也只是重复操作。

虚拟机网络ip信息

可以用命令查询

ip a

 

出现的部分看 ens33后面的ip

admin192.168.208.129
node01192.168.208.128
node02192.168.208.130
login192.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)

Slurm MPI 用户指南 | HPC知识分享 (hpclib.com) 

 yuhldr.github.io/posts/bfa79f01.html#依赖

  • 7
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Slurm是一个用于作业调度和管理的开源软件。它被广泛应用于各种场景,包括本地服务器集群、混合云计算和云端计算等。在本地服务器集群中,Slurm可以组织多台服务器进行计算任务的调度和编排。在混合云计算环境中,Slurm同样可以使用,可以直接让供应商提供技术支持。云端的计算和超算中心也使用Slurm进行作业编排,而且云端环境不需要自己部署,直接使用即可,并且由专业的公司维护,稳定性更高。此外,还有一些开源工具可用于部署和管理Slurm集群,例如Omnia。Omnia是Dell HPC推出的开源集群部署工具,基于ansible进行部署k8s/slurm集群。你可以在GitHub上找到有关Omnia的更多信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [基于Centos7的slurm集群部署方案(测试环境)](https://blog.csdn.net/mogui60/article/details/125069490)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Slurm集群部署](https://blog.csdn.net/weixin_31105189/article/details/113999400)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Slurm集群安装部署](https://blog.csdn.net/qq_31910613/article/details/123983153)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值