2008年12月16日火曜日

vserver + aufs

vserver に stackable file system の一つであるaufsを組み合わせてみる.aufsはanother union file system の意.linuxにはunionfs というstackable file systemがありカーネルへのマージも予定されていたりするらしいのだが,aufsのほうが安定している,という話もあるようなので,いろいろ迷うところ.aufs は日本人の方が開発なさっているようだ. CentOS 5.2にvserverをいれた環境に入れてみる.aufsはsourceforgeでホストされているのだが,ダウンロードは用意されていなくて,cvsからチェックアウトするしか無い.cvsとはいってもstable版のみ置くようにしているということなので安心.その割には毎週月曜更新という頻度が逆にちょっと怖い.

google して参考になりそうなサイトを発見.ありがたいことだ.

  1. NFS と AUFS (Another Unionfs) を使って、ディスクレス (diskless) サーバ群からなる低コスト・高可用な大規模負荷分散システムを構築する
  2. CentOS で aufs (another unionfs) を使う
  3. OpenVZ でunionfsを使ってみた
インストール 結構手間取った.vserverだったから.まず,kernelのソースをインストールしておく.vserverをyumで入れていれば,そのまま
  yum install kernel-devel  
で入るはず. 次に参考リンクの1に従って,ディレクトリを掘り,cvsからチェックアウト.make -f local.mk で カーネルもジュールができるはずなんだけど,コンパイルエラー.vfs_xxxxの類いの関数が軒並み too few argument になっている.確かにincludeファイルの方は3引き数なのに,aufsのソースは2引数で呼ぼうとしていたり.googleでいろいろ調べてみると本来2引数なのに,vserverが3引数にしているらしい.

よくパッケージを見るとpatchディレクトリにvserver用のパッチがある.これをaufsのソースに当てればよさそうだ.aufsのメイリングリストにも,vserverと組み合わせてアクティブに使われている方がいるようだ.非常に心強い.

patch -p 0 < patch/vserver-2.6.22.19-vs2.2.0.7.patch 
ところが,パッチあて失敗.どうもパッチとソースコードのバージョンの対応がとれていないようだ.幸い,失敗している部分はちょっと行がずれているだけで,見ればわかるようなものだったので,ソースを手で修正.makeするとaufs.koができる.
> mkdir /lib/modules/2.6.22.19-vs2.3.0.34.1/kernel/fs/aufs
> cp aufs.ko /lib/modules/2.6.22.19-vs2.3.0.34.1/kernel/fs/aufs
> depmod -a
でモジュールのデプロイ完了.これでとりあえず動くようになった.すばらしい.

ヘルパスクリプトのインストール

マニュアルに従って.
> install -m 500 -p mount.aufs umount.aufs auplink aulchown auchk /sbin
> install -m 644 -p etc_default_aufs /etc/default/aufs
> more /etc/default/aufs 
> echo FLUSH=ALL > /etc/default/auplink

vserverとの組み合わせ

まだ組み合わせて使ってみていないのだけど,MLには時々変なことがおこるようなことが書いてある.どうも,vserverのディレクトリをaufsで構築し,vserverごとdestoryすると正規の手続きを踏まずにumountされることになっておかしなことになるらしい. 注意しないと.

0 件のコメント: