自作クラスタ計算機:nfsの基本設定
This is an old revision of the document!
Table of Contents
概要
- 実際に数値計算を行う際、たくさんある計算ノードの一つ一つにプログラムや入力ファイルをコピーするのは面倒です
- そこで、ファイルは1つのファイルサーバに集約して置いておき、各計算ノードは計算のたびにそこからファイルを読み込むようにします
- 分散ファイルシステムの一つであるNetwork File System (NFS)を利用します
- ファイルサーバとして管理ノード(IPアドレス: 192.168.0.1)を使用しますが、複数ノードを使った並列計算中にファイルのやりとりが加わると通信速度が著しく低下するので、別途専用のサーバーを立てるのもありです。
設定手順
管理ノード
- NFSのファイルサーバ用のパッケージをインストールします
$ sudo apt install nfs-kernel-server
- 設定ファイルに、共有したいディレクトリと、そのディレクトリを共有するネットワークを指定します
$ sudo vi /etc/exports
- 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 (同期) になり、クライアントでファイルの書き換えが実行されたときはファイルサーバのファイルもその都度書き換わるが、パフォーマンスが落ちる。ただし、同期前にクライアントがシャットダウンするなどした場合、ファイルの情報は完全に失われる(そういう状況はあまり発生しないと思います)。
- (UFWを使用している場合)NFS用のポートを開放します
$ sudo ufw allow from 192.168.0.0/24 to any port nfs
- NFSサーバを再起動します
$ sudo systemctl restart nfs-kernel-server
計算ノード
すべての計算ノードで作業する必要があります。 管理ノードからSSHでつないで作業しましょう。
- NFSのクライアント用のパッケージをインストールします
$ sudo apt install nfs-common
- ファイルサーバーのIPアドレスと同期するディレクトリを指定します
$ sudo vi /etc/fstab
- 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
トラブルシューティング
起動時に自動マウントされない
ネットワークよりも先にNFSが立ち上がると、このようなことが置きます。 /home以外がマウントされないことが多いようです。 (起動後に sudo mount -a と手動でコマンドを打てばマウントされます)
fstabを次のように変更してください。
- fstab
192.168.0.1:/home /home nfs defaults 0 0 192.168.0.1:/usr/local /usr/local nfs defaults,_netdev,nofail 0 0 192.168.0.1:/opt /opt nfs defaults,_netdev,nofail 0 0
- _netdev: ネットワークからマウントすることを明示
- nofail: エラーが出ても起動を続行
これでも改善しない場合の解決策はわかりませんでした。 応急策として、systemdを使って、そのディレクトリの初回アクセス時にマウントするように設定します。
- fstab
192.168.0.1:/home /home nfs defaults 0 0 192.168.0.1:/usr/local /usr/local nfs x-systemd.automount 0 0 192.168.0.1:/opt /opt nfs x-systemd.automount 0 0
自分の環境だとdefaultsとx-systemd.automountを組み合わせた場合、nofailをつけても起動しなくなりました。
自作クラスタ計算機/nfsの基本設定.1778214945.txt.gz · Last modified: 2026/05/08 13:35 by koudai
