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_config | ListenAddress 192.168.0.125 |
inetd*1 | /etc/inetd.conf | 192.168.0.125:*2 |
vsftpd | /etc/vsftpd.conf | listen_address=192.168.0.125 |
exim4 | /etc/exim4/update-exim4.conf.conf | dc_local_interfaces='192.168.0.125' |
dovecot | /etc/dovecot/dovecot.conf | listen = 192.168.0.125 |
apache2 | /etc/apache2/ports.conf | Listen 192.168.0.125:80 |
postgresql | /etc/postgresql/8.1/main/postgresql.conf | listen_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
これはなかなかやり方がわからなかった。日本語のページでの情報は見つからなかったし、英語のページでもよくわからない。試行錯誤の末に見つけ出した。
/dev/sdd3 /var/lib/vservers jfs defaults,tagxid 0 2
# echo 1000 > /etc/vservers/<vserver>/context
# chxid -c <vserver> -R /var/lib/vservers/<vserver>/設定内容を確認してみる。2.で設定した番号が表示されれば正常。仮想マシンが起動中だと、番号の代わりに仮想マシンの名前が表示される。
# lsxid /var/lib/vservers/
# 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