Slurm 核心组件与启动原理
Slurm主要由三个守护进程(daemon)组成:
-
slurmctld:中央管理守护进程,运行在管理节点上。负责监控工作、调度作业、管理节点。
-
slurmd:计算节点守护进程,运行在每个计算节点上。负责接收来自
slurmctld
的任务,执行作业,并报告状态。 -
slurmdbd(可选):数据库守护进程,用于将作业记账信息写入数据库(如MySQL)。通常也运行在管理节点。
启动顺序遵循自下而上的原则:先启动所有计算节点上的slurmd
,最后启动管理节点上的slurmctld
。
一、启动Slurm集群
第1步:启动计算节点(在所有计算节点上执行)
登录到每个计算节点,启动slurmd
服务。建议使用系统服务管理命令(如systemd
)。
# 使用 systemctl 启动并启用开机自启(推荐方式)
sudo systemctl start slurmd
sudo systemctl enable slurmd# 检查状态,确认状态为 active (running)
sudo systemctl status slurmd
-
关键点:必须确保所有计算节点的
slurmd
服务都成功启动。
第2步:启动管理节点(在管理节点上执行)
在所有计算节点的slurmd
都运行起来后,再启动主管理服务。
# 启动并启用 slurmctld
sudo systemctl start slurmctld
sudo systemctl enable slurmctld# 检查状态
sudo systemctl status slurmctld# (如果配置了数据库)启动并启用 slurmdbd
sudo systemctl start slurmdbd
sudo systemctl enable slurmdbd
sudo systemctl status slurmdbd
第3步:验证集群状态
在管理节点上使用Slurm命令验证集群是否就绪。
# 查看所有节点状态,应均为 idle 或 alloc(如果已有作业)
sinfo# 显示所有节点的详细状态
scontrol show nodes# 查看分区状态
scontrol show partitions
如果sinfo
命令能正常返回且节点状态正确,说明集群启动成功。
二、停止Slurm集群
停止顺序与启动相反,遵循自上而下的原则:先停止管理节点,再停止计算节点。
第1步:停止管理节点(在管理节点上执行)
# 停止管理服务
sudo systemctl stop slurmctld
sudo systemctl stop slurmdbd # 如果正在运行
第2步:停止计算节点(在所有计算节点上执行)
# 在每个计算节点上执行
sudo systemctl stop slurmd
三、重启Slurm集群(常见维护操作)
通常是在修改了配置文件(slurm.conf
)后需要进行的操作。
方法A:优雅重启(推荐,不影响运行中的作业)
-
重新加载配置(在管理节点上):
# 让 slurmctld 重新读取配置文件 scontrol reconfig# 让每个计算节点的 slurmd 重新读取配置 scontrol reconfigure
注意:此方法不会中断正在运行的作业。
方法B:完全重启(配置重大变更时使用)
按照停止集群的顺序完全停止所有服务,然后再按照启动集群的顺序重新启动。
四、故障排查与日志查看
如果启动失败,查看日志是第一步。
-
管理节点日志(
slurmctld
):# 默认日志路径 sudo tail -f /var/log/slurm/slurmctld.log
-
计算节点日志(
slurmd
):# 登录到出问题的计算节点查看 sudo tail -f /var/log/slurm/slurmd.log
-
数据库日志(
slurmdbd
,如果配置了):sudo tail -f /var/log/slurm/slurmdbd.log
-
检查配置文件语法(在管理节点上):
# 验证主配置文件是否正确 sudo slurmctld -T -v sudo slurmd -T -v
-
-T
选项用于测试模式,只检查配置而不启动服务。 -
-v
选项显示更详细的信息。
-
简易启动检查清单
-
前置条件:确保所有节点的
slurm.conf
配置文件一致;确保管理节点和计算节点之间主机名解析(/etc/hosts
或DNS)和SSH互信已正确配置。 -
启动计算节点:在所有计算节点上执行
sudo systemctl start slurmd
。 -
启动管理节点:在管理节点上执行
sudo systemctl start slurmctld
(和slurmdbd
)。 -
验证状态:在管理节点上运行
sinfo
,确认所有节点状态为idle
。 -
提交测试作业:运行
srun -N 1 hostname
进行冒烟测试。