在Slurm集群中,节点状态显示为 drain
表示该节点被管理员手动设置为“排水”模式,通常用于临时禁止新任务分配,但允许已运行的任务继续执行。以下是可能的原因及解决方法:
bash复制# 查看所有节点状态sinfo -N -l# 查看具体节点的详细信息(替换<node_name>)scontrol show node <node_name>
输出关键字段:
State=drain*
:*
表示节点被标记为drain
,但仍有作业运行。
Reason=
:显示具体原因(如Manual drain by admin
、Not responding
)。
bash复制# 恢复节点为可用状态scontrol update NodeName=<node_name> State=RESUME# 或直接使用简写scontrol undrain <node_name>
先修复问题(如网络恢复、清理残留进程)。
再恢复节点:
bash复制scontrol update NodeName=<node_name> State=RESUME Reason="Fixed"
如果节点状态异常且无法自动恢复:
bash复制scontrol update NodeName=<node_name> State=RESUME Flags=FORCE
自动监控:配置 SlurmEmail
或 Prometheus+Alertmanager
监听 drain
状态。
资源预留:在 slurm.conf
中设置 OverSubscribe=NO
避免资源耗尽。
定期维护:使用脚本自动检测异常节点并报警:
bash复制# 检查所有drain状态的节点sinfo -R | grep drain
如果节点反复进入 drain
状态:
bash复制# 查看Slurm控制器的日志(路径因安装方式不同而异)tail -f /var/log/slurm/slurmctld.log# 检查节点响应的*后记录sacct -j <job_id> --nodelist=<node_name> -o jobid,state,exitcode
bash复制# 1. 查看节点状态sinfo -N -l | grep drain# 2. 假设节点node01状态为drain,查看原因scontrol show node node01 | grep -E "State|Reason"# 3. 恢复节点scontrol undrain node01# 4. 验证状态sinfo -N -l | grep node01
drain
是Slurm的保护机制,需先排查原因再恢复。
管理员命令:scontrol drain/undrain
是关键操作。
日志分析:slurmctld.log
和 sacct
能定位根本原因。