SLURM集群工作节点状态UNKNOWN 控制节点连接故障排查
SLURM工作节点UNKNOWN状态排查方案
问题背景
当前搭建的SLURM小型集群配置、现象如下:
- 控制节点同时作为计算节点使用,
/etc/slurm/slurm.conf核心配置:
NodeName=controller,node[01-02] RealMemory=250000 Sockets=1 CoresPerSocket=32 ThreadsPerCore=2 State=UNKNOWN PartitionName=compute Nodes=ALL Default=YES MaxTime=INFINITE State=UP
- 执行
sinfo返回结果显示node01、node02状态为unknown,controller状态正常为idle - 工作节点执行
slurmd -C可正常返回硬件信息,各节点配置文件一致、munge认证正常、已开放TCP 6817/6818端口
逐步骤排查操作
- 检查工作节点slurmd服务状态
节点状态UNKNOWN的最常见诱因是slurmd服务未正常运行、启动后崩溃。在node01、node02上执行以下命令检查服务状态:systemctl status slurmd
若服务未处于运行状态,先执行systemctl start slurmd启动服务,同时配置systemctl enable slurmd设置开机自启。如果服务启动失败,直接读取命令输出的报错信息定位,常见问题包括配置文件权限错误、SLURM所需的spool目录不存在、运行用户权限不足。 - 核对主机名与解析配置
SLURM节点注册对主机名匹配要求严格,需满足三个条件:- 每个节点执行
hostname返回的字符串,和slurm.conf中配置的NodeName完全一致,不能带多余的域名后缀 - 控制节点可正确解析node01、node02的IP地址,工作节点可正确解析controller的IP地址
- 禁止将节点正式主机名映射到127.0.0.1的本地回环地址
可分别在控制节点执行ping node01、ping node02,工作节点执行ping controller验证连通性,若用/etc/hosts做静态解析,需保证所有节点的hosts条目完全一致。
- 每个节点执行
- 核对节点硬件参数匹配度
当前slurm.conf中配置的所有节点RealMemory为250000,但slurmd -C返回工作节点实际内存为257655,若配置值与实际上报值偏差过大,SLURM会拒绝节点注册。可将slurm.conf中NodeName行的硬件参数调整为与slurmd -C输出一致,RealMemory可设置为略小于实际值(如257000)避免系统预留内存触发OOM。修改配置后必须同步到所有节点,依次在控制节点执行systemctl restart slurmctld、所有工作节点执行systemctl restart slurmd生效。 - 核对SLURM用户UID/GID一致性
跨节点部署的SLURM要求所有节点上slurm用户的UID、slurm组的GID数值完全一致,否则会出现munge认证表面正常、但socket通信/文件读写权限不足的问题。在所有节点执行id slurm核对UID、GID数值,若存在不一致统一调整为相同值后重启所有SLURM服务。 - 实际验证端口连通性
不要仅依赖防火墙规则判断端口开放,需实际验证连通性:在控制节点执行nc -zv node01 6818、nc -zv node02 6818,在工作节点执行nc -zv controller 6817,确认端口可正常建立连接,无中间网络ACL、本机安全策略拦截。 - 前台启动slurmd查看调试日志
若以上步骤均未定位问题,直接通过前台调试模式获取明确报错:- 在出问题的工作节点停止运行中的slurmd服务:
systemctl stop slurmd - 以前台debug模式启动slurmd,输出详细日志:
slurmd -D -vvc - 另开终端在控制节点重启slurmctld服务:
systemctl restart slurmctld - 观察工作节点前台打印的日志,会明确输出注册失败的具体原因,包括参数校验失败、认证错误、权限不足等具体指向。
- 在出问题的工作节点停止运行中的slurmd服务:
注意:每次修改slurm.conf配置后,必须将更新后的配置文件同步到集群所有节点,按先重启控制节点slurmctld、再重启工作节点slurmd的顺序操作,配置才会正常加载。
内容的提问来源于stack exchange,提问作者Jamie Mair
相关产品推荐
相关产品推荐

