Takeru CoreDCの機能紹介 : ログインノードの分離
概要
本日は、Takeru CoreDCのメリットの一つであるログインノードの分離について紹介します。
Takeru CoreDCとは、従来のクラスタサーバーにクラウド構築基盤ソフトのOpenStackを組み込んだ解析システムです。
https://www.nabe-intl.co.jp/CoreDC
一般的なクラスタサーバーは、ファイルサーバー、ヘッドノード、ログインノード、計算ノードなどの機能によって構成されます。
規模が比較的小さい環境では、一台でこれらの機能を全てカバーするケースが多いと思います。
一報、規模が大きくなり、利用ユーザーが増えてきた場合にはそれぞれに別のサーバーに分けてこれらの機能を持たせることが必要になってきます。
ログインノード、ヘッドノード、といったあたりの用語については用語の使われ方に幅があるため、ここではそれぞれの用語について下記の意味で用いることにします。
- ファイルサーバー : NFSなどのネットワーク共有ファイルシステムを提供するサーバー
- ヘッドノード : ジョブスケジューラーのマスター、ユーザー管理ツール、その他管理系機能
- ログインノード : クラスタを利用するユーザーが外部からログインするサーバー。ここからジョブスケジューラーを介してジョブを投入する。ファイルのコピーもこのログインノード経由でファイルサーバーにアクセスする
- 計算ノード : 投入されたジョブを実行するサーバー群
分離について
ここで取り扱う分離という言葉について は
ログインノード上で取り扱われる様々な情報についての権限の分離のことを指しており
ログインノード上で取り扱われる情報については以下のようなものを想定しています。
全ユーザー共通のログインノードの場合と、ラボ毎に専用ログインノードを用意した場合を比較して書きます。
ログインノードが関係する情報には以下のようなものがあります。
- ユーザーが扱うデータ、ファイル
ユーザーデータの分離においてはLinuxのパーミッション設定が適切に行われている限り分離はされています。他ユーザーのファイルを見ることはできません。
ただ、ラボ毎の専用ログインノードの場合はパーミッション設定以外にもNFSサーバー側の設定により自分のラボのユーザー領域しかマウントされていないため、他ラボのユーザーディレクトリの存在自体にアクセスすることができません。この点で一段高い分離が実現されます。 - アカウント情報 : ユーザー名やグループ名などのユーザー情報
共通ログインノードの場合、$ ls /home
とした場合に全ユーザーのホームディレクトリの情報が見えてしまう一方、専用ログインノードの場合、NFSサーバー側の設定により$ ls /home
をしても自分のラボのユーザーのホームディレクトリしか見えません。 - プロセスの情報
共通ログインノードの場合、$ ps axf
とすることで他のユーザーのプロセスや処理しているファイル名が見えてしまうことがありますが、専用ログインノードの場合、そもそもログインしているサーバーが分かれているため見えることはありません。 - ジョブの情報 : ジョブスケジューラーに投入されたジョブの情報
Slurm, AGEなどのジョブスケジューラーの設定によるもので、共通ログインノード、専用ログインノードどちらの場合でも設定は可能ですが、実行中のジョブ情報や過去に実行したジョブの履歴情報などについて自分のラボのユーザーのジョブ以外は見せなくする設定が可能です。
[共通ログインノードのイメージ]
[専用ログインノードのイメージ]
ログインノードの分離の違いやメリットはだいたい上記のようなところです。
次に、具体的にラボ専用ノードから各ラボユーザーのホームディレクトリがどのように見えるのか(見えないのか)についてNFSサーバーの設定を含めて紹介します。
NFSサーバーの分離設定
/etc/以下の各ツールの設定ファイルにおいて、xxxx.conf.d
というディレクトリが用意され、ここに置かれたファイルの設定が自動的に読まれるようになってきていますが、NFSサーバーのExport設定に関してもCentOS7移行 /etc/exports.d というファイルが用意されています。
内部の計算ノード全体に対して、/homeや/usr/localなど2,3個のディレクトリをexportするだけであれば /etc/exports
への直書きのみで十分ですが、ログインサーバーの分離のように、運用過程で追加設定がたびたび発生するようなケースでは、/etc/exports.d
の機能はこの機能はとても便利です。
ちなみに、ファイル名は xxxx.exports
というように .exports
で書かれている必要があるという点は注意が必要です。
実際に下記のような環境で動作を確認します。
ホスト名 |
役割 |
IPアドレス |
ユーザー一覧 |
---|---|---|---|
triobite |
NFSサーバー |
192.168.255.200 |
- |
strand |
NFSクライアント(専用ログインノードの位置づけ) |
192.168.255.10 |
meter, inch, mile, shaku |
probe |
NFSクライアント(専用ログインノード の位置づけ) |
192.168.255.20 |
gram, ounce, pound, monme |
共通ログインノードの場合の設定
まず、共通ログインノードの場合の設定手順を見ていきます。
/homeだけをマウントするケースの場合以下のようになります。
- NFSサーバーの/etc/exportsの設定
- NFS Clientでマウントした場合、当然ですが下記のように全ユーザーのホームディレクトリを参照することができます。
専用ログインノードの場合の設定
専用ログインノードの場合は、自身の所属グループのメンバーだけが参照できる状態にする必要があります。
- /etc/exports.d/以下に それぞれlength.exports, weight.exports というファイルを用意して下記のように記載します。
- 2台のNFS Clientのstrand, probe どちらも /etc/fstab には192.168.255.200:/home のみをNFSサーバーとして指定するだけでOKです。
下記のように、NFSサーバー側の/homeだけを指定していても、exportされたユーザーのホームディレクトリしか見えません。
[strand側]
[probe側]
NFS Client側の/etc/fstabを書き換えなくても済むのは便利ですね。
この状態で、実際にstrand側からgramやmonmeといったユーザーディレクトリにアクセスしようとしても、"No such file or directory" と表示されます。
その他
- 上記以外の設定について
上記は、NFSサーバー側で/home/直下に全てのユーザーがいる中でどのように簡単に分離を実現するか、という設定について書きました。
ただ、NFSサーバー側で/home/[グループ名]/[ユーザー名] というようなディレクトリ構造にすればもう少しシンプルにすることができそうです。
また、NFSサーバー側は/homeのみをexportしてNFSクライアント側だけで全てユーザー毎のマウント対象を定義するという設定も可能です。 - 共有リソースと分離のバランスについて
上記設定は、専用ログインノードにログインされるユーザーが限定されている、という前提の上で成り立つものですが、ジョブスケジューラーに割り当てられたジョブによってどのユーザーもログインする可能性がある共用の計算ノードについては上記のように設定するわけにはいきません。
あるユーザーのジョブが割り当てられた計算ノードは、ジョブ開始時にNFS領域をautomountし、他のユーザーのジョブが入らないように設定する、といったこともできそうですが、かなり潤沢な計算ノードが無いと計算リソースがもったいないケースが増えそうです。
ログインサーバーのメリット、というよりはNFSサーバー設定のTIPsのような内容となりましたが、共有リソースの良さを生かしつつ、分離も実現するというのはなかなか難しい課題について問題意識やお悩みがある方はぜひご相談頂ければと思います。