====== 概要 ======
* 実際に数値計算を行う際、たくさんある計算ノードの一つ一つにプログラムや入力ファイルをコピーするのは面倒です
* そこで、ファイルは1つのファイルサーバに集約して置いておき、各計算ノードは計算のたびにそこからファイルを読み込むようにします
* 分散ファイルシステムの一つであるNetwork File System (NFS)を利用します
* ファイルサーバとして管理ノード(IPアドレス: 192.168.0.1)を使用しますが、複数ノードを使った並列計算中にファイルのやりとりが加わると通信速度が著しく低下するので、別途専用のサーバーを立てるのもありです。
====== 設定手順 ======
===== 管理ノード =====
- NFSのファイルサーバ用のパッケージをインストールします
$ sudo apt install nfs-kernel-server
- 設定ファイルに、共有したいディレクトリと、そのディレクトリを共有するネットワークを指定します
$ sudo vi /etc/exports
/home 192.168.0.0/24(rw,async)
/usr/local 192.168.0.0/24(ro)
/opt 192.168.0.0/24(ro)
* ここでは次のディレクトリを共有します
* /home/ ... ホーム・ディレクトリ
* /usr/local/ ... makeしたバイナリが格納されるディレクトリ
* /opt/ ... 各種ソフトウェアがインストールされるディレクトリ
* /usr/local/ と /opt/ の間に厳密な使い分けはないので、どっちにインストールするか利用者が適当に選んでいるのが実態です。
* オプションの意味は次の通りです
* rw ... ファイルの読み書き (read-and-write) が可能。設定しなければ ro (read-only)となり、ファイルの書き換えができない
* async ... 非同期書き込み。設定しなければ sync (同期) になり、クライアントでファイルの書き換えが実行されたときはファイルサーバのファイルもその都度書き換わるが、パフォーマンスが落ちる。ただし、同期前にクライアントがシャットダウンするなどした場合、ファイルの情報は完全に失われる(そういう状況はあまり発生しないと思います)。
- NFSサーバを再起動します
$ sudo systemctl restart nfs-kernel-server
===== 計算ノード =====
すべての計算ノードで作業する必要があります
- NFSのクライアント用のパッケージをインストールします
$ sudo apt install nfs-common
- ファイルサーバーのIPアドレスと同期するディレクトリを指定します
$ sudo vi /etc/fstab
#ファイルの最後に次のように書き加えます
192.168.0.1:/home /home nfs defaults 0 0
192.168.0.1:/usr/local /usr/local nfs defaults 0 0
192.168.0.1:/opt /opt nfs defaults 0 0
* 名前解決ができる場合、IPアドレスの代わりにホスト名でも可能です
- ファイルサーバのディレクトリをマウントします
$ sudo mount -a
- マウントが成功したか確認します
$ df -h
Filesystem Size Used Avail Use% Mounted on
(略)
192.168.0.1:/home 1.8T 8.0G 1.7T 1% /home
192.168.0.1:/usr/local 1.8T 8.0G 1.7T 1% /usr/local
192.168.0.1:/opt 1.8T 8.0G 1.7T 1% /opt
- 実際に管理ノードでファイルを作ってみて、計算ノードでそのファイルが反映したか確認してみましょう
NFSサーバを使用しなくなった場合、次のようにマウントを解除します
$ sudo umount -a