TT Lab
开始
学习 学习路径 课程

HPC 与 Slurm

诊断一个坏掉的集群

在 TT Lab 中继续学习

目标

拿到损坏的 Slurm 配置和日志后,分别确定四个原因,修复它们,并留下恢复步骤和 RCA 报告。

为什么重要

Slurm 故障的特点是一行日志就把原因说清楚了。问题在于,如果不知道查找这一行的顺序,就要花上好几天。顺序是固定的——用 sinfo 缩小范围,在 slurmctld.log 中读出原因,再到配置文件中确认那一行。

尤其重要的是区分 munge 错误的两种类型。Expired credential 是时钟问题,要去看 NTP;Invalid credential 是密钥问题,要比对密钥文件。这是完全不同的处理方式。

夹具位于 /opt/fixtures/slurm/broken/。共有 slurm.conf、gres.conf、slurmctld.log、sinfo.txt 四个文件。

步骤

  1. 创建 /root/rca 目录,把 sinfo.txt 中状态不是正常(idle/alloc/mix)的、互不相同的节点名称,每行一个写入 /root/rca/bad-nodes.txt。
  2. 找出节点定义不一致的地方,用两行写入 /root/rca/node.txt。 NODE=<문제 노드 이름> / KEY=<불일치가 난 설정 키 이름>(占位符依次为问题节点名称与出现不一致的配置键名称)
  3. 确定 munge 认证失败的类型,用两行写入 /root/rca/munge.txt。 KIND=<expired|invalid> / CAUSE=<clock|key>
  4. 把分区引用了但没有定义的节点名称,用一行写入 /root/rca/partition.txt。
  5. 把 GRES 数量不一致的情况,用两行写入 /root/rca/gres.txt。 CONFIGURED=<slurm.conf 가 선언한 그 노드의 GPU 수> / REPORTED=<gres.conf 가 실제로 가리키는 장치 수>(占位符依次为 slurm.conf 为该节点声明的 GPU 数量与 gres.conf 实际指向的设备数量)
  6. 提交已修复全部四个问题的 /root/rca/slurm.conf 和 /root/rca/gres.conf。把问题节点的 CPUs 改成与实际一致,把分区节点列表中不存在的节点删掉,并让 GRES 数量一致。(munge 是运维问题而不是配置文件问题,所以这些文件中不涉及。)
  7. 编写 /root/rca/recovery.sh。其中必须按顺序包含以下两类命令。
    • 使配置变更生效的命令(scontrol reconfigure)
    • 让掉出的节点恢复的命令(scontrol update NodeName=... State=RESUME)
  8. 把 /root/rca/report.txt 创建为下面 6 行。 CAUSE1=cpus-mismatch / CAUSE2=munge-<3번의 CAUSE 값> / CAUSE3=unknown-node / CAUSE4=gres-count / BAD_NODES=<1번 파일의 줄 수> / FIXED=yes(占位符依次为第 3 步中的 CAUSE 值与第 1 步文件的行数)

参考

整理症状

创建 /root/rca 目录,把 sinfo.txt 中状态不是正常(idle/alloc/mix)的、互不相同的节点名称,每行一个写入 /root/rca/bad-nodes.txt。

请数一数 sinfo 输出中状态不正常的节点。状态字符串要准确写出。

找出节点定义不一致

找出节点定义不一致的地方,用两行写入 /root/rca/node.txt。 NODE=<문제 노드 이름> / KEY=<불일치가 난 설정 키 이름>(占位符依次为问题节点名称与出现不一致的配置键名称)

日志中写着哪个节点因为什么原因掉出了。请在配置文件中确认该节点的那一行。

确定认证失败的类型

确定 munge 认证失败的类型,用两行写入 /root/rca/munge.txt。 KIND=<expired|invalid> / CAUSE=<clock|key>

munge 错误有两种类型。请直接看日志中的措辞,判断属于哪一种。

引用了未定义的节点

把分区引用了但没有定义的节点名称,用一行写入 /root/rca/partition.txt。

请把分区的节点列表与实际定义的节点作比较。必须展开范围写法。

GRES 数量不一致

把 GRES 数量不一致的情况,用两行写入 /root/rca/gres.txt。 CONFIGURED=<slurm.conf 가 선언한 그 노드의 GPU 수> / REPORTED=<gres.conf 가 실제로 가리키는 장치 수>(占位符依次为 slurm.conf 为该节点声明的 GPU 数量与 gres.conf 实际指向的设备数量)

分别数出两个配置文件中的数量并作比较。日志中也打印了数字。

提交修复版本

提交已修复全部四个问题的 /root/rca/slurm.conf 和 /root/rca/gres.conf。把问题节点的 CPUs 改成与实际一致,把分区节点列表中不存在的节点删掉,并让 GRES 数量一致。(munge 是运维问题而不是配置文件问题,所以这些文件中不涉及。)

四个问题都必须修复。可以复用上一个实验中编写的检查脚本。

编写恢复步骤

编写 /root/rca/recovery.sh。其中必须按顺序包含以下两类命令。

让配置生效和让节点恢复是两条不同的命令。顺序也很重要。

RCA 报告

把 /root/rca/report.txt 创建为下面 6 行。 CAUSE1=cpus-mismatch / CAUSE2=munge-<3번의 CAUSE 값> / CAUSE3=unknown-node / CAUSE4=gres-count / BAD_NODES=<1번 파일의 줄 수> / FIXED=yes(占位符依次为第 3 步中的 CAUSE 值与第 1 步文件的行数)

用规定的键整理出四个原因。值必须是前面步骤中确定下来的内容。