OpenVZとは
OpenVZ(オープンブイジー)は、
Linuxカーネルをベースにした
オペレーティングシステムレベルの
サーバー
仮想化ソフトウェアです。Red Hat Enterprise
Linux (RHEL) 環境での利用を主眼に開発され、Parallels Virtuozzo Containers for
Linuxのオープンソース版として知られています。
概要
OpenVZは、一つの物理
サーバー上に複数の独立した
Linuxインスタンス(コンテナ)を効率的に作成することを可能にします。ただし、全てのコンテナで
Linuxカーネルを共有するため、
Linux以外の
オペレーティングシステム(Windowsなど)を動作させることはできません。
特徴
軽量性と高密度性
ハイパーバイザー型の
仮想化ソフトウェア(
VMwareやXenなど)と比較して、OpenVZはオーバーヘッドが少ないという利点があります。これにより、より多くの仮想環境を一つの物理
サーバー上で稼働させることができ、特にバーチャル・プライベート・
サーバー (VPS) 環境でのコスト削減に貢献します。
チェックポイントとライブマイグレーション
OpenVZは、チェックポイント機能とライブマイグレーション機能をサポートしています。これにより、稼働中のゲストOS(コンテナ)を別の物理
サーバーへ中断することなく移動させることができます。
ファイルシステムにploopを使用した場合、スナップショット機能により
ファイルシステムの復元や変更差分の管理も可能です。
メモリ管理の柔軟性
RHEL 5版では仮想メモリ単位でのみメモリ制限が可能でしたが、RHEL 6およびそれ以降では、cgroupsの進化により、物理メモリやスワップメモリに対しても制限を設定できるようになりました。これにより、コンテナ内の物理メモリが枯渇した場合でも、ホスト側の物理メモリが余っている間はディスクへの書き出しを遅らせることで、より柔軟なメモリ管理が実現できます。
対応OS
OpenVZは、公式にはRHELのみをサポートしていますが、RHELクローンのCentOSでも動作します。Parallels Virtuozzo ContainersではCentOSも公式にサポートされています。
カーネルの改造が行われているため、ディストリビューションやバージョンへの依存度が高い点に注意が必要です。
その他のOS
UbuntuやDebianなど、他の
LinuxディストリビューションでもOpenVZを利用することは可能です。ただし、インストールにはRPMファイルをdeb形式に変換するなどの追加の手順が必要です。
OpenVZで使用される
カーネルは、
LinuxカーネルにOpenVZコンテナのサポートを追加したものです。この修正された
カーネルは、
仮想化、コンテナの隔離、リソース管理、チェックポイント機能などを提供します。
OpenVZでは、各コンテナは独立した物理
サーバーのように動作し、以下の要素が隔離されています。
- - ファイルシステム:システムライブラリ、アプリケーション、仮想化された/procや/sysなど。
- - ユーザーとグループ:各コンテナは独自のrootユーザーを持ち、ユーザーやグループは独立。
- - プロセスツリー:独立したプロセスを持ち、プロセスID (PID) が仮想化されています。
- - ネットワーク:仮想化されたネットワークデバイスを持ち、固有のIPアドレスやルーティング設定が可能。
- - デバイス:必要に応じて、ネットワークインターフェース、シリアルポート、ディスクパーティションなどのデバイスへのアクセスが可能。
- - IPCオブジェクト:共有メモリ、セマフォ、メッセージパッシングなども独立。
リソース管理
OpenVZのリソース管理は、ディスククォータ、
CPUスケジューラー、I/Oスケジューラー、ユーザービーンカウンタで構成されます。これらのリソースは、コンテナの実行中でも再起動せずに変更可能です。
ディスククォータ
各コンテナにはディスクブロック数とinode数(ファイル数)で管理される個別のディスククォータが設定できます。
CPUスケジューラー
OpenVZの
CPUスケジューラーは2段階の公平なスケジューリング戦略を採用しています。
- - 第1段階:コンテナごとのcpuunit値に基づいて、CPUタイムスライスを割り当て。
- - 第2段階:標準のLinuxスケジューラーがコンテナ内のどのプロセスを実行するか決定。
I/Oスケジューラー
I/Oスケジューラーも同様に2段階で処理を行います。CFQ I/Oスケジューラーを採用し、各コンテナのI/O優先度に基づいて利用可能なI/O帯域を分配します。
ユーザービーンカウンタ
ユーザービーンカウンタは、コンテナごとのリソース制限を設定するためのものです。21項目があり、各コンテナがシステムリソースを使い果たすことを防ぎます。
主要なパラメータ
- - numproc (プロセス数)
- - numtcpsock (TCPソケット数)
- - numothersock (TCP以外のソケット数)
- - vmguarpages (保証される仮想メモリページ数)
二次的なパラメータ
- - kmemsize (カーネル内のスワップ不可メモリサイズ)
- - tcpsndbuf (TCP送信バッファ)
- - tcprcvbuf (TCP受信バッファ)
- - othersockbuf (他のソケットのバッファ)
- - dgramrcvbuf (データグラム受信バッファ)
- - oomguarpages (OOM時の保証仮想メモリページ数)
- - privvmpages (プライベート仮想メモリページ数)
補助的なパラメータ
- - lockedpages (スワップされないメモリ)
- - shmpages (共有メモリ)
- - physpages (物理メモリサイズ)
- - numfile (オープンファイル数)
- - numflock (ファイルロック数)
- - numpty (pty数)
- - numsiginfo (siginfo数)
- - dcachesize (dキャッシュサイズ)
- - numiptent (NETFILTERのエントリー数)
- - swappages (スワップメモリサイズ)
OpenVZは、GPLバージョン2に基づいて配布されています。関連する商用
ソフトウェアとして、パラレルスが提供するParallels Virtuozzo Containers for
Linuxがあります。
関連項目
- - Parallels Virtuozzo Containers
- - Parallels Workstation, Parallels Desktop
- - Xen
- - libvirt
- - LXC
- - Linux-VServer
外部リンク