概述

本文档面向具备 Linux 和系统管理基础的工程师,记录在 Rocky Linux 9.4 上部署一个小型 Slurm HPC 集群的端到端过程。目标拓扑为一个控制/管理节点(mu01)和若干计算节点(cu01-cu19)。内容涵盖:系统准备、网络与时间同步、共享存储、用户管理、Munge 认证、MariaDB(用于 slurmdbd)部署、Slurm 的编译/安装与配置、以及关键验证步骤与运维建议。

本文假定读者熟悉基本 Linux 命令、SSH、yum/DNF 包管理及系统服务操作。

步骤一:基础环境

  • 操作系统:Rocky Linux 9.4
  • 调度器:Slurm
  • 认证:Munge
  • 记账:MariaDB(SlurmDBD)
  • 共享存储:NFS
  • 构建工具:GCC、make、rpmbuild

系统与软件栈概览

  • 操作系统:Rocky Linux 9.4

  • 调度器:Slurm

  • 认证:Munge

  • 记账:MariaDB(SlurmDBD)

  • 共享存储:NFS

  • 构建工具:GCC、make、rpmbuild

  • 操作系统:Rocky Linux 9.4

  • 调度器:Slurm

  • 认证:Munge

  • 记账:MariaDB(SlurmDBD)

  • 共享存储:NFS

  • 构建工具:GCC、make、rpmbuild

1.1 操作系统安装

使用 Rocky Linux 9.4 最小/服务器镜像安装,按组织规范分区,保证 /var、/home、/opt 足够空间。建议启用 EPEL 源以方便后续安装工具。

1.2 网络与主机名

为每台机器配置静态 IP(nmtui/nmcli),保证主机名唯一且可解析(DNS 或 /etc/hosts)。示例 /etc/hosts(管理节点 mu01):

127.0.0.1   localhost localhost.localdomain
::1         localhost localhost.localdomain
192.168.8.100 mu01
192.168.8.101 cu01
192.168.8.102 cu02
...
192.168.8.119 cu19

1.3 防火墙与 SELinux 建议

测试或受控内网可临时关闭 firewalld,但生产环境应仅开放必要端口(Slurm: 6817/6818/6819,Munge,NFS,MariaDB 等)。

systemctl stop firewalld
systemctl disable firewalld

建议将 SELinux 置为 permissive 并逐步调整策略,而非直接禁用:

setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config

1.4 SSH 免密登录(推荐非 root 管理账号)

在管理节点为运维账号生成密钥并分发:

ssh-keygen -t rsa -b 4096 -C "admin@hpc"
for i in {1..19}; do printf "cu%02d\\n" "$i" >> nodes.txt; done
for host in $(cat nodes.txt); do ssh-copy-id admin@$host; done

推荐使用 Ansible/pssh 做批量运维,避免手工操作造成不一致。

1.5 时间同步(Chrony)

管理节点作为局域网 NTP 服务器,计算节点同步到管理节点。

管理节点 /etc/chrony.conf 示例:

allow 192.168.8.0/24
pool ntp.aliyun.com iburst

计算节点配置:

server 192.168.8.100 iburst

启动并验证:

systemctl enable --now chronyd
chronyc sources
chronyc tracking

步骤二:NFS 共享存储

在管理节点安装并启动 NFS:

yum install -y nfs-utils rpcbind

yum install -y nfs-utils rpcbind
systemctl enable --now rpcbind nfs-server

示例 /etc/exports

/home   192.168.8.0/24(rw,sync,no_root_squash)
/opt    192.168.8.0/24(rw,sync,no_root_squash)
/data   192.168.8.0/24(rw,sync,no_root_squash)

应用并检查:

exportfs -rav
showmount -e

客户端通过 /etc/fstab 或 systemd 持久化挂载(示例):

192.168.8.100:/home /home nfs defaults,_netdev 0 0
192.168.8.100:/opt  /opt  nfs defaults,_netdev 0 0
192.168.8.100:/data /data nfs defaults,_netdev 0 0

挂载并验证:

df -h /home /opt /data

mount -a
df -h /home /opt /data

安全提示:评估是否使用 no_root_squash,生产环境应谨慎配置。

步骤三:用户与组管理

优先推荐 LDAP/FreeIPA 做集中身份管理。若短期采用同步 /etc/* 文件,请通过自动化工具(rsync/Ansible)保证一致性并小心处理 /etc/shadow 的权限。

示例(临时):

done

useradd zhangsan
for host in $(cat nodes.txt); do
    rsync -a /etc/passwd /etc/group /etc/shadow /etc/gshadow root@$host:/etc/
done

生产环境应启用集中认证并结合 sudo/审计策略。

步骤四:Munge(主机间认证)

在所有节点安装 Munge 并使用相同的 munge.key

yum install -y munge munge-libs munge-devel

yum install -y munge munge-libs munge-devel
# 或从源码构建 RPM
# rpmbuild -tb munge-*.tar.xz

/usr/sbin/mungekey -f
for host in $(cat nodes.txt); do scp /etc/munge/munge.key root@$host:/etc/munge/; done
chown munge:munge /etc/munge/munge.key
chmod 400 /etc/munge/munge.key
systemctl enable --now munge
munge -n | unmunge

验证 Munge 在所有节点能正确认证。

步骤五:MariaDB(Slurm 记账)

在管理节点部署 MariaDB 并创建 slurm 账户:

yum install -y mariadb-server

yum install -y mariadb-server
systemctl enable --now mariadb
mysql_secure_installation

创建数据库与用户(替换为强密码):

CREATE DATABASE slurm_acct_db;
CREATE USER 'slurm'@'localhost' IDENTIFIED BY 'strong_password_here';
GRANT ALL PRIVILEGES ON slurm_acct_db.* TO 'slurm'@'localhost';
FLUSH PRIVILEGES;

若 slurmdbd 与数据库分离,请相应创建远程访问账户并通过防火墙限制来源。

步骤六:编译与安装 Slurm

前提回顾:时间同步、Munge 就绪、统一的 slurm 用户与共享配置存储(可选)。

下载源码并安装构建依赖:

yum -y install gcc make perl pam-devel python3 readline-devel lua-devel hwloc-devel

wget https://download.schedmd.com/slurm/slurm-24.05.2.tar.bz2
yum -y install gcc make perl pam-devel python3 readline-devel lua-devel hwloc-devel
rpmbuild -ta slurm-*.tar.bz2
cd ~/rpmbuild/RPMS/x86_64/
yum localinstall -y slurm-*.rpm

创建 slurm 用户与目录:

useradd -r -m -d /var/lib/slurm -s /sbin/nologin slurm
mkdir -p /var/spool/slurmd /var/spool/slurmctld /var/log/slurm
chown -R slurm:slurm /var/spool/slurmd /var/spool/slurmctld /var/log/slurm

配置并分发 /etc/slurm/slurm.conf(使用 configurator 或基于环境调整),示例关键项:

ClusterName=hpccluster
SlurmctldHost=mu01
ProctrackType=proctrack/cgroup
TaskPlugin=task/affinity
StateSaveLocation=/var/spool/slurmctld
SlurmUser=slurm
AccountingStorageType=accounting_storage/slurmdbd
JobAcctGatherType=jobacct_gather/linux
NodeName=mu01 CPUs=24 RealMemory=94000
NodeName=cu[01-19] CPUs=24 RealMemory=94000
PartitionName=CU Nodes=cu[01-19] Default=YES MaxTime=INFINITE State=UP

分发配置并设置权限:

for host in $(cat nodes.txt mu01); do scp /etc/slurm/slurm.conf root@$host:/etc/slurm/; done
chown slurm:slurm /etc/slurm/slurm.conf

启用 cgroup 支持(/etc/slurm/cgroup.conf)并启动服务:

ConstrainCores=yes
ConstrainDevices=yes
ConstrainRAMSpace=yes
ConstrainSwapSpace=yes
systemctl enable --now slurmctld slurmd

配置 slurmdbd.conf 并连接 MariaDB:

AuthType=auth/munge
DbdHost=localhost
DbdPort=6819
StorageHost=127.0.0.1
StorageUser=slurm
StoragePass=strong_password_here
StorageLoc=slurm_acct_db

启动并验证 slurmdbd:

systemctl enable --now slurmdbd
systemctl status slurmdbd
sacctmgr show cluster

启动与验证集群

systemctl enable --now slurmdbd slurmctld
# 在计算节点启动 slurmd(可使用 pssh/ansible)
pssh -h nodes.txt "systemctl enable --now slurmd"
sinfo
srun -N2 --ntasks-per-node=1 hostname

常用验证:munge -n | unmungechronyc trackingsinfosqueuesacct

运维与安全建议

  • 不建议在生产禁用 SELinux;优先调整策略
  • 对 Munge 密钥和数据库密码严格管理并定期轮换
  • 使用防火墙仅开放必要端口并限制来源
  • 使用集中身份管理(LDAP/FreeIPA)替代手工同步
  • 为 slurmctld/slurmdbd 设计备份与恢复流程

可选:监控与扩展

  • 推荐通过 Prometheus + Grafana 采集 Slurm 指标
  • 对于高可用,可考虑 slurmctld 的主动/被动冗余设计(外部工具或 HA 方案)

结语

本文为在 Rocky Linux 9.4 上搭建小型 Slurm 集群的实践指南,覆盖从系统准备到 Slurm 部署与验证的关键步骤。根据实际环境(网络、安全与规模)调整配置并补充监控、备份与高可用设计。