1. 环境准备与系统配置在开始构建Slurm集群之前我们需要确保所有节点都处于干净、一致的初始状态。我建议使用Ubuntu Server 22.04 LTS版本这个长期支持版本经过充分测试稳定性有保障。实际部署中发现不同Linux发行版间的软件包差异可能导致各种兼容性问题因此统一环境非常重要。首先在所有节点执行系统更新sudo apt update sudo apt upgrade -y sudo apt install -y build-essential git curl网络规划是集群部署的关键环节。根据我的项目经验建议采用双网卡方案一个网卡如eth0用于外网通信另一个网卡如eth1专门用于集群内部通信。这种隔离能有效避免计算任务对管理网络的干扰。在/etc/netplan/目录下配置静态IP时特别注意网关和DNS的设置要正确否则会导致节点间通信失败。2. 基础服务部署2.1 NFS共享存储配置计算集群通常需要共享存储空间来存放数据和软件。我选择NFS是因为它的简单高效实测在千兆内网环境下传输速度能达到900Mbps以上。先在控制节点安装NFS服务端sudo apt install -y nfs-kernel-server编辑/etc/exports文件时建议加上no_root_squash选项以便root用户操作但要注意这会有安全风险。我在生产环境中会额外配置防火墙规则限制访问/software 192.168.1.0/24(rw,sync,no_root_squash)客户端挂载时遇到过坑如果NFS版本不匹配会导致挂载失败。强制使用NFSv4可以解决sudo mount -t nfs4 192.168.1.1:/software /software2.2 统一用户认证Slurm需要所有节点有相同的用户UID/GID。我测试过三种方案LDAP、NIS和手动同步。对于中小集群NIS是最简单的选择。先在控制节点安装sudo apt install -y nis关键配置点在/etc/nsswitch.conf必须确保passwd、shadow、group行包含nispasswd: files nis shadow: files nis group: files nis3. Slurm核心组件安装3.1 Munge认证服务Munge是Slurm的认证基础所有节点必须使用相同的密钥。我遇到过因为文件权限导致服务启动失败的情况正确的权限设置应该是chown -R munge:munge /etc/munge /var/lib/munge /var/log/munge chmod 700 /etc/munge chmod 400 /etc/munge/munge.key测试Munge是否正常工作munge -n | unmunge3.2 Slurm软件包安装Ubuntu仓库中的Slurm版本可能较旧。我推荐从源码编译安装最新版wget https://download.schedmd.com/slurm/slurm-22.05.9.tar.bz2 tar xjf slurm-22.05.9.tar.bz2 cd slurm-22.05.9 ./configure --prefix/usr/local make -j8 sudo make install4. 集群配置与优化4.1 slurm.conf详解配置文件是Slurm的核心我总结了几点关键配置经验ControlMachine必须写主机名而非IPSlurmUser建议设为root避免权限问题内存配置要预留5%给系统典型配置示例ClusterNamemycluster ControlMachinecontrol1 SlurmUserroot NodeNamenode[1-7] CPUs16 RealMemory64000 PartitionNamecompute Nodesnode[1-7] DefaultYES4.2 资源监控与调度使用sacct命令可以查看作业历史记录。我发现配置AccountingStorageTypeaccounting_storage/slurmdbd能更好地跟踪资源使用情况sacct -j 123 --formatJobID,JobName,AllocCPUS,Elapsed5. 常见问题排查部署过程中最常见的三个问题节点状态显示为DOWN检查munge服务和网络连通性作业卡在PENDING状态用scontrol show job查看原因内存不足导致作业失败调整RealMemory参数日志查看技巧tail -f /var/log/slurmctld.log # 控制节点日志 tail -f /var/log/slurmd.log # 计算节点日志6. 生产环境建议经过多个项目实践我总结了几点生产环境优化建议配置cgroups限制资源使用设置合理的作业时间限制定期清理/tmp目录使用PrometheusGranfa监控集群状态性能调优参数示例ProctrackTypeproctrack/cgroup TaskPlugintask/cgroup最后提醒一点所有配置变更后一定要按顺序重启服务sudo systemctl restart munge sudo systemctl restart slurmd sudo systemctl restart slurmctld