计算集群涉及的内容较多,建设过程也较为复杂,但在人工智能盛行的今天又尤为重要。这篇文章将从基础开始搭建计算集群(这里不涉及虚拟化和云计算内容),仅供大家参考,若有不当敬请留言。
目录
5.3.2.3. partition.conf
1. 服务器规划
“凡事预则立,不预则废”,建设人工智能高性能计算集群之前,需要对现有服务器的数量、类型、架构、操作系统类型、存储等信息有所了解;其次需要规划哪些服务器作为登录节点,哪些服务器用于部署用户统一认证服务、时间服务、授权服务、数据服务、控制服务、计算服务等。
目前针对3台分布式存储服务器,10台计算服务器,进行建设计算集群。(这里的存储也可以选择任何一台服务器作为共享存储进行设置)
1.1. 规划服务器用途
ostore1 为NFS服务(ParaStor300S01),仅提供存储,不参与计算等服务。
host10 为登录节点
host1 为用户统一认证服务(OpenLDAP)
host1 为时间服务(NTP)
host1 为授权服务(Munge)
host1、host2 为控制服务(slurmctld)
host1 为数据服务和数据库服务(slurmdbd, Maraiadb)
host[1-10] 均为计算服务(slurmd)
1.2. 查看操作系统类型
cat /etc/redhat-release
由于10台计算服务器系统均基于 Red Hat 系统,所有使用上述命令。如果是其他类型的操作系统可以使用下面的命令:
cat /etc/os-release
1.3. 配置主机名与IP地址映射
设置每台服务器的hostname
hostnamectl set-hostname <主机名>, 这里以host1为例:
hostnamectl set-hostname host1
在每台服务器的/etc/hosts文件中添加主机名与IP地址映射,便于系统在进行名称解析时,直接读取该文件中设置的IP地址和主机名的对应记录。
vim /etc/hosts
1.4. 设置无密码访问
- 在host1服务器中生成密钥
输入下面的命令,一路回车。
ssh-keygen -t ed25519
在hosts的 ~/.ssh/ 目录下生成ed25519密钥对: 私钥文件id_ed25519 和 公钥文件id_ed25519.pub
将公钥添加到 ~/.ssh/authorized_keys 文件中,并设置600权限。
touch ~/.ssh/authorized_keys
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
这里需要注意几点:
- 为什么要使用touch ~/.ssh/authorized_keys 而不是直接cat ~/.ssh/id_ed25519.pub > ~/.ssh/authorized_keys
主要是为了避免~/.ssh/authorized_keys文件已经存在的情况下,里面的内容遭覆盖。
- 为什么要设置~/.ssh/authorized_keys权限为600 而 ~/.ssh的权限为700
这里主要从安全策略最小化原理考虑,~/.ssh/authorized_keys只需root拥有读写权限即可;而~/.ssh是目录,需要有执行权限。
- 产生~/.ssh/known_hosts
在host1中依次访问其他计算服务器host[2-10], 会提示 ... key fingerprint is ...
Are you sure you want to continue connecting (yes/no)?
输入yes
然后会将其他服务器的 fingerprint 添加到 know_host中
Warning: Permanently added 'host2' (ECDSA) to the list of known hosts.
这样会得到完整的 ~/.ssh/known_hosts
- 同步到其他服务器
将 ~/.ssh 拷贝到其他计算服务器中,并修改文件权限。
以host2计算节点为例:
scp -r ~/.ssh host2:/root/
ssh host2 "chmod 700 /root/.ssh; chmod 600 /root/.ssh/authorized_keys"
至此,无密码访问设置完成。
2. 共享存储配置
这里只介绍基于NFS的共享存储。
2.1. 基于NFS
NFS(Network File System, 网络文件系统),是FreeBSD支持的文件系统中的一种,允许用户访问远程计算机上的文件和目录,并把那些文件和目录当作本地文件和目录对待,允许网络中的计算机之间通过TCP/IP网络共享资源。它适用于Linux与Unix之间实现文件共享,不能实现Linux与Windows间的文件共享功能。
2.1.1 存储节点
-
安装NFS服务
yum install -y epel-release yum install -y nfs-utils rpcbind
-
配置共享目录
/etc/exports
文件在 Linux 系统中用于配置网络文件系统(NFS)的共享,它定义了哪些文件系统可以被远程系统挂载,以及挂载时的权限和选项。
在存储服务器ostore1上,新建目录 /mnt/GPUshare01/home2作为共享存储。
编辑 /etc/exports
vim /etc/exports
内容如下:
/mnt/GPUshare01/home2 12.12.12.1/24(rw,sync,secure,no_root_squash,no_subtree_check,fsid=2)
参数说明:
/mnt/GPUshare01/home2
: 要共享的本地文件系统路径,即将本地的该目录共享出去。
12.12.12.1/24
: 允许访问共享的客户端的网络地址范围。这里指定的是12.12.12.1
到12.12.12.255
的 IP 地址范围(因为/24
表示子网掩码是 255.255.255.0,即前 24 位是网络地址,后 8 位是主机地址),只有这个范围内的客户端才能挂载这个共享。当然如果希望所有的网络地址都可以挂载,这里直接使用*即可(为了安全起见,不建议如此设置)。
(rw,sync,secure,no_root_squash,no_subtree_check,fsid=2)
: 挂载选项,具体含义如下:
rw
: 表示客户端可以读写共享的文件系统,也可以设置为只读模式ro (read only)。sync
: 表示所有操作(包括写操作)都将同步执行,即数据写入磁盘后才认为操作完成。也可以设置为async异步操作。secure
: 表示 NFS 通信将使用安全模式。在这种模式下,NFS 通信可能会因为不支持加密而无法在某些网络配置下工作。如果需要在不安全的网络上使用,可以设置为insecure
。no_root_squash
: 通常,NFS 会将远程的 root 用户映射为 nobody,这是一种安全措施。no_root_squash
选项关闭了这个特性,允许远程的 root 用户以 root 身份访问共享。no_subtree_check
: 通常,NFS 会检查挂载点下的子目录是否也被共享。这个选项关闭了这个检查,可以提高性能,但可能会带来安全风险。fsid=2
: 这是文件系统的唯一标识符。在 NFS 客户端挂载时,可以使用这个标识符来指定挂载的文件系统。
- 启动NFS服务
systemctl start nfs-server.service
systemctl enable nfs-server.service
systemctl enable rpcbind
- 显示共享存储
showmount -e ParaStor300S01
能够看到本地共享的目录,这里的 ParaStor300S01 也就是 ostore1 。
2.1.2 存储节点
在 /etc/hosts 添加: (见 1.3节 )
12.12.12.101 ParaStor300S01
- 安装客户端
yum install -y epel-release
yum install -y nfs-utils
- 查看存储目录
showmount -e ParaStor300S01
- 启动NFS服务
systemctl start nfs-server.service
systemctl enable nfs-server.service
挂载存储并查看
mount -t nfs ParaStor300S01:/mnt/GPUshare01/home2 /home
df -h
- 将挂载命令添加到 /etc/rc.local 让系统启动的时候实现自动挂载
mount -t nfs ParaStor300S01:/mnt/GPUshare01/home2 /home
这里需要注意的是 /etc/rc.local 是/etc/rc.d/rc.local的一个软连接,需要有执行权限。
ln -s /etc/rc.d/rc.local /etc/rc.local
chmod +x /etc/rc.local
至此完成了共享存储设置。
3. 通用配置
这里主要涉及全局账号,防火墙,时间同步,数据库软件服务配置。
-
3.1. 创建全局账号
-
选择 MUNGEUSER组编号 2001
选择 SLURMUSER 组编号 2002
在管理节点和计算节点,分别执行以下命令:
export MUNGEUSER=2001 groupadd -g $MUNGEUSER munge useradd -m -c "MUNGE Uid 'N' Gid Emporium" -d /var/lib/munge -u $MUNGEUSER -g munge -s /sbin/nologin munge export SLURMUSER=2002 groupadd -g $SLURMUSER slurm useradd -m -c "SLURM workload manager" -d /var/lib/slurm -u $SLURMUSER -g slurm -s /bin/bash slurm
这里的组编号依个人习惯设置,但是为了保证每个计算服务器的账号统一,需要设置相同的组编号。
-
3.2. 换成阿里云镜像
-
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
3.3. 安装epel-release
-
yum install -y epel-release
epel-release是一个软件仓库,为企业级Linux发行版(如CentOS、RHEL)提供额外的软件包。 EPEL(Extra Packages for Enterprise Linux)由Fedora社区维护,旨在为RHEL及其衍生发行版提供高质量的软件包。EPEL仓库包含了许多由社区维护的软件包,这些软件包通常不包含在官方仓库中。通过安装epel-release,用户可以访问到许多常用的开源软件和工具,扩展操作系统的功能和应用领域。这些软件包经过严格的审查和测试,确保其质量和稳定性。安装epel-release后,用户可以使用yum或dnf命令来安装和更新这些额外的软件包。这解决了官方仓库中软件包不足的问题,特别是对于那些在默认源中找不到的软件包。
3.4. 配置防火墙
-
为了允许其他设备通过网络访问你的 NTP 时间服务器,你需要在防火墙中打开 UDP 端口 123:
sudo firewall-cmd --permanent --add-service=ntp sudo firewall-cmd --reload
或关闭防火墙
systemctl stop firewalld systemctl status firewalld systemctl disable firewalld
3.5. 设置时间同步
- 配置CST时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
- 同步NTP服务器(以centos 7.6为例)
yum install ntp -y
3.5.1. 服务器端
1)编辑 NTP 的配置文件 /etc/ntp.conf 来设置你的 NTP 服务器
vim /etc/ntp.conf
- 确保时间服务器能够从其他可靠的 NTP 服务器获取时间,这样可以提高时间的准确度:
server pool.ntp.org iburst
(注意:这行保留了与外部 NTP 服务器的同步)
- 设置本地时钟为首选时间源:
server 127.127.1.0 prefer
fudge 127.127.1.0 stratum 10
- 如果你希望其他客户端能够通过广播方式从时间服务器获取时间,可以开启广播功能:
broadcast 12.12.12.255
broadcastclient
- 限制其他主机对时间服务器的操作权限,同时允许特定子网内的主机进行时间同步:
restrict default nomodify notrap nopeer noquery
restrict 12.12.12.0 mask 255.255.255.0 nomodify notrap
- 存储日志
driftfile /var/lib/ntp/drift
logfile /var/log/ntp.log
- 即 /etc/ntp.conf内容为(其中允许12.12.12.*其他服务器查询和同步时间):
server pool.ntp.org iburst
server 127.127.1.0 prefer
fudge 127.127.1.0 stratum 10
broadcast 12.12.12.255
broadcastclient
restrict default nomodify notrap nopeer noquery
restrict 12.12.12.0 mask 255.255.255.0 nomodify notrap
driftfile /var/lib/ntp/drift
logfile /var/log/ntp.log
2)启动 NTP 服务并设置开机启动
systemctl start ntpd
systemctl enable ntpd
systemctl status ntpd
3.5.2. 客户端
- 客户端设置
在每台需要与时间服务器同步时间的客户端上安装 NTP 客户端:
yum install ntp -y
编辑客户端的 NTP 配置文件 /etc/ntp.conf,添加指向时间服务器的记录:
vim /etc/ntp.conf
在配置文件中添加以下行(其中12.12.12.240为NTP服务端):
server 12.12.12.240 iburst
- 启动 NTP 客户端服务
重启 NTP 客户端服务以应用更改:
systemctl restart ntpd
systemctl enable ntpd
systemctl status ntpd
- 检查同步情况
在每个客户端上运行以下命令来确认是否成功同步:
ntpq -p
这将显示客户端与时间服务器的同步信息:
remote 列显示的是时间服务器的 IP 地址或主机名,
refid 列显示为 LOCAL 或者时间服务器所同步的上级 NTP 服务器的地址。
整体操作:
systemctl restart ntpd
systemctl enable ntpd
systemctl status ntpd
ntpq -p
3.6. 安装数据库
这里选择Mariadb
3.6.1. 服务端
3.6.1.1. 安装服务
yum install -y mariadb mariadb-server MySQL-python
yum install -y mysql-devel
3.6.1.2. 重启服务设置密码
systemctl restart mariadb
systemctl enable mariadb.service
systemctl stop mariadb
mysql_install_db --datadir="/var/lib/mysql" --user="mysql"
systemctl start mariadb.service
mysql_secure_installation
设置root密码 ...... (这里设置您的root密码)
3.6.1.3. 修改配置
- 停止服务
systemctl stop mariadb
- 修改配置
修改配置文件/etc/my.cnf,添加innodb_buffer_pool_size和innodb_lock_wait_timeout的大小
[mysqld]
innodb_buffer_pool_size=4096M
innodb_log_file_size=64M
innodb_lock_wait_timeout=900
max_allowed_packet=16M
- 移除日志
移除日志文件:
cd /var/lib/mysql/
rm -rf ib_logfile*
rm -rf aria_log*
- 重启服务
重启服务,并进入数据库中查看innodb_buffer_pool_size参数。
systemctl start mariadb.service
systemctl status mariadb.service
mysql -uroot -p
MariaDB[(none)]> show variables like 'innodb_buffer_pool_size';
显示:1073741824
这里设置innodb_buffer_pool_size和innodb_lock_wait_timeout的目的,是为了避免slurmdbd出现的错误:
error: Database settings not recommended values: innodb_buffer_pool_size innodb_log_file_size innodb_lock_wait_timeout max_allowed_packet
3.6.2. 计算节点
yum install -y mariadb MySQL-python
截至目前数据库安装成功。
3.7. 计算设备
这里根据计算资源情况,这里可以忽略,(主要对后期的虚拟化集群的建设有意义)
加速卡类型 | 查看插在服务器中加速卡的的PCI标识号 | 系统管理工具 |
英伟达 | lspci -nnD | grep -i nvidia | grep VGA | nvidia-smi |
海光 | 区分不同型号: lspci -nnD | grep -i disp lspci -nnD | grep -i dcu | rocm-smi |
华为 | lspci -nnD | grep -i accelerators | npu-smi info |
百度昆仑 | lspci -nnD | grep -i accelerators | xpu_smi |
寒武纪 | lspci -nnD | grep -i accelerators | cnmon |
... |
4. LDAP统一用户认证
轻型目录访问协议(LDAP ,Lightweight Directory Access Protocol )是一个开放的,中立的工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。它的常用用途是单点登录,用户在多个服务中使用同一个密码,通常用于公司内部网站的登录,或集群账号的登录。 该集群系统采用的是开源的OpenLDAP实现集群账号的管理,实现统一身份认证。
4.1. 认证原理介绍
首先介绍什么是目录服务,目录服务是一个特殊的数据库,用来保存描述性的、基于属性的详细信息,支持过滤功能;它具有动态的,灵活的,易扩展的特点。LDAP是基于X.500标准的轻量级目录访问协议。目录是一个访问、浏览和搜索而优化的数据库,它成树状组织数据,类似文件目录一样。LDAP目录服务是由目录数据库和一套访问协议组成的系统。
统一身份认证主要是改变原有的认证策略,是需要认证的软件通过LDAP进行认证,在统一身份认证之后,用户的所有信息都存储在AD Server中,终端用户在需要使用公司内部服务的收,都需要通过AD服务器的认证。
4.2. 服务端配置
准备目录
mkdir -p ~/soft/
4.2.1. 安装OpenLDAP软件和依赖
- 安装openldap服务端软件
yum install -y openldap openldap-* compat-openldap migrationtools
systemctl start slapd
systemctl enable slapd
systemctl status slapd
slapd -VV
netstat -antup | grep 389
命令说明:
- 查看ldap版本: slapd -VV
# slapd -VV
@(#) $OpenLDAP: slapd 2.4.44 (Jan 29 2019 17:42:45) $
mockbuild@x86-01.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4.44/servers/slapd
- 查看openldap默认监听的389端口
(如果没有该命令,需要安装:yum install net-tools -y )
# netstat -antup| grep 389
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 1940/slapd
tcp6 0 0 :::389 :::* LISTEN 1940/slapd
注意:需要关闭iptables防火墙或开放389端口,并重新加载规则。
firewall-cmd --zone=public --add-port=389/tcp --permanent
firewall-cmd --reload
4.2.2. 修改OpenLDAP默认参数
- 修改参数migrationtools的默认配置
修改migrationtools工具中 migrate_common.ph的使用默认域 padl.com, 这里仅采用默认值,如果需要修改,则需要修改该文件/usr/share/migrationtools/migrate_common.ph。
vim /usr/share/migrationtools/migrate_common.ph
默认值为:
# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "padl.com";
# Default base
$DEFAULT_BASE = "dc=padl,dc=com";
- 改权限
chown -R ldap:ldap /etc/openldap
- 修改ldap.conf
修改openldap的配置域
vim /etc/openldap/ldap.conf
修改BASE 和 URI, 分别设置为 dc=padl,dc=com 和 ldap://12.12.12.240/
其中IP为OpenLDAP服务器的IP地址。 属性和值之间使用tab隔开,不能使用空格。
重启OpenLDAP服务
-
systemctl restart slapd
4.2.3. 配置OpenLDAP数据库
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap -R /var/lib/ldap/
chmod 700 -R /var/lib/ldap
ll /var/lib/ldap/
4.2.4. 设置OpenLDAP管理员密码
参照: OpenLDAP安装与配置 - 嘻嘻哈哈的人生 - 博客园
- 生成OpenLdap管理员密码
配置ldap服务 设置OpenLDAP的管理员密码
# slappasswd
New password: (设置管理员密码)
Re-enter new password:
{SSHA}7gXtJ8088eiOoBgYVusgzFce90yBMV4v
- 编辑和导入chrootpw.ldif
编辑用户密码的文件 chrootpw.ldif
vim chrootpw.ldif
# specify the password generated above for "olcRootPW" section
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}7gXtJ8088eiOoBgYVusgzFce90yBMV4v
这里olcRootPW是存放之前生成的加密后的密码。其中:
- ldif即LDAP Data Interchange Format,是LDAP中数据交换的一种文件格式。文件内容采用的是key-value形式,注意value后面不能有空格。
- 内容中的dn即distingush name, olc即Online Configuration,表示写入LDAP后不需要重启即可生效
- changetype: modify 表示修改一个entry,changetype的值可以是add,delete, modify等。
- add: olcRootPW 表示对这个entry新增了一个olcRootPW的属性
- olcRootPW: {SSHA}... 指定了属性值
- 导入chrootpw.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f ./chrootpw.ldif
[温馨提示]: 如果上面的命令出现下面报错:
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
ldap_modify: Inappropriate matching (18) additional info: modify/add: olcRootPW: no equality matching rule
[解决办法]: 修改chrootpw.ldif中对应选项的"add"为"replace"即可。然后再导入。
默认ldap是没有数据的,需要管理员添加。
ldapsearch -x -b "dc=padl,dc=com"
- 修改olcDatabase={2}hdb.ldif文件
cd /etc/openldap/slapd.d/cn=config
ls -1
cn=schema
cn=schema.ldif
olcDatabase={0}config.ldif
olcDatabase={-1}frontend.ldif
olcDatabase={1}monitor.ldif
olcDatabase={2}hdb.ldif
vim olcDatabase\=\{2\}hdb.ldif
最后一行添加olcRootPW 以及密码值(上一步生成的值)。并修改dc=padl,dc=com为自己的属性值。
- # 修改文件olcDatabase\=\{1\}monitor.ldif
vim olcDatabase\=\{1\}monitor.ldif
- 测试配置是否正确
slaptest -u
出现:config file testing succeeded ,说明配置成功。
- 最后重启服务
systemctl restart slapd
4.2.5. 导入OpenLDAP全部schema
OpenLDAP已经提供了一些ldif文件,可以选择导入全部schema也可以导入基础schema, 以下将 /etc/openldap/schema/下的 所有 ldif 全部导入。
ls /etc/openldap/schema/*.ldif | while read f; do ldapadd -Y EXTERNAL -H ldapi:/// -f $f; done
显示以下内容:
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=collective,cn=schema,cn=config"
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=corba,cn=schema,cn=config"
…
4.2.6. 创建基本管理员和用户信息
可以参考: Openldap导入数据(一)-优快云博客
通过migrationtools工具生成base.ldif文件,并导入到ldap中, 并查询:
cd ~/soft/
/usr/share/migrationtools/migrate_base.pl>base.ldif
ldapadd -x -D "cn=Manager,dc=padl,dc=com" -W -f ./base.ldif
ldapsearch -x -b "dc=padl,dc=com"
4.2.7. 测试域名
使用ldapsearch 测试域名:
ldapsearch -x -b 'dc=padl,dc=com' '(objectclass=*)'
ldapsearch -LLL -W -x -D "cn=Manager,dc=padl,dc=com" -H ldap://localhost -b "dc=padl,dc=com"
4.3. 客户端配置
客户端配置openldap访问LDAP服务器,实现目录服务共享。
可以参考:OpenLDAP客户端配置,实现用户认证(原创)_51CTO博客_ldap 客户端
4.3.1. 安装软件
安装openldap客户端软件:
yum install -y openldap-clients nss-pam-ldapd pam_ldap
4.3.2. 修改SSH配置
将 StrictModes yes 改为 StrictModes no
vim /etc/ssh/sshd_config文件的一个选项,StrictModes yes改为no
4.3.3. 修改ldap配置
主要是BASE和 URI
vim /etc/openldap/ldap.conf
BASE dc=padl,dc=com
URI ldap://12.12.12.240
[注意]: 这里的属性和值需要使用tab分割。
4.3.4. 可视化配置
使用命令进行可视化配置(使用<Space>键进行选择):
authconfig-tui
选择以及四个选项(其他选项默认):
[*] 使用LDAP
[*] 使用MD5密码
[*] 使用shadow密码
[*] 使用LDAP认证
选择 LDAP 相关选项(配置ldap服务器地址, 以及DN, 以下两个不同的设置)。
getsebool: SELinux is disabled
4.3.5. 验证配置sssd.conf
在界面配置完成以后 sssd.conf 已经配置完成,此处只需要验证是否正确
vim /etc/sssd/sssd.conf
[domain/default]
autofs_provider = ldap
cache_credentials = True
ldap_search_base = dc=padl,dc=com
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldap://12.12.12.240/
ldap_id_use_start_tls = False
ldap_tls_cacertdir = /etc/openldap/cacerts
[sssd]
services = nss, pam, autofs
domains = default
[nss]
homedir_substring = /home
[pam]
[sudo]
[autofs]
[ssh]
[pac]
[ifp]
需要注意以下参数的设置:
ldap_search_base = dc=padl,dc=com
ldap_uri = ldap://12.12.12.240/
homedir_substring = /home
其中,参数 homedir_substring 规定了用户HOME目录的前缀,正常情况我们配置ldap用户的home目录为 /home,但是有些超算可能使用 /public/home,这里需要根据实际情况进行配置。
修改权限为 600
chmod 600 /etc/sssd/sssd.conf
4.3.6. 使用相应的openldap 认证
配置完成openldap客户端,需要启用openldap认证,执行以下命令,告诉sshd使用openldap实现统一用户认证。
authconfig --enableldap --enableldapauth --enablemkhomedir \
--enableforcelegacy --enablelocauthorize --enableshadow \
--disablesssd --disablesssdauth --disableldaptls \
--ldapserver=12.12.12.240 --ldapbasedn="dc=padl,dc=com" --update
其中ldapserver=<IP> 该IP地址为LDAP服务器的IP地址。
4.3.7. 重启和设置服务
systemctl restart sssd
systemctl restart nslcd
systemctl restart oddjobd
systemctl restart sshd
systemctl enable sssd
systemctl enable nslcd
systemctl enable oddjobd
systemctl enable sshd
4.3.8. 测试openldap连接
ldapsearch -LLL -W -x -D "cn=Manager,dc=padl,dc=com" \
-H ldap://12.12.12.240 -b "dc=padl,dc=com"
至此OpenLDAP配置完成。
4.4. 授权用户
虽然OpenLDAP配置完成,但是ldap账号手动建设较为复杂,我们可以通过编写一个Shell程序自动新建账号(需要在OpenLDAP服务器上,以管理员权限账号运行): config_user
4.4.1. 授权脚本
编写授权脚本 config_user.sh 主要涉及四个部分:
1)在LDAP服务器的系统中创建 Linux系统账号
2)为该系统账号生成密钥对,并将公钥添加到该账号的~/.ssh/authorized_keys
3)向LDAP服务添加该用户信息
4)设置LDAP该用户设置密码
具体脚本如下
vim config_user.sh
需要注意:
master="...", 这里设置的master为OpenLDAP服务器的主机名
LDAP_PASSWORD=... 这里设置的参数, 为OpenLDAP服务的管理员密码(见 4.2.4)
#!/bin/bash
# #####################################################################
#
# find the max ldap uid ( 5000 ~ 7000 )
# cat /etc/passwd | cut -d ':' -f3 | sort -rn | head -n 5
# #####################################################################
master="<这里设置LDAP服务器所在的主机名>"
if [ `hostname` != "$master" ];then
echo "Error: Please execute this command in the host '$master' with root permition!"
exit 1
fi
# check username ,add user, set password etc.
if (( $#<2 )) ; then
echo "Error: Usage: config_user <userName> <password>"
exit 1
fi
USERNAME=$1
PASSWORD=$2
# #####################################################################
echo "======= check user: $USERNAME information=========`date`============="
if id -u $USERNAME >/dev/null 2>&1 ; then
echo "user $USERNAME exists! Please change other username."
exit 1
fi
valid_uid=`cat /etc/passwd | cut -d ':' -f3 | sort -rn | grep -i -v ^65534 | head -n 1`
valid_uid=$[$valid_uid + 1]
USERID=${valid_uid}
if id -u $USERID > /dev/null 2>&1 ; then
echo "uid=$USERID exists! Please change other uid."
exit 1
fi
# add user to linux system
echo "useradd -u $USERID -m $USERNAME "
useradd -u $USERID -m $USERNAME
echo "$PASSWORD" | passwd --stdin $USERNAME
# #####################################################################
# add public key
HOMEPREFIX=/home
userhome=${HOMEPREFIX}/${USERNAME}
sshdir=${userhome}/.ssh
mkdir -p ${sshdir}
chmod 700 ${sshdir}
touch ${sshdir}/authorized_keys
# generate key
userKey=${sshdir}/id_ed25519
ssh-keygen -t ed25519 -f $userKey -N ''
cat ${userKey}.pub >> ${sshdir}/authorized_keys
chmod 600 ${sshdir}/authorized_keys
chown -R ${USERNAME}:${USERNAME} ${userhome}
# #####################################################################
LDAP_BASE="dc=padl,dc=com"
LDAP_MANAGER="cn=Manager,$LDAP_BASE"
LDAP_PASSWORD="<这里需要设置OpenLDAP服务的密码>"
userhome=${HOMEPREFIX}/$USERNAME
# check username ,add user, set password etc.
if id -u $USERNAME >/dev/null 2>&1 ; then
if [ ! -d ${userhome} ]; then
echo "${userhome} direcotry does not exist! Please check user!"
exit 1
fi
else
echo "user $USERNAME does not exist! Please check user!"
exit 1
fi
# add Gid to ldap account
cat /etc/group | grep $USERNAME > /tmp/group.in
/usr/share/migrationtools/migrate_group.pl /tmp/group.in > /tmp/group.ldif
ldapadd -x -D "$LDAP_MANAGER" -w "$LDAP_PASSWORD" -f /tmp/group.ldif
rm /tmp/group.ldif
rm /tmp/group.in
# add Uid to ldap account
cat /etc/passwd | grep $USERNAME > /tmp/passwd.in
/usr/share/migrationtools/migrate_passwd.pl /tmp/passwd.in > /tmp/passwd.ldif
ldapadd -x -D "$LDAP_MANAGER" -w "$LDAP_PASSWORD" -f /tmp/passwd.ldif
rm /tmp/passwd.ldif
rm /tmp/passwd.in
# search this account in ldap database
echo "ldapsearch -x 'uid=$USERNAME' "
ldapsearch -x "uid=$USERNAME"
# #####################################################################
# add ldap account 's password
ldappasswd -x -D "$LDAP_MANAGER" -w "$LDAP_PASSWORD" "uid=$USERNAME,ou=People,$LDAP_BASE" -s $PASSWORD
# set home direcotry for account
# touch /tmp/home.ldif
echo "dn: uid=$USERNAME,ou=People,$LDAP_BASE" > /tmp/home.ldif
echo "changetype: modify" >> /tmp/home.ldif
echo "replace: homeDirectory" >> /tmp/home.ldif
echo "homeDirectory: ${userhome}" >> /tmp/home.ldif
cat /tmp/home.ldif
ldapmodify -x -D "$LDAP_MANAGER" -w "$LDAP_PASSWORD" -f /tmp/home.ldif
rm /tmp/home.ldif
echo "ldapsearch -x 'uid=$USERNAME' "
ldapsearch -x "uid=$USERNAME"
4.4.2. 编辑授权脚本
为了安全起见,我们需要将Shell脚本编译成二进制文件,这里用到 shc程序。
- shc安装
yum -y install shc
- 脚本编译
shc -rf config_user.sh -o config_user
这样我们就可以利用 config_user程序,自动生成用户了。
5. 配置SLURM系统
5.1. Munge安装与配置
munge为SLURM提供一套MUNGE认证规则,包括UID和GID,且在认证过程中均加密传输。
5.1.1. Munge安装
在所有节点中进行相同操作, 安装munge依赖以及安装munge
yum install munge munge-libs munge-devel -y
5.1.2. 创建munge.key
创建munge.key实现MUNGE认证。由管理节点生成munge.key,拷贝到其他各节点中。以下内容,仅在管理节点中执行
- 安装工具rng-tools
yum install rng-tools -y
rngd -r /dev/urandom
- 创建munge.key
/usr/sbin/create-munge-key -r
dd if=/dev/urandom bs=1 count=1024 > /etc/munge/munge.key
chown munge: /etc/munge/munge.key
chmod 400 /etc/munge/munge.key
5.1.3. 配置与启动Munge
将管理节点生成的/etc/munge/munge.key 拷贝到其他节点。
scp /etc/munge/munge.key host2:/etc/munge/
...
- 权限修改
在所有节点(包括管理节点)修改路径权限
chown -R munge: /etc/munge/ /var/log/munge/
chmod 0700 /etc/munge/ /var/log/munge/
- 设置服务、启动服务、状态查看服务
启动munge, 并设置开机自启动:
systemctl start munge
systemctl enable munge
systemctl status munge
即每个节点上执行:
chown -R munge: /etc/munge/ /var/log/munge/
chmod 0700 /etc/munge/ /var/log/munge/
systemctl enable munge
systemctl start munge
systemctl status munge
5.2. SLURM安装
5.2.1. 直接安装SLURM依赖
如果没有网络,可以通过离线安装方式进行(注意安装顺序)
yum install -y gcc gcc-c++ readline-devel perl-ExtUtils-MakeMaker pam-devel rpm-build
yum install -y openssl openssl-devel pam-devel numactl numactl-devel hwloc hwloc-devel lua lua-devel readline-devel rrdtool-devel ncurses-devel man2html libibmad libibumad
- 安装数据库mysql
yum install -y mariadb MySQL-python
yum install -y mysql-devel
yum install -y python3 wget rpm-build
yum install -y perl perl-ExtUtils-MakeMaker
安装编译工具(用以提供rpmbuild命令),以及perl相关依赖
yum install -y rpm-build
yum install -y cpanm*
5.2.2. SLURM存储配置
- 管理节点中操作: 配置存储slurm_acct_db
登录mariadb
mysql -uroot -p
输入密码(假设为 12345678 )
执行:
CREATE DATABASE slurm_acct_db;
GRANT ALL PRIVILEGES ON slurm_acct_db.* TO 'slurm'@'localhost' IDENTIFIED BY '12345678';
GRANT ALL PRIVILEGES ON slurm_acct_db.* TO 'slurm'@'%' IDENTIFIED BY '12345678';
GRANT ALL PRIVILEGES ON slurm_acct_db.* TO 'slurm'@'host1' IDENTIFIED BY '12345678';
flush privileges;
show databases;
注意需要将本机的主机名添加到授权中, 'slurm'@'host1',其中host1为数据库所在的服务器主机名。
- 用于slurm相关mysql配置:
JobCompType=jobcomp/mysql
JobCompHost=host1
JobCompPort=3306
JobCompPass=12345678
JobCompUser=slurm
JobCompLoc=slurm_acct_db
见 slurmdbd.conf配置。
参数说明:
JobCompType,SLURM任务存储类型,默认是jobcomp/none, 这里选择jobcomp/mysql
JobCompHost、JobCompPort、JobCompPass、 JobCompUser、JobCompLoc, 用于设置数据库所在主机名,端口,密码,用户名,以及数据库名。
5.2.3. SLURM安装方式一:包安装
SLURM可以采用安装包直接安装
安装包下载地址: Download Slurm - SchedMD
- 下载与编译
mkdir -p /home/admin/
cd /home/admin/
wget https://download.schedmd.com/slurm/slurm-23.02.8.tar.bz2
rpmbuild -ta --buildroot /home/admin/slurm-23.02.8 --with mysql slurm-23.02.8.tar.bz2
其中:
--buildroot=DIRECTORY 重载构建根路径
--with=<option> enable configure <option> for build
- 安装SLURM
cd /home/admin/rpmbuild/RPMS/x86_64/
yum localinstall -y --installroot=/home/slurm ./slurm-*.rpm
通过参数--installroot=指定安装路径, (这里选择了 /home/slurm, 主要是为了每个服务器都能够访问到,但是不建议这样设置,还是需要有一个公共安装目录)
5.3.3. SLURM安装方式二:源码安装
先切换到 目录
cd /home/admin/
5.3.3.1. 下载源码
- 方式一: 从git下载
从github中下载slurm分支slurm-20.11,并重命名,并建立软连接:
git clone https://github.com/SchedMD/slurm.git -b slurm-20.11
mv slurm slurm-20.11
ln -s /home/admin/slurm-20.11 /home/admin/slurm
cd /home/admin/slurm
- 方式二:从schemd下载包
从官网下载最新的软件包 slurm-23.11, 解压并重名,建立软连接
wget https://download.schedmd.com/slurm/slurm-23.11.10.tar.bz2
tar xvf slurm-23.11.10.tar.bz2
ln -s /home/admin/slurm-20.11 /home/admin/slurm
cd /home/admin/slurm
5.3.3.2. 配置(重点注意)
./configure \
--prefix=/home/slurm/ \
--enable-debug \
--with-mysql_config=/usr/bin
配置说明:
- 参数prefix,用于指定最后安装的位置。
- 参数with-mysql_config, 指定mysql_config二进制文件路径,要保证该文件存在
在老版本中使用 --with-mysql_config=/usr/bin/mysql_config, (19.08之前)
在新版版中使用 --with-mysql_config=/usr/bin
5.3.3.3. 编译与安装
make
make install
- 查看安装结果:
ls /home/slurm/lib/slurm/accounting_storage_*
会出现文件:
/home/slurm/lib/slurm/accounting_storage_mysql.a
/home/slurm/lib/slurm/accounting_storage_mysql.la
/home/slurm/lib/slurm/accounting_storage_mysql.so
5.3. SLURM配置与启动
5.3.1. 环境配置
-
环境变量配置
新建: /etc/profile.d/slurm.sh
vim /etc/profile.d/slurm.sh
#!/bin/bash
export SLURMHOME=/home/slurm
export PATH=$SLURMHOME/bin:$SLURMHOME/sbin:$PATH
export LD_LIBRARY_PATH=$SLURMHOME/lib:$LD_LIBRARY_PATH
export MANPATH=$SLURMHOME/share/man:$MANPATH
更改权限,并同步到其他节点
chmod +x /etc/profile.d/slurm.sh
source /etc/profile
scp /etc/profile.d/slurm.sh host2:/etc/profile.d/
...
执行slurmd -C 查看各个节点资源:
slurmd -C
会出现以下内容
NodeName=host1 CPUs=128 Boards=1 SocketsPerBoard=2 CoresPerSocket=32 ThreadsPerCore=2 RealMemory=1019886 UpTime=1-23:34:21
其中NodeName为节点主机名,CPUs为该节点的核心数,RealMemory为该节点的内存大小,
- 目录准备:
创建SLURM运行时,所需要的目录,并分配适当的权限,否则在运行的过程中会提示各种无权限访问等错误。
1)控制节点:
mkdir -p /var/spool/slurmctld
mkdir -p /var/spool/slurm/slurmd
mkdir -p /var/run/slurm
mkdir -p /var/log/slurm
chown -R slurm:slurm /var/spool/slurmctld
chown -R slurm:slurm /var/spool/slurm
chown -R slurm:slurm /var/run/slurm
chown -R slurm:slurm /var/log/slurm
2)计算节点:
mkdir -p /var/spool/slurm/slurmd
mkdir -p /var/run/slurm
mkdir -p /var/log/slurm
chown -R slurm:slurm /var/spool/slurm
chown -R slurm:slurm /var/run/slurm
chown -R slurm:slurm /var/log/slurm
5.3.2. 文件配置
主要涉及数据库的配置,节点、队列、资源、以及主配置。
5.3.2.1. slurmdbd.conf
#
# Example slurmdbd.conf file.
#
# See the slurmdbd.conf man page for more information.
#
# Archive info
#ArchiveJobs=yes
#ArchiveDir="/tmp"
#ArchiveSteps=yes
#ArchiveScript=
#JobPurge=12
#StepPurge=1
#
# Authentication info
AuthType=auth/munge
AuthInfo=/var/run/munge/munge.socket.2
#
# slurmDBD info
DbdAddr=12.12.12.240
DbdHost=host1
#DbdPort=7031
SlurmUser=slurm
#MessageTimeout=300
DebugLevel=verbose
#DefaultQOS=normal,standby
LogFile=/var/log/slurm/slurmdbd.log
PidFile=/var/run/slurmdbd.pid
#PluginDir=/usr/lib/slurm
#PrivateData=accounts,users,usage,jobs
#TrackWCKey=yes
#
# Database info
StorageType=accounting_storage/mysql
StorageHost=host1
StoragePort=3306
StorageLoc=slurm_acct_db
StorageUser=slurm
StoragePass=12345678
这里需要注意 数据库信息配置,根据实际情况进行配置主机名,数据库端口,用户名和密码,以及数据库名。
StorageType=accounting_storage/mysql
StorageHost=host1
StoragePort=3306
StorageLoc=slurm_acct_db
StorageUser=slurm
StoragePass=12345678
配置完成之后,需要更改权限
chown slurm:slurm slurmdbd.conf
chmod 600 slurmdbd.conf
5.3.2.2. node.conf
配置节点信息:
NodeName=host1 NodeAddr=12.12.12.240 CPUs=128 Boards=1 SocketsPerBoard=2 CoresPerSocket=32 ThreadsPerCore=2 State=UNKNOWN RealMemory=1019000 Gres=dcu:8
...
添加每个节点的信息,通过slurmd -C 获取。
这里也可以为Gres设置类型,如: Gres=dcu:K100:8, 由于我们这里dcu的版本仅一种类型,所以可以省略。
5.3.2.3. partition.conf
配置队列信息:
PartitionName=debug Nodes=host[2-10] MaxTime=INFINITE State=UP Default=YES
PartitionName=test Nodes=host1 MaxTime=INFINITE State=UP
一般根据实际需要设置队列。
5.3.2.4. gres.conf
配置加速卡资源:
NodeName=host[1-10] Name=dcu Type=Hygon File=/dev/dri/renderD128 Cores=0-7
NodeName=host[1-10] Name=dcu Type=Hygon File=/dev/dri/renderD129 Cores=8-15
NodeName=host[1-10] Name=dcu Type=Hygon File=/dev/dri/renderD130 Cores=16-23
NodeName=host[1-10] Name=dcu Type=Hygon File=/dev/dri/renderD131 Cores=24-31
NodeName=host[1-10] Name=dcu Type=Hygon File=/dev/dri/renderD132 Cores=32-39
NodeName=host[1-10] Name=dcu Type=Hygon File=/dev/dri/renderD133 Cores=40-47
NodeName=host[1-10] Name=dcu Type=Hygon File=/dev/dri/renderD134 Cores=48-55
NodeName=host[1-10] Name=dcu Type=Hygon File=/dev/dri/renderD135 Cores=56-63
需要注意的是,gres.conf中配置的信息,要与node.conf指定的Gres个数一致,否则会出现类似下面错误(配置的个数与node.conf 标记的个数不匹配):
error: Setting node host10 state to INVAL with reason:gres/gpu count reported lower than configured (0 < 8)
5.3.2.5. slurm.conf
SLURM主配置
# 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.
#
ClusterName=cluster
SlurmctldHost=host1
SlurmctldHost=host2
#
#DisableRootJobs=NO
#EnforcePartLimits=NO
#Epilog=
#EpilogSlurmctld=
#FirstJobId=1
#MaxJobId=67043328
#GresTypes=
#GroupUpdateForce=0
#GroupUpdateTime=600
#JobFileAppend=0
#JobRequeue=1
#JobSubmitPlugins=lua
#KillOnBadExit=0
#LaunchType=launch/slurm
#Licenses=foo*4,bar
#MailProg=/bin/mail
#MaxJobCount=10000
#MaxStepCount=40000
#MaxTasksPerNode=512
MpiDefault=none
#MpiParams=ports=#-#
#PluginDir=
#PlugStackConfig=
#PrivateData=jobs
ProctrackType=proctrack/cgroup
#Prolog=
#PrologFlags=
#PrologSlurmctld=
#PropagatePrioProcess=0
#PropagateResourceLimits=
#PropagateResourceLimitsExcept=
#RebootProgram=
ReturnToService=1
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmctldPort=6817
SlurmdPidFile=/var/run/slurmd.pid
SlurmdPort=6818
SlurmdSpoolDir=/var/spool/slurmd
SlurmUser=slurm
#SlurmdUser=root
#SrunEpilog=
#SrunProlog=
StateSaveLocation=/var/spool/slurmctld
SwitchType=switch/none
#TaskEpilog=
TaskPlugin=task/affinity,task/cgroup
#TaskProlog=
#TopologyPlugin=topology/tree
#TmpFS=/tmp
#TrackWCKey=no
#TreeWidth=
#UnkillableStepProgram=
#UsePAM=0
#
#
# TIMERS
#BatchStartTimeout=10
#CompleteWait=0
#EpilogMsgTime=2000
#GetEnvTimeout=2
#HealthCheckInterval=0
#HealthCheckProgram=
InactiveLimit=0
KillWait=30
#MessageTimeout=10
#ResvOverRun=0
MinJobAge=300
#OverTimeLimit=0
SlurmctldTimeout=120
SlurmdTimeout=300
#UnkillableStepTimeout=60
#VSizeFactor=0
Waittime=0
#
#
# SCHEDULING
#DefMemPerCPU=0
#MaxMemPerCPU=0
#SchedulerTimeSlice=30
SchedulerType=sched/backfill
SelectType=select/cons_tres
SelectTypeParameters=CR_Core
#
#
# JOB PRIORITY
#PriorityFlags=
#PriorityType=priority/basic
#PriorityDecayHalfLife=
#PriorityCalcPeriod=
#PriorityFavorSmall=
#PriorityMaxAge=
#PriorityUsageResetPeriod=
#PriorityWeightAge=
#PriorityWeightFairshare=
#PriorityWeightJobSize=
#PriorityWeightPartition=
#PriorityWeightQOS=
#
#
# LOGGING AND ACCOUNTING
#AccountingStorageEnforce=0
AccountingStorageType=accounting_storage/slurmdbd
AccountingStorageHost=host1
#AccountingStoragePort=3306
#AccountingStorageUser=slurm
#AccountingStoragePass=/var/run/munge/munge.socket.2
#AccountingStorageFlags=
AccountingStorageTRES=cpu,mem,gres/dcu
DebugFlags=CPU_Bind,gres
# JOBCOM
JobCompType=jobcomp/mysql
JobCompLoc=slurm_acct_db
JobCompHost=host1
JobCompPort=3306
##JobCompParams=
JobCompUser=slurm
JobCompPass=12345678
#JobContainerType=job_container/none
JobAcctGatherFrequency=30
JobAcctGatherType=jobacct_gather/none
SlurmctldDebug=debug
SlurmctldLogFile=/var/log/slurm/slurmctld.log
SlurmdDebug=debug
SlurmdLogFile=/var/log/slurm/slurmd_%h.log
#SlurmSchedLogFile=
#SlurmSchedLogLevel=
#DebugFlags=
#
#
# POWER SAVE SUPPORT FOR IDLE NODES (optional)
#SuspendProgram=
#ResumeProgram=
#SuspendTimeout=
#ResumeTimeout=
#ResumeRate=
#SuspendExcNodes=
#SuspendExcParts=
#SuspendRate=
#SuspendTime=
#
GresTypes=dcu
#
# COMPUTE NODES
include /home/slurm/etc/node.conf
include /home/slurm/etc/partition.conf
重要参数说明:
- ClusterName, 指定集群名称。
- SlurmctldHost, 指定主机名。
- AccountingStorageType, 指定存储类型,这里采用slurmdbd
- GresTypes, 指定资源,如 dcu, gpu等。
需要注意的是 slurm.conf 中的 GresTypes 需要在 node.conf 和 gres.conf 中有所体现。
5.3.3. 配置与启动服务
编辑三个服务文件:
a) slurmdbd.service(只在数据slurdbd服务所在服务器中配置)
b) slurmctld.service(只在控制节点slurmctld服务所在服务器中配置)
c) slurmd.service(在所有计算节点中配置)
touch /usr/lib/systemd/system/slurmctld.service
touch /usr/lib/systemd/system/slurmd.service
touch /usr/lib/systemd/system/slurmdbd.service
- /usr/lib/systemd/system/slurmctld.service
[Unit] Description=Slurm controller daemon After=network.target munge.service ConditionPathExists=/home/slurm/etc/slurm.conf [Service] Type=forking EnvironmentFile=-/etc/sysconfig/slurmctld ExecStart=/home/slurm/sbin/slurmctld $SLURMCTLD_OPTIONS ExecReload=/bin/kill -HUP $MAINPID PIDFile=/var/run/slurm/slurmctld.pid LimitNOFILE=51200 LimitMEMLOCK=infinity LimitSTACK=infinity TasksMax=5120 [Install] WantedBy=multi-user.target |
- /usr/lib/systemd/system/slurmd.service
[Unit] Description=Slurm node daemon After=network.target munge.service ConditionPathExists=/home/slurm/etc/slurm.conf [Service] Type=forking EnvironmentFile=-/etc/sysconfig/slurmd ExecStart=/home/slurm/sbin/slurmd $SLURMD_OPTIONS ExecReload=/bin/kill -HUP $MAINPID PIDFile=/var/run/slurm/slurmd.pid KillMode=process LimitNOFILE=51200 LimitMEMLOCK=infinity LimitSTACK=infinity [Install] WantedBy=multi-user.target |
- /usr/lib/systemd/system/slurmdbd.service
[Unit] Description=Slurm Account store daemon After=network.target munge.service ConditionPathExists=/home/slurm/etc/slurmdbd.conf [Service] Type=forking EnvironmentFile=-/etc/sysconfig/slurmdbd ExecStart=/home/slurm/sbin/slurmdbd $SLURMCTLD_OPTIONS ExecReload=/bin/kill -HUP $MAINPID PIDFile=/var/run/slurm/slurmdbd.pid LimitNOFILE=51200 LimitMEMLOCK=infinity LimitSTACK=infinity TasksMax=5120 [Install] WantedBy=multi-user.target |
- 更改用户权限
chown -R slurm:slurm /home/slurm*
- 存储服务
systemctl enable slurmdbd.service
systemctl start slurmdbd.service
- 管理服务
systemctl enable slurmctld.service
systemctl start slurmctld.service
- 查看集群情况:
sacctmgr list cluster
- 计算服务(所有计算节点)
systemctl enable slurmd.service
systemctl start slurmd.service
- 查看所有资源
sinfo
到这里,计算集群就已经完成搭建了。为了更改的服务于用户,还需要统一安装一些软件,需要对这些软件进行管理,即涉及软件包管理仓库的建设(详见 人工智能高性能计算集群建设2 )。