この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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.conf
のClusterNameを編集して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 を追加していく手順を別途用意しておくとみんな幸せになれるのではないかと思いました。期待せずにお待ちいただけると幸いです。