FreeBSDでディスクレスクラスターⅡ

今回は?

前回までに、TFTPの設定とDHCPの設定、配布用OSの調整を行い、PXEbootで起動できるようになりました。
今回はSlurm Workload Managerのインストールと設定を行い、Jobの発行とクラスターノードでのJobの実行ができるようにしていきます。

Slurm Workload Manager

インストールはPortsからやってもいいのですが、時間かかるので、

pkg install slurm-wlm

とやってしまいましょう。これで依存するもの(認証に使うmunge等)もインストールされます。
設定は/usr/local/etc/slurm.confから行うのですが、そのうち詳細をかくので、今は良しなにやってみてください。(本当はここが重要なのにゴメンナサイ。クラスタのメンテ中でまだ設定の見直し中なのです…。)
サービスの起動設定は、head(管理サーバ)は/etc/rc.confに

slurmctld_enable="YES"
munged_enable="YES"

と追記してください。
計算ノードのための設定は、/conf/default/etc/rc.confに

slurmd_enable="YES"
munged_enable="YES"

として、

# ./clone_root

を実行してくだい。
このままでは、/varファイルにディレクトリツリーが作製されないため、slurmとmungeのlogが書き出せず、head(管理サーバ)からidle*となってJobを実行できません。また、計算ノードの/varはRamディスクのため、/disklessに定義済みの/varを置くということもできません。かといって/disklessを読み書き可能にすると、複数台の計算ノードから大量のLogの書き込みが常に掛かるため、ディスクにもネットワークにも計算以外の無駄な負荷をかけることになり、気分がよろしくありません。
そこで、デフォルトのディレクトリツリーを定義しているファイルがあるので、そのファイルを書き換えてしまいましょう。
デフォルトのディレクトリツリーは/etc/mtree/BSD.var.distというファイルになります。このファイルをまずは、

# cp /etc/mtree/BSD.var.dist /conf/etc/default/mtree/BSD.var.dist

として、コピーしていまいましょう。
コピーしたファイル(/conf/etc/default/mtree/BSD.var.dist)を開いてみるとなんとなく定義の仕方がわかると思います。
とりあえず、

︙
lib
    munge   mode=0711
    ..
    slurm   uname=slurm gname=slurm
    ..
..
︙
log
    munge   mode=0711
    ..
    slurm   uname=slurm gname=slurm
    ..
..
︙
run
    munge   mode=0711
    ..
    ︙
    slurm   uname=slurm gname=slurm
    ..
    ︙
..

こんな感じに追記してあげてください。
※終わりの「..」(ドット×2)を忘れるとエラーを吐いてシングルユーザーモードでしかログインできなくなるの注意です。
再度、

# ./clone_root

を実行してくだい。
最後にmunge認証のkeyを設定します。これは自分で決めても良いのですが、公式が推奨してる方法を使いましょう。
こんな感じでコマンドを実行してください。

# dd if=/dev/random bs=1 count=1024 > /usr/local/etc/munge/munge.key

これでkeyは生成されました。
計算ノードにも配布しなければならないのですが、今回は/usrはNFSでマウントされるので、これで共有(配布)されることになります。
これでslurmの設定は完了です!!
とりあえずログインノード(head)にログインして、

$ srun -n 4 hostname

とやってみると、各計算ノードでhostnameを実行した結果が表示されます。
順番は、実行される順序が不定であったり、ネットワークで決まるため、実行するたびに変わります。