ラベル vserver の投稿を表示しています。 すべての投稿を表示
ラベル vserver の投稿を表示しています。 すべての投稿を表示

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されることになっておかしなことになるらしい. 注意しないと.

2008年12月15日月曜日

vserver hashify

vserver には複数の仮想環境のファイルをハードリンクする機能がある.むかしはunifyと呼ばれる機能があった.多分これはファイル名をキーにして同じかどうかを判別していたのだと思われる.その後追加されたのがこのhashifyでこちらは,ファイルのハッシュ値を使って同一性を判別するようだ.

こちらのFAQを参照して,vserver2とvserver3をunifyしてみる.

まず準備として,hashifyが利用するディレクトリを作る.

> mkdir /etc/vservers/.defaults/apps/vunify/hash /vservers/.hash
> ln -s /vservers/.hash /etc/vservers/.defaults/apps/vunify/hash/root
ただし,私の環境では,1行目で作っているディレクトリはすでに存在した.

次に,各仮想サーバのほうにもディレクトリを作る.

> mkdir /etc/vservers/vserver2/apps/vunify
> mkdir /etc/vservers/vserver3/apps/vunify
で,仮想サーバを起動しておいて,順次hashifyする.動作中のをいじるのは怖いような気もするが,逆に停止中だとhashifyできない.
> vserver vserver2 hashify
Duplicate hash-dir entry 'root' found
> vserver vserver3 hashify
Duplicate hash-dir entry 'root' found

効果は?

duの値を比べてみる.
hashify 前
  vserver2: 260736 
  vserver3: 254308 
hashify 後
  vserver2: 257304 
  vserver3: 199300 
vserver3は大きく減っている.といっても20%程度だが.そもそもvserver3はvserver2をクローンしたものなのに,これだけしか減らないというのも不思議な話だ.

2008年11月28日金曜日

vserver で ネットワークインターフェイスを追加

/etc/vservers/XXXX/interfaces に 0 とか1とかいうディレクトリができている.XXXXはvserverの名前.

このディレクトリの中にdev, ip, prefixというファイルがありそれぞれ eth0 とか xxx.xxx.xxx.xxx とか 24 とかいう値が入っている.prefixはnetmaskのビット数.

新しいネットワークインターフェイスを追加するには,連番のディレクトリを掘って,適切に値をいれてやればよい.

> mkdir 3
> echo eth0.1173 > 3/dev
> echo XXX.XXX.XXX.XXX > 3/ip
> echo 24 > 3/prefix
で vserverを再起動する.
> vserver ce5 stop
> vserver ce5 start
これで新しいネットワークデバイスが中からみえるようになる.

2008年11月1日土曜日

vserver clone

vserver では既存のゲストをcloneして他のゲストを作ることができる.yumとssh だけを追加したcentOSでclone の影響を見る.
> vserver vserver3 build -m clone --hostname vc5clone\\
  --interface eth0:192.168.84.131/24 -- --source /vservers/vserver2
時間を計ってみると38秒掛かっている.vmwareの中なのでディスク操作が遅いという可能性はある.

使用されるディスクの容量は,dfによると254Mbyte.あれ?ハードリンクかなにかで処理しているわけではないのか...

# du -s /etc/vservers/.defaults/vdirbase/*
202896 /etc/vservers/.defaults/vdirbase/vserver2
254316 /etc/vservers/.defaults/vdirbase/vserver3
duでディレクトリを見てみると,なんと クローンしたvserver3のほうが大きいという非常に意外なデータが..そもそもハードリンクした場合duでどう見えるのかという問題もあるがvserver3のほうがでかいというのもなぞ.

ls で共有されても良さそうなファイルのinode番号を表示させてみても,やっぱり別ノードだ.マニュアルには,リンクできる共有部分はリンクし,そうでないところはcopyするとなっているのだが,実際には完全にコピー?

[root@localhost ~]# ls -ail /etc/vservers/.defaults/vdirbase/vserver2/bin/bash 4755804 -rwxr-xr-x 1 root root 729292 May 25 06:04 /etc/vservers/.defaults/vdirbase/vserver2/bin/bash
[root@localhost ~]# ls -ail /etc/vservers/.defaults/vdirbase/vserver3/bin/bash 
4884402 -rwxr-xr-x 1 root root 729292 May 25 06:04 /etc/vservers/.defaults/vdirbase/vserver3/bin/bash

2008年10月31日金曜日

vserver on CentOS5

vserver をubuntu に入れようと思っていろいろ調べ, カーネルのコンパイル準備をして,さあ,パッチをあてるぞ, と思ったら.カーネルが新しすぎて入らない...

方針変更で,CentOS5を試す.こちらは簡単. http://linux-vserver.org/Installation_on_CentOS に書いてあるとおり,yumで行ける.

ちょっと引っかかったのは,

yum install kernel 
とやったときに,vserverのレポジトリの他に 別のカーネルがなぜか引っかかってきて,そちらの バージョンが現行版より古いという理由で,vserver用の カーネルのインストールも失敗すること.
yum install kernel-2.6.22.19-vs2.3.0.34.1
のように直接指定すればOK.

インストール

vserver はファイルシステムを構成しないと機能しない.vserver-utilにはこのためのツールがふくまれており,簡単にファイルシステムを構成することができるようになっている.このツールでは幾つかのディストリビューションがサポートされている.

http://linux-vserver.org/Building_Guest_Systems に書いてあるとおり

vserver vserver2 build -m yum --context 42 \
    --hostname vserver2.mydomain.com \
    --interface eth0:192.168.1.11/24 -- -d centos5
とかやる.yumのレポジトリは,ホストの設定を使うようだ.

インストールされたファイルシステムの実体は,

/etc/vservers/vserver2/vdir/ 
以下に展開される.
vserver vserver2 start
で起動.
vserver vserver2 enter
とやるとゲストにroot で入れる.ネットワークもちゃんとできている.ifconfigで確認できる.

この状態では,ssh もsshdも立たないので,yumで入れてやる必要がある.と思ったらyumも入っていない.こりゃ面倒.

実はホスト側でvyumというものを使うらしい.一度

vserver vserver2 stop
として,ゲストを落としてから
vyum vserver2 -- install yum
とやるとゲストの中にyumがインストールされる.あとは,パッケージの管理を中でやるという宣言をしてから,ゲストを再度立ち上げる.
vserver vserver2 pkgmgmt internalize
vserver vserver2 start
vserver vserver2 enter
これで中でyumが使えるのだが,/etc/resolv.confがないのでDNSルックアップが効かない.のでここでこのファイルを作ってやる必要がある.が,この時点ではゲストには vi もないので,
cat > /etc/resolv.conf 
とやって標準入力から食わせる.もしくは落ちているときに,ホスト側からファイルシステムを直接いじってもいいのだろう.

これで中でyumが使えるようになったので後は中で設定できる.

参考リンク: http://www.os-museum.com/linux/vserver/vserverfc5/vserverfc5.htm