人工智能高性能计算集群建设

计算集群涉及的内容较多,建设过程也较为复杂,但在人工智能盛行的今天又尤为重要。这篇文章将从基础开始搭建计算集群(这里不涉及虚拟化和云计算内容),仅供大家参考,若有不当敬请留言。

目录

1. 服务器规划

1.1. 规划服务器用途

1.2. 查看操作系统类型

1.3. 配置主机名与IP地址映射

1.4. 设置无密码访问

2. 共享存储配置

2.1. 基于NFS

2.1.1 存储节点

2.1.2 存储节点

3. 通用配置

3.1. 创建全局账号

3.2. 换成阿里云镜像

3.3. 安装epel-release

3.4. 配置防火墙

3.5. 设置时间同步 

3.5.1. 服务器端

3.5.2. 客户端

 3.6. 安装数据库

3.6.1. 服务端

3.6.1.1. 安装服务

3.6.1.2. 重启服务设置密码

3.6.1.3. 修改配置

3.6.2. 计算节点

3.7. 计算设备

4. LDAP统一用户认证

4.1. 认证原理介绍

4.2. 服务端配置

4.2.1. 安装OpenLDAP软件和依赖

4.2.2. 修改OpenLDAP默认参数

4.2.3. 配置OpenLDAP数据库

 4.2.4. 设置OpenLDAP管理员密码

4.2.5. 导入OpenLDAP全部schema

 4.2.6. 创建基本管理员和用户信息

4.2.7. 测试域名

4.3. 客户端配置

4.3.1. 安装软件

4.3.2. 修改SSH配置

4.3.3. 修改ldap配置

4.3.4. 可视化配置

4.3.5. 验证配置sssd.conf

4.3.6. 使用相应的openldap 认证

​​​​​​​4.3.7. 重启和设置服务

​​​​​​​4.3.8. 测试openldap连接

​​​​​​​4.4. 授权用户

4.4.1. 授权脚本

4.4.2. 编辑授权脚本

5. 配置SLURM系统 

5.1. Munge安装与配置

​​​​​​​5.1.1. Munge安装

​​​​​​​5.1.2. 创建munge.key

​​​​​​​5.1.3. 配置与启动Munge

5.2. SLURM安装

5.2.1. 直接安装SLURM依赖

5.2.2. SLURM存储配置

​​​​​​​5.2.3. SLURM安装方式一:包安装

5.3.3. SLURM安装方式二:源码安装

5.3.3.1. 下载源码

5.3.3.2. ​​​​​​​配置(重点注意)

​​​​​​​5.3.3.3. 编译与安装

5.3. SLURM配置与启动

5.3.1. 环境配置

5.3.2. 文件配置

​​​​​​​5.3.2.1. slurmdbd.conf

​​​​​​​5.3.2.2. node.conf

​​​​​​​5.3.2.3. partition.conf

​​​​​​​5.3.2.4. gres.conf

​​​​​​​5.3.2.5. slurm.conf

​​​​​​​5.3.3. 配置与启动服务


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.112.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 VGAnvidia-smi
海光

区分不同型号:

lspci -nnD | grep -i disp

lspci -nnD | grep -i dcu

rocm-smi
华为lspci -nnD | grep -i acceleratorsnpu-smi info
百度昆仑lspci -nnD | grep -i acceleratorsxpu_smi
寒武纪lspci -nnD | grep -i acceleratorscnmon
...

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 )​​​​​​​。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值