TT Lab
はじめる
学ぶ 学習パス コース

HPCとSlurm

壊れたクラスタを診断する

TT Labで続きを見る

目標

壊れたSlurmの設定とログを受け取り、4つの原因をそれぞれ特定して修正し、復旧手順とRCAレポートを残します。

なぜ重要なのか

Slurmの障害の特徴は、ログの1行が原因をすべて語っていることです。問題は、その1行を探す順序を知らないと何日もかかる点です。順序は決まっています。sinfoで範囲を絞り、slurmctld.logで理由を読み、設定ファイルでその行を確認します。

特にmungeエラーの2種類を区別することが重要です。Expired credentialは時計の問題なのでNTPを確認し、Invalid credentialはキーの問題なのでキーファイルを比較します。まったく異なる対応です。

フィクスチャは/opt/fixtures/slurm/broken/にあります。slurm.conf、gres.conf、slurmctld.log、sinfo.txtの4つのファイルです。

ステップ

  1. /root/rcaディレクトリを作成し、sinfo.txtから正常(idle/alloc/mix)ではない状態の、異なるノード名を1行に1つずつ/root/rca/bad-nodes.txtに書いてください。
  2. ノード定義の不一致を見つけて、/root/rca/node.txtに2行で書いてください。 NODE=<문제 노드 이름> / KEY=<불일치가 난 설정 키 이름>(プレースホルダーは、問題のノード名と、不一致が起きた設定キーの名前です)
  3. mungeの認証失敗を特定して、/root/rca/munge.txtに2行で書いてください。 KIND=<expired|invalid> / CAUSE=<clock|key>
  4. パーティションが参照しているのに定義されていないノード名を、1行で/root/rca/partition.txtに書いてください。
  5. GRESの個数の不一致を、/root/rca/gres.txtに2行で書いてください。 CONFIGURED=<slurm.conf 가 선언한 그 노드의 GPU 수> / REPORTED=<gres.conf 가 실제로 가리키는 장치 수>(プレースホルダーは、slurm.confが宣言したそのノードのGPU数と、gres.confが実際に指すデバイス数です)
  6. 4つの問題をすべて直した/root/rca/slurm.confと/root/rca/gres.confを提出してください。問題のノードのCPUsを実際の値に合わせ、パーティションのノード一覧から存在しないノードを外し、GRESの個数を一致させてください。(mungeは設定ファイルではなく運用上の問題なので、これらのファイルでは扱いません。)
  7. /root/rca/recovery.shを作成してください。次の2種類のコマンドが、順番どおりに入っている必要があります。
    • 設定の変更を反映するコマンド(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)ではない状態の、異なるノード名を1行に1つずつ/root/rca/bad-nodes.txtに書いてください。

sinfoの出力から、正常ではない状態のノードを数えてみてください。状態の文字列を正確に書きます。

ノード定義の不一致を見つける

ノード定義の不一致を見つけて、/root/rca/node.txtに2行で書いてください。 NODE=<문제 노드 이름> / KEY=<불일치가 난 설정 키 이름>(プレースホルダーは、問題のノード名と、不一致が起きた設定キーの名前です)

ログに、どのノードがどんな理由で外れたかが書かれています。設定ファイルで、そのノードの行を確認してください。

認証失敗を特定する

mungeの認証失敗を特定して、/root/rca/munge.txtに2行で書いてください。 KIND=<expired|invalid> / CAUSE=<clock|key>

mungeのエラーには2種類あります。ログの文言をそのまま見て、どちらかを判定してください。

定義されていないノードの参照

パーティションが参照しているのに定義されていないノード名を、1行で/root/rca/partition.txtに書いてください。

パーティションのノード一覧と、実際に定義されているノードを比較してください。範囲表記を展開する必要があります。

GRESの個数の不一致

GRESの個数の不一致を、/root/rca/gres.txtに2行で書いてください。 CONFIGURED=<slurm.conf 가 선언한 그 노드의 GPU 수> / REPORTED=<gres.conf 가 실제로 가리키는 장치 수>(プレースホルダーは、slurm.confが宣言したそのノードのGPU数と、gres.confが実際に指すデバイス数です)

2つの設定ファイルの個数をそれぞれ数えて比較します。ログにも数字が出ています。

修正版を提出する

4つの問題をすべて直した/root/rca/slurm.confと/root/rca/gres.confを提出してください。問題のノードのCPUsを実際の値に合わせ、パーティションのノード一覧から存在しないノードを外し、GRESの個数を一致させてください。(mungeは設定ファイルではなく運用上の問題なので、これらのファイルでは扱いません。)

4つの問題をすべて直す必要があります。前のラボで作成した検証スクリプトを再利用できます。

復旧手順を作成する

/root/rca/recovery.shを作成してください。次の2種類のコマンドが、順番どおりに入っている必要があります。

設定の反映とノードの復帰は、別々のコマンドです。順序も重要です。

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のファイルの行数です)

4つの原因を、決められたキーで整理します。値は、前のステップで特定したものである必要があります。