OpenVZ - OSレベルの仮想化について
- 2008.04.25
- インフラ
OpenVZは、Linuxで動作するコンテナベースの仮想化ソフトです。
本家URL
OpenVZって何?
- 読み方は「おーぷんぶいじー」
- Linuxで動作するコンテナベースの仮想化ソフト
- Virtuozzoという商用ソフトのオープンソース版
- SWsoftというアメリカの会社が提供
- 最近Parallelsを買収したらしい
- 本家Linuxカーネルに組み込まれることが彼らの野望
- すでに 一部の機能は組み込まれていたりもする
仮想化って?
ひとつのマシンのリソースを複数の実行環境に分割すること。 一口に仮想化といっても、以下の三種類がある。
- 仮想マシン (Virtual machines)
- VMware, QEMU, Parallels, Microsoft Virtual Server
- 準仮想化 (Paravirtualization)
- Xen, UML
- OSレベルの仮想化 (Virtualization on the OS level)
- OpenVZ, Virtuozzo, Linux-VServer, Solaris Zones, FreeBSD Jails
(参考: http://wiki.openvz.org/Introduction_to_virtualization)
OSレベルの仮想化って?
仮想マシンや準仮想化と比べて、
- 長所
- 軽い!
- 集約度が高い!
- 短所
- 仮想環境にLinuxディストリビューションしか動作しない!
- できないことが多い!
イメージとしては、chrootにリソース制限機能を付加したという感じでいいと思います。 コンテナ(仮想環境)内でファイルシステムのフォーマットをしたりだとか、カーネルを動作させるといったことはできません。
OpenVZの特徴
- 仮想化によるCPUのコストは1-2%と低い
- 各コンテナ毎にファイルシステム, プロセス, IPCが独立している
- デバイスファイルにはアクセス制限ある
- 各コンテナ毎にネットワークが独立している
- Fair CPU scheduler
- I/O scheduler
- live migration機能
個人的な使用感としては、同じOSレベルの仮想化である Linux Vserverよりも高機能だと思います。
インストール
Wikiが充実しているので、そちらを見るのがてっとり早いです。 ここではURLを紹介して起きます。
インストール
http://wiki.openvz.org/Quick_installation
リソース制限
http://wiki.openvz.org/Category:Resource_management
http://wiki.openvz.org/Category:UBC
オペレーション
ドキュメントは以下のサイトにあります。
http://wiki.openvz.org/Basic_operations_in_OpenVZ_environment
インストール後、VE(ゲスト)を起動してみます。
$ vzctl start 101
Starting VE ...
VE is mounted
Adding IP address(es): 192.168.1.151
Setting CPU units: 60000
Configure meminfo: 2147483647
VE start in progress...
起動しているVEの一覧を見てみます。
$ vzlist
VEID NPROC STATUS IP_ADDR HOSTNAME
101 14 running 192.168.1.151 -
無事に起動されています。 オプションに-aをつければ起動していないVEも一覧できます。
$ vzlist -a
VEID NPROC STATUS IP_ADDR HOSTNAME
101 14 running 192.168.1.151 -
102 - stopped 192.168.1.152 -
103 - stopped 192.168.1.153 -
このホストでは、ID 101のVEの他に、102、103もインストールしています。 ホストから、VE 101のなかに入ってみます。
$ vzctl enter 101
VEの内部では普通のLinuxのように操作できます。
$ ps -ef
root 1 0 0 Apr10 ? 00:00:00 init [3]
root 16357 1 0 Apr10 ? 00:00:00 syslogd -m 0
root 16383 1 0 Apr10 ? 00:00:00 /usr/sbin/sshd
root 17416 1 0 Apr10 ? 00:00:00 xinetd -stayalive -pidfile /var/run/xinetd.pid
root 17462 1 0 Apr10 ? 00:00:00 crond
root 18120 1 0 Apr10 ? 00:00:00 /usr/sbin/httpd
apache 18122 18120 0 Apr10 ? 00:00:00 /usr/sbin/httpd
apache 18123 18120 0 Apr10 ? 00:00:00 /usr/sbin/httpd
apache 18124 18120 0 Apr10 ? 00:00:00 /usr/sbin/httpd
apache 18125 18120 0 Apr10 ? 00:00:00 /usr/sbin/httpd
apache 18126 18120 0 Apr10 ? 00:00:00 /usr/sbin/httpd
apache 18127 18120 0 Apr10 ? 00:00:00 /usr/sbin/httpd
apache 18128 18120 0 Apr10 ? 00:00:00 /usr/sbin/httpd
apache 18129 18120 0 Apr10 ? 00:00:00 /usr/sbin/httpd
root 22165 1 0 05:51 ? 00:00:00 vzctl: pts/0
root 22166 22165 1 05:51 pts/0 00:00:00 -bash
root 22180 22166 0 05:51 pts/0 00:00:00 ps -ef
IPアドレスが振られているインターフェースは、eth0でなくvenet0:0となっており、OpenVZ特有のものです。
$ ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:92 errors:0 dropped:0 overruns:0 frame:0
TX packets:92 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:6164 (6.0 KiB) TX bytes:6164 (6.0 KiB) venet0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:127.0.0.1 P-t-P:127.0.0.1 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
RX packets:57785 errors:0 dropped:0 overruns:0 frame:0
TX packets:59062 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:47179824 (44.9 MiB) TX bytes:71213725 (67.9 MiB)
venet0:0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:192.168.1.151 P-t-P:192.168.1.151 Bcast:192.168.1.151 Mask:255.255.255.255
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
exitして、VEを停止します。
$ exit
exited from VE 101
$ vzctl stop 101
Stopping VE ...
最後に
仮想化と言えば一般的にはVMwareかXenなのかもしれませんが、OSレベルの仮想化であるOpenVZの特徴はなんと言っても1台のサーバへの集約度を高められることです。 特定用途で、効果的な使い道があるかもしれません。