概述
本文档面向具备 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 | unmunge
、chronyc tracking
、sinfo
、squeue
、sacct
。
运维与安全建议
- 不建议在生产禁用 SELinux;优先调整策略
- 对 Munge 密钥和数据库密码严格管理并定期轮换
- 使用防火墙仅开放必要端口并限制来源
- 使用集中身份管理(LDAP/FreeIPA)替代手工同步
- 为 slurmctld/slurmdbd 设计备份与恢复流程
可选:监控与扩展
- 推荐通过 Prometheus + Grafana 采集 Slurm 指标
- 对于高可用,可考虑 slurmctld 的主动/被动冗余设计(外部工具或 HA 方案)
结语
本文为在 Rocky Linux 9.4 上搭建小型 Slurm 集群的实践指南,覆盖从系统准备到 Slurm 部署与验证的关键步骤。根据实际环境(网络、安全与规模)调整配置并补充监控、备份与高可用设计。