pNFS構成を作ってみる

pNFS対応カーネルインストールで、Fedora12においてpNFS対応カーネルディストリビューションを動かすことはできたので、メタデータサーバ、データサーバ、クライアントの三要素が最低限動く構成をやる。まぁ当然の流れ


メタデータサーバ:1[OS]
データサーバ:2[OS]以上
クライアント:1[OS]〜


という構成をやろう。今のところ実機が3台しかないので満足なパフォーマンステストは諦める。仮想マシンと実機の並列データサーバで速度が上がってたら儲けものか…。とりあえずWebの導入だけでは実感できないことだらけである。メタデータサーバとデータサーバ間ではハートビート的な通信が行われるらしいがどういうタイミングでそれが起こるのかもよくわからん。

さて…OSにはFedora12をメインで使うが数があるので用意が面倒だ。あまり気が進まないがXenKVMのディスクイメージからクローンを作ってみることにする。

今までCentosがなかなか悪くないと思って使っていたが、新しめのものを使おうとするとやはりFedoraを選ぶ必要がある。ちょっと見比べてみるとCentosFedora並に新しいことをやろうとしたときに依存関係地獄にハマりそう…。pNFSのメーリングリストなどでもCentosの話題がほとんど出ない(出てたような気はする)。

今まで仮想化にはXenばかり使ってきたがFedoraではKVMが標準的な仮想マシンプログラムとして推奨されているようだ。で、KVMと気づかずに使っていて思った…KVMイイ。なにかXenなどと比べて決定的に悪いところでもあるのか?

    • あぁあった。Xenのように「共有物理ネットワークデバイス」を用意してくれない。まぁ仮想マシンようにホストマシン上のNICを使ってブリッジを一つ作ると同じネットワークセグメント上に仮想マシンを作ることが楽なので、自動でやってくれるというのはうれしい。KVMは自前。でここの説明で概ねいいが、ホストOS上で加えたブリッジ接続に、デフォルトゲートウェイ設定を加えてやった方がホストOS上でのネットワークに難がなくなると思う。

KVMには一応クローンコマンドが備えられているようだがクローンする前に何をしたらネットワークまわりがまともの動くのだろうか?まぁ設定ファイル等もまるごとコピーされるのでしようがないと言えばしようがない。クローンする前に考えるところが結構あるんだよなぁ… そのうちちゃんと調べてみよう。「クローンをサポートしました!」なんて言ってはいるがこういうどうしようもない設定ファイルが存在する以上手作業が必ず発生しそう。とりあえずシコシコインストールして全部でFedora12を4つ用意。上の構成でも試してみるか。

メタデータサーバにおいてデータサーバのエクスポートディレクトリをマウントする設定の記述が特殊。以下が分かりやすい
http://www.connectathon.org/talks08/dmuntz-spnfs-cthon08.pdf
pNFS-wikiの説明だけ見てると書式の仕様がよくわからないので注意。

メタデータサーバでspnfsd.confという設定ファイルを用意する必要があるのだが、ここでメタデータサーバのどのディレクトリでデータサーバ上からエクスポートされるどのディレクトリをマウントするのかといったようなことを記述する。しかしこれがわかりづらい。/etc/exportsで指定されているディレクトリをルートディレクトリとして、そこからの相対パスで記述することになっている。フルパスでいいじゃん… これ決めたやつ誰だ?ここに限っては理解できん。かろうじてウィキの説明からでも「だいたいこうだろう」という予測はついたが説明が不親切。いきなり出てくる設定ファイルに変な前提つけるなよと。まぁLinuxはだいたいがそうだけど


メタデータサーバでは「spnfsd」というデーモンを動かしてやる必要があるが、これは現在リポジトリnfs-utilsをrpmからインストールしてもspnfsdが/usr/sbin内に出来ない。なのでgitリポジトリから持ってきてビルドしてやろう。その際若干依存関係でひかかるかもしれないがFedora12がベースであればyumで解決できるものばかりだ。
git://linux-nfs.org/~bhalevy/pnfs-nfs-utils.git
まぁビルドはしてspnfsdは手に入れたもののまだ試していない…


■pNFSとりあえず成功(データサーバ数1。ほとんど意味なし…と思う)
今のところゼロサイズファイルを作ることしかできていない。書き込み権限を持てないなどエラー多数。
本家メーリングリストではパッチがバシバシ出まくっている… 当たり前と言えば当たり前だが一応動いている実績あるんだよな?これ…

上の画像で明るい緑色に表示されているファイルがデータサーバ上に「ストライピング」されたファイル。一応言っておくが、「chmod +x ...」で実行権限を与えて緑に光らせているわけではないw。DS上でのファイル名はMDS上に作成されたファイルのiノード番号が元になっているらしい。MDS上にできているファイルには「ブロック」が割り当てられておらず、ファイルの実体はDS上にストライピングされる。また、MDSサーバ上でpNFS用にエクスポートしたディレクトリ以下であれば、クライアントからどこに書き込んでもDSサーバ上ではpNFS用にエクスポートしたディレクトリ以下に放り込まれるようだ。識別はiノード番号を元にしたファイル名で行っているのだろう。つまりDS上にストライピングされたファイルはMDSファイルシステム上での位置関係が分からない状態になる(と思う)。pNFS構成では Client<->MDS<->DS というのが使用感としてはこうだろう。ただpNFSの処理的にはクライアントとDSが直接通信していたような気はする(いい加減)。

DS1台のみというテスト以外には使えない構成であるが成功。次はDS復数台で…。 できてみれば何てことない手順ではあるが、まだLinuxカーネルのスタンダードな機能に組み込まれていないだけあって手順を覚えるのに苦労したと思う。しかしこれでスケーラブルな並列NFSサーバ構成が組めると思えば疲れも吹き飛ぶと言うものだ。とは言ってもだ、スパコンで使われていたり開発者が「概ね動く」と言ってはいてもそこは開発中の代物である。充分使い込んでみよう。pNFSで並列NASとかを出してるPanasasだっけ?あそこってどうやってんだろう… 自前でカーネルチューニングでもしてるのかね。してるんだろうやっぱり

■pNFSでのフェイルオーバー機構を用いるには
Client−>objectleyoutdriver
MDS−>xofs
DS−>osd-targets
などといろいろなモジュールやプログラムを別途使うことになる。