OpenVZ
| 作者 | コミュニティ サポート企業 Parallels |
|---|---|
| 最新版 | 2.6.32-042stab044.17(2012年1月18日) |
| プログラミング言語 | C |
| 対応OS | Red Hat Enterprise Linux 4〜6 |
| プラットフォーム | x86, x86-64 |
| 種別 | OSレベル仮想化 |
| ライセンス | GNU GPL v.2 |
| 公式サイト | openvz.org |
OpenVZ(オープンブイジー)は、Linuxカーネルをベースに開発された Red Hat Enterprise Linux 用のOSレベルのサーバ仮想化ソフト。Parallels Virtuozzo Containers for Linux のオープンソース版。1つの物理サーバ上に複数の独立したLinuxインスタンスを作成することができる。Linuxカーネルを全てのインスタンスで共有する。そのため、Linux以外の環境(Windowsなど)を動作させることはできない。
目次 |
[編集] 特徴
ハイパーバイザー型(ハードウェアレベル)の仮想化ソフトであるVMwareやXenに比べてオーバーヘッドが少ないとされ、稼動させる環境数で勝っている。より高密度化できるため、バーチャル・プライベート・サーバでの使用において、コストダウンをはかることができる。
チェックポイントとライブマイグレーションにも対応している。ゲストOS(コンテナ)が稼働中のまま、別のマシンに移すことができる。
RHEL 5 版では、仮想メモリ単位でしかメモリの制限をかけられなかったが、RHEL 6 で Linux カーネル 2.6.32 になり、cgroups の開発が進み、VSwap[1] が使えるようになり、物理メモリやスワップメモリでも制限をかけられるようになった。コンテナ内で物理メモリが枯渇し、スワップメモリを使い始めても、ホストの物理メモリが余っている場合は、実際にはすぐにディスクへの書き出しが始まるわけではなく、人工的にコンテナの速度を遅くしスワップアウトをエミュレートし、本当にホストの物理メモリが枯渇したときに初めてディスクへの書き出しが始まる。
[編集] 対応OS
公式には Red Hat Enterprise Linux にのみ対応している。RHEL クローンの CentOS でも動作し、Parallels Virtuozzo Containers の方では CentOS も公式にサポートしている。Linux カーネルを改造しているため、ディストリビューションおよびそのバージョンに強く依存している。
Debian 5.0, 6.0 にもパッケージに含まれているが、サポートが技術的に困難であるという理由から、Debian 7.0 ではパッケージを廃止予定[2]。Debian から派生している Ubuntu では 8.04 は含まれているが、10.04 ではパッケージに含まれていない[3]。2.6.32-042stab039.3 以降は rpm を deb に変換することで Debian 6.0 にもインストール可能でありその方法も公開している[4]。
ゲストOSの方は、主要な Linux ディストリビューションを一通り対応している。
[編集] カーネル
OpenVZ のカーネルは Linux カーネルを OpenVZ コンテナをサポートするように修正を加えたものである。修正されたカーネルは仮想化、コンテナ同士の隔離、リソース管理、チェックポイントの機能を持つ。
[編集] 仮想化と隔離
それぞれのコンテナは別々に分離されていて、大旨、隔離された物理サーバーのように動く。以下の物をそれぞれ隔離して所有している。
- ファイル
- システムライブラリ、アプリケーション、仮想化された /proc や /sys、仮想化されたロックなど。
- ユーザーとグループ
- それぞれのコンテナは独自の root ユーザーを持ち、ユーザーやグループは独立している。
- プロセスツリー
- それぞれのコンテナは独立したプロセスを持ち、プロセスは init の子プロセスとなっている。プロセスID (PID) は仮想化されており、init PID はちゃんと 1 になっている。
- ネットワーク
- ネットワークデバイスは仮想化されていて、固有の IP アドレスを持っていて、iptables やルーティングは独自のを持てる。
- デバイス
- 必要ならば、コンテナはネットワークインターフェイス、シリアルポート、ディスクパーティションなどリアルデバイスにアクセスすることが出来る。
- IPC オブジェクト
- 共有メモリ、セマフォ、メッセージパッシングなども独立している。
[編集] リソース管理
OpenVZ のリソース管理は、ディスククォータ、CPU スケジューラー、I/O スケジューラー、ユーザービーンカウンタからなる。これらのリソースはコンテナが実行中に再起動することなしに変更することが可能。
[編集] ディスククォータ
各コンテナは個別のディスククォータを持ち、ディスクブロック数とinode数(大旨、ファイル数になる)で管理される。コンテナ内では、標準的なツールでユーザーごとやグループごとにディスククォータをかけることも出来る。
[編集] CPU スケジューラー
OpenVZ の CPU スケジューラーは公平なスケジューリング戦略を2段階で実装している。
第1段階では、コンテナごとの cpuunit 値に基づいて、スケジューラは CPU タイムスライスをどのコンテナに割り振るか決める。第2段階では、標準の Linux のスケジューラがコンテナ内のどのプロセスを実行するか、Linux のプロセス優先順位に基づいて決める。
コンテナごとに異なる cpuunit 値を割り振ることが出来る。CPU 利用時間は cpuunit 値に比例して分配される。
全 CPU 時間の10% など、厳密に限界値を設定することも出来る。
[編集] I/O スケジューラー
上記の CPU スケジューラー同様、OpenVZ では I/O スケジューラーも同様に2段階で行っている。Jens Axboe の CFQ (Completely Fair Queuing) I/O スケジューラーを利用している。
それぞれのコンテナは I/O の優先順位を持っていて、利用可能な I/O 帯域をその優先順位に基づいて分配する。それ故、一つのコンテナが I/O を使い果たすということは出来なくなっている。
[編集] ユーザービーンカウンタ
ユーザービーンカウンタはコンテナごとに設定され、最低値と上限値を設定する。21項目ある。あらゆる側面で設定可能であり、コンテナがシステムリソースを使い果たすことを制限することが出来る。
項目一覧。
- 主要なパラメータ
- numproc - プロセス数
- numtcpsock - TCPソケット数
- numothersock - TCP以外のソケット数
- vmguarpages
- 二次的なパラメータ
- kmemsize - カーネル内のスワップ不可能メモリサイズ
- tcpsndbuf - TCP送信バッファ
- tcprcvbuf - TCP受信バッファ
- othersockbuf - 他のソケットのバッファ
- dgramrcvbuf - データグラム(UDP)受信バッファ
- oomguarpages
- privvmpages
- 補助的なパラメータ
- lockedpages - スワップされないメモリ
- shmpages - 共有メモリ
- physpages - 物理メモリサイズ
- numfile - オープンファイル数
- numflock - ファイルロック数
- numpty - pty数
- numsiginfo - siginfo数
- dcachesize
- numiptent - NETFILTER (IPパケットフィルタリング)数
- swappages - スワップメモリサイズ
[編集] ライセンス
OpenVZは、GPLバージョン2に基づいて配布されている。同技術を使用した商用ソフトとしてParallelsが販売するParallels Virtuozzo Containers for Linuxがある。
[編集] 関連項目
- Parallels Virtuozzo Containers
- Parallels Workstation, Parallels Desktop
- Xen
- libvirt
- LXC
- Linux-VServer
[編集] 参照
- ^ VSwap - OpenVZ Linux Containers Wiki
- ^ Bug#642380: Cannot chkpnt (live migrate) VEs - linux.debian.kernel
- ^ OpenVZ - Community Ubuntu Documentation
- ^ Kirill Kolyshkin - Google+ - Good news Debian OpenVZ users. Now you can install RHEL6-based kernels in a pretty simple way
[編集] 外部リンク
|
|||||||||||||||||||||||||||||||||