AWS ParallelCluster slurmctld.service 起動時 “Remove /var/spool/slurm.state/clustername” のエラーでサービスを起動できないときの原因と対応方法

AWS ParallelCluster の ClusterName を変更して Slurm DB へ登録する際のエラー対応例の紹介です。
2022.07.15

Slurm の実行履歴保存用のデータベースに2台目以降の ParallelCluster(Head Node)を接続するとき、名称の重複を避けるためクラスター名(ClusterName )を変更してからDBに登録したいです。今回は ClusterNameを変更したとき遭遇したエラーメッセージと、対応内容を紹介します。

ParallelCluster とデータベースの連携方法は以下のリンクをご参照ください。

原因と対応方法まとめ

エラーメッセージ

変更後の新しい ClusterName(parallelcluster2) を反映させるため、slurmctldサービスを再起動すると失敗し、Remove /var/spool/slurm.state/clustername to override this safety checkのメッセージが出力されます。

$ sudo systemctl status slurmctld
● slurmctld.service - Slurm controller daemon
     Loaded: loaded (/etc/systemd/system/slurmctld.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Fri 2022-07-15 01:06:19 UTC; 13min ago
    Process: 3693 ExecStart=/opt/slurm/sbin/slurmctld -D $SLURMCTLD_OPTIONS (code=exited, status=1/FAILURE)
   Main PID: 3693 (code=exited, status=1/FAILURE)

Jul 15 01:06:19 ip-10-0-1-216 systemd[1]: Started Slurm controller daemon.
Jul 15 01:06:19 ip-10-0-1-216 slurmctld[3693]: slurmctld: fatal: CLUSTER NAME MISMATCH.
Jul 15 01:06:19 ip-10-0-1-216 slurmctld[3693]: slurmctld has been started with "ClusterName=parallelcluster2", but read>
Jul 15 01:06:19 ip-10-0-1-216 slurmctld[3693]: Running multiple clusters from a shared StateSaveLocation WILL CAUSE COR>
Jul 15 01:06:19 ip-10-0-1-216 slurmctld[3693]: Remove /var/spool/slurm.state/clustername to override this safety check >
Jul 15 01:06:19 ip-10-0-1-216 systemd[1]: slurmctld.service: Main process exited, code=exited, status=1/FAILURE
Jul 15 01:06:19 ip-10-0-1-216 systemd[1]: slurmctld.service: Failed with result 'exit-code'.

対応方法

変更前の ClusterName(parallelcluster) が書き込まれた一時ファイル(/var/spool/slurm.state/clustername)を削除し、slurmctldサービスを再起動すると解消します。

sudo rm /var/spool/slurm.state/clustername
sudo systemctl restart slurmctld
sudo systemctl status slurmctld

原因

変更前の ClusterName(parallelcluster) が書き込まれた一時ファイルが存在しているためでした。

/var/spool/slurm.state/clustername

$ sudo cat /var/spool/slurm.state/clustername
parallelcluster

切り分けの過程

DB に登録するクラスター名を変更したいため、/opt/slurm/etc/slurm.confClusterNameを編集してparallelcluster2という名前にしました。

/opt/slurm/etc/slurm.conf より抜粋

# CLUSTER SETTINGS
ClusterName=parallelcluster2
SlurmUser=slurm
SlurmctldPort=6820-6829

sacctmgr コマンドでクラスター名(parallelcluster2)を DB に登録します。

$ sudo /opt/slurm/bin/sacctmgr add cluster parallelcluster2

設定を反映するために slurmctld サービスを再起動しました。

$ sudo systemctl restart slurmctld

一瞬起動してすぐにサービスが落ちます。1分ほどおいてから確認してサービスが起動していれば問題ありません。その場合は別の原因が考えられるため本記事では回答は得られません。以降は一例としてなにか参考になる部分もあるかもしれません。

$ sudo systemctl status slurmctld
● slurmctld.service - Slurm controller daemon
     Loaded: loaded (/etc/systemd/system/slurmctld.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Fri 2022-07-15 01:06:19 UTC; 13min ago
    Process: 3693 ExecStart=/opt/slurm/sbin/slurmctld -D $SLURMCTLD_OPTIONS (code=exited, status=1/FAILURE)
   Main PID: 3693 (code=exited, status=1/FAILURE)

Jul 15 01:06:19 ip-10-0-1-216 systemd[1]: Started Slurm controller daemon.
Jul 15 01:06:19 ip-10-0-1-216 slurmctld[3693]: slurmctld: fatal: CLUSTER NAME MISMATCH.
Jul 15 01:06:19 ip-10-0-1-216 slurmctld[3693]: slurmctld has been started with "ClusterName=parallelcluster2", but read>
Jul 15 01:06:19 ip-10-0-1-216 slurmctld[3693]: Running multiple clusters from a shared StateSaveLocation WILL CAUSE COR>
Jul 15 01:06:19 ip-10-0-1-216 slurmctld[3693]: Remove /var/spool/slurm.state/clustername to override this safety check >
Jul 15 01:06:19 ip-10-0-1-216 systemd[1]: slurmctld.service: Main process exited, code=exited, status=1/FAILURE
Jul 15 01:06:19 ip-10-0-1-216 systemd[1]: slurmctld.service: Failed with result 'exit-code'.

systemctlサービスが停止しているとよく使うコマンドが使えない(タイムアウトします)ため気付くかと思います。

$ sbatch -q debug test.sh
sbatch: error: Batch job submission failed: Unable to contact slurm controller (connect failure)

$ sinfo
slurm_load_partitions: Unable to contact slurm controller (connect failure)

原因

/var/spoo/配下の一時ファイルが怪しいです。

Jul 15 01:06:19 ip-10-0-1-216 slurmctld[3693]: Remove /var/spool/slurm.state/clustername to override this safety check >

/var/spool/slurm.state/clustername ファイルに変更前のクラスター名(parallelcluster)が書き込まれていました。

/var/spool/slurm.state/clustername

$ sudo cat /var/spool/slurm.state/clustername
parallelcluster

対応

該当ファイルを削除します。

$ sudo rm /var/spool/slurm.state/clustername

slurmctldサービスを再起動すると今度はすぐに落ちません。

$ sudo systemctl restart slurmctld
$ sudo systemctl status slurmctld
● slurmctld.service - Slurm controller daemon
     Loaded: loaded (/etc/systemd/system/slurmctld.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-07-15 01:25:23 UTC; 10s ago
   Main PID: 4015 (slurmctld)
      Tasks: 18 (limit: 1116)
     Memory: 3.5M
     CGroup: /system.slice/slurmctld.service
             ├─4015 /opt/slurm/sbin/slurmctld -D
             └─4016 slurmctld: slurmscriptd

Jul 15 01:25:23 ip-10-0-1-216 systemd[1]: Started Slurm controller daemon.
Jul 15 01:25:24 ip-10-0-1-216 slurmctld[4015]: slurmctld: No memory enforcing mechanism configured.
Jul 15 01:25:24 ip-10-0-1-216 slurmctld[4015]: slurmctld: No parameter for mcs plugin, default values set
Jul 15 01:25:24 ip-10-0-1-216 slurmctld[4015]: slurmctld: mcs: MCSParameters = (null). ondemand set.

削除したファイルと同じ名前の一時ファイルが生成されているため中身を確認します。新しく設定した ClusterName(parallelcluster2)が書き込まれていました。

$ sudo cat /var/spool/slurm.state/clustername
parallelcluster2

slurmctldサービスが起動しているため、よく使うコマンドも実行できます。

$ sinfo
PARTITION   AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug*         up   infinite     10  idle~ debug-dy-debug-[1-10]
c6ilarge       up   infinite     10  idle~ c6ilarge-dy-c6ilarge-[1-10]
c6i32xlarge    up   infinite     10  idle~ c6i32xlarge-dy-c6i32xlarge-[1-10]
large2         up   infinite     10  idle~ large2-dy-c6i32xlarge-[1-10]

以上、切り分けの過程でした。

おわりに

既存の Slurm DB がある状態でクラスター名を変更した ParallelCluster を追加していく手順を別途用意しておくとみんな幸せになれるのではないかと思いました。期待せずにお待ちいただけると幸いです。