VServerは、専用カーネルを使用して、オーバーヘッドの少ない仮想環境を作成する仕組みのようだ。FreeBSDでいう、jailと同じようなものらしい。
 debianでは、すべてパッケージが用意されていて構築が容易。

パッケージのインストール

 以下のモジュールをインストールする。x64環境での例なので、ほかの環境では読み替えること。

# apt-get install linux-image-2.6-vserver-em64t-p4-smp
# apt-get install util-vserver
# apt-get install vserver-debiantools
# apt-get install debootstrap

 モジュールをインストールしたら再起動し、VServerカーネルを選択する。

仮想マシン構築

 以下のように簡単に仮想マシンが作成できる。仮想マシン内で実行するファイルなどをとってくるため、多少時間はかかる。

# vserver <vserver> build --hostname hoge -m debootstrap \
  --interface 1=lo:127.0.0.1/8 --interface 1=eth0:192.168.0.125/24 -- -d etch

基本操作

 仮想マシンの起動は以下のコマンドを使用する。

# vserver <vserver> start

 仮想マシンの終了は以下のコマンドを使用する。

# vserver <vserver> stop

 仮想マシンへの直接ログインは以下のコマンドを使用する。

# vserver <vserver> enter

仮想マシンの初期設定

 仮想マシンの設定ファイルを、いくつか修正する。

 一通り設定したら、パッケージを更新しておく。

# apt-get update
# apt-get upgrade

サービス設定時の注意点

 ネットワークサーバとして使う場合、待ち受けIPアドレスに注意する必要がある。
 ホストマシンも仮想マシンも同一のNICを使用するため、両方から0.0.0.0で待ち受けるとおかしなことになる。このため、待ち受けるIPアドレスを明記する必要がある。
 以下に、いくつかのサービスの設定方法をあげる。

サービス名設定ファイル設定例
sshd/etc/ssh/sshd_configListenAddress 192.168.0.125
inetd*1/etc/inetd.conf192.168.0.125:*2
vsftpd/etc/vsftpd.conflisten_address=192.168.0.125
exim4/etc/exim4/update-exim4.conf.confdc_local_interfaces='192.168.0.125'
dovecot/etc/dovecot/dovecot.conflisten = 192.168.0.125
apache2/etc/apache2/ports.confListen 192.168.0.125:80
postgresql/etc/postgresql/8.1/main/postgresql.conflisten_addresses = '192.168.0.125'
bind9仮想マシンで実行する方法がわからない*3ので、ホストマシンで処理する。

 ホストマシンのIPアドレスがDHCPで割り当てられる仕組みだと、固定のIPアドレスを受け取ったとしてもvsftpdとinetdは起動できなかった。

ディレクトリ

 VServerに関係するディレクトリは以下のようになっている。

意味ディレクトリ
仮想マシンのルートディレクトリ/var/lib/vservers/<vserver>/
設定/etc/vservers/<vserver>/

自動起動&自動終了

 以下のように、VServerごとに設定する。

# echo default > /etc/vservers/<vserver>/apps/init/mark

ディスク使用制限

 これはなかなかやり方がわからなかった。日本語のページでの情報は見つからなかったし、英語のページでもよくわからない。試行錯誤の末に見つけ出した。

  1. マウントオプションの変更
     ディスクの使用情報が保存できるように、マウントのオプションにtagxidを追加する。これにより、ファイルの情報に、使用されている仮想マシンが付加できるようになる。このオプションは、ルートパーティションには指定できないようだ。
    /dev/sdd3  /var/lib/vservers   jfs   defaults,tagxid     0     2
  2. 仮想マシンの番号固定
     VServerの名前と番号(CTX)を固定するために、設定ファイルに番号を記入する。番号には2〜49151が指定できた。ファイルと仮想マシンとを関連づけるための情報に、この番号を使用する。
    # echo 1000 > /etc/vservers/<vserver>/context
  3. ファイルに仮想マシン情報を付加
     2.で指定した番号をファイルに追加する*4
    # chxid -c <vserver> -R /var/lib/vservers/<vserver>/
     設定内容を確認してみる。2.で設定した番号が表示されれば正常。仮想マシンが起動中だと、番号の代わりに仮想マシンの名前が表示される。
    # lsxid /var/lib/vservers/
  4. 制限値を設定
     いよいよ、目的の設定ができるようになった。
     設定を適用するホストマシンのディレクトリ、iノード数、使用サイズ(KB)、root用予約率をすべて設定する。
    # mkdir -p /etc/vservers/<vserver>/dlimits/0/
    # echo /var/lib/vservers/<vserver> > /etc/vservers/<vserver>/dlimits/0/directory
    # echo 50000 > /etc/vservers/<vserver>/dlimits/0/inodes_total
    # echo 1000000 > /etc/vservers/<vserver>/dlimits/0/space_total
    # echo 5 > /etc/vservers/<vserver>/dlimits/0/reserved
     仮想マシンを起動し、仮想マシンからdfなどでサイズを見てみると、サイズなどが制限値となっていることが確認できる。

リソースの使用制限

 各種リソースの使用制限は以下のように指定する。指定できるリソース名は、cpu, fsize, data, stack, core, rss, nproc, nofile, memlock,locksがある。

# mkdir /etc/vservers/<vserver>/rlimits
# echo 1000 > /etc/vservers/<vserver>/rlimits/rss

 以下のコマンドで確認する。

# vlimit -c <vserver> -a

特定の仮想マシンにだけ別のデフォルトゲートウェイを割り当てる

 グローバルアドレスを二つ持っていて、どちらのグローバルアドレスに対しても同じマシンでサービスを提供する場合、常にどちらかしかパケットが出て行かないと片方しか通信が成り立たない。その場合は、特定のマシン用にデフォルトゲートウェイを用意する。
 具体的には、ネットワークの設定を以下のように("up ip 〜"の部分)すればよい。

auto eth0
iface eth0 inet static
    address 192.168.10.20
    netmask 255.255.255.0
    gateway 192.168.10.254
    up ip route add 192.168.10.0/24 dev eth0 table 100
    up ip route add default via 192.168.10.253 dev eth0 table 100
    up ip rule add from 192.168.10.30 table 100

 この例では、192.168.10.30の仮想マシンのデフォルトゲートウェイを、192.168.10.253にしている。

参考

http://linux-vserver.org/
http://opentechpress.jp/developer/article.pl?sid=07/01/10/0125237&pagenum=1
http://www.ne.jp/asahi/open/gallery/linux/vserver/vserverfc5/vserverfc5.htm
http://d.hatena.ne.jp/darashi/20070328/1175089122
http://www.dth.net/new_machine/vserver.html


*1 Debian標準の、openbsd-inetdの場合。
*2 最初の有効行として、追加する。
*3 待ち受けIPアドレスの指定はできたけど、capabilityモジュールがないのが原因のようなエラーが出る。VServerはモジュールというのがない(見えない?)のでこれ以上は無理と判断した。
*4 この情報をつけた状態のディスクを、tagxidオプションを付けずにマウントすると、所有者などの情報がおかしくなっている。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-09-23 (日) 22:36:25 (4411d)