このサーバがnfsのエラーが出まくるので、他の方法を考えてみた。
今まで、OCFS2をいろいろ試してみていたのだが、どうも安定しない。安定しない一番の原因は、どうやらネットワークブロックデバイスの動作に問題があるらしい。この辺をテストしてみた。
テストと言っても、パフォーマンス測定。ダメならコケるということで、安定性もある程度わかるw
準備
ファイルサーバにテスト用の空間を作る。
実空間を作ると時間がかかるので、スパースなファイルを作って使う。
# dd if=/dev/zero of=home.img bs=1M seek=700000 count=0
まぁこれは先物取引やっているようなものなので、後で借りを返すことになるのだけど。
イメージをnfsで使った場合
準備で用意した空間を、nfs経由でmountして使ってみる。
# mkreiserfs [nfs mountした先のイメージ] # mount -o loop [nfs mountした先のイメージ] /mnt # cp -av [テスト用ディレクトリ] /mnt
テスト用には私のホームディレクトリを使った。imapで使うmhフォルダが主で、細かいファイルがいっぱいある。絶対値にはあまり意味がないが、基準ということで結果を書いておく。
real 85m24.437s user 0m6.044s sys 1m7.392s
といったところ。
イメージを使わずにnfs mountしたディレクトリを使う場合
比較のためにイメージ等を使わないで、直接ディレクトリを使ってみる。
# mount [export されているディレクトリ] /mnt # cp -av [テスト用ディレクトリ] /mnt
real 593m15.308s user 0m0.660s sys 0m10.817s
といったところ。途方もなく時間がかかる。
nbdを使った場合
イメージをnbdで見えるように設定して使ってみる。
# mount /dev/nbd0 /mnt # cp -av [テスト用ディレクトリ] /mnt
real 81m59.892s user 0m5.972s sys 1m8.252s
わずかにnfsでイメージをmountした場合よりも速いのだが、ファイルサーバの負荷も一定ではないので、誤差の範囲だろう。問題は実験の後放置していたら、実験しているサーバ(ファイルサーバじゃない方)でdfしたらハングアップしてしまったこと。
結果
- 現状の直接nfs mountはパフォーマンス的には論外
- nbd + reiserfsはパフォーマンスはそこそこだが、安定性に問題あり過ぎ
- イメージをnfsから使うのはダサいがパフォーマンスはそう悪くない
ということで、今までnfsで直接mountしていたものは、早急にイメージを作ってmountするようにした方が良さそう。問題はOCFS2のようなクラスタ系のfsではないから、あちこちでmountが出来ないこと。まぁ主サーバ以外では「ちょっといじる」のが主なので、必要があれば主サーバからexportすれば対応出来る。
問題はファイルサーバのファイルの上にさらにfsを重ねることになって、ファイルサーバがクラッシュした時に面倒なことになりそうなこと。まぁこれは他の方法でも同じ問題を持っているから、諦めてそれなりの対応をした方が良いのかも知れない。
PS.
ちなみに、loop back mountしたローカルなファイルに対して同じcpを行った場合、
real 30m50.043s user 0m8.173s sys 3m16.260s
となった。処理時間のうち、約6割程度がネットワークの処理だということらしい。