| OpenVZ | |
|---|---|
| 開発者 | アンドレイ・サヴォチキン |
| 最新バージョン | 3.0 (2006 年 4 月) |
| 環境 | Linux |
| 親切 | 仮想化 |
| ライセンス | GNU/GPL |
| Webサイト | OpenVZ.org |
OpenVZは、Linux カーネルに基づくオペレーティング システム レベルの仮想化テクノロジです。 OpenVZ を使用すると、物理サーバーで、仮想プライベート サーバー (VPS) または仮想環境 (VE) と呼ばれる、複数の分離されたオペレーティング システム インスタンスを実行できます。
VMwareなどの仮想マシンや Linuxなどの準仮想化テクノロジと比較すると、VE によって異なる可能性があります)。ただし、OpenVZ の OS レベルの仮想化は、代替手段よりも優れたパフォーマンス、優れたスケーラビリティ (つまり、進化)、優れた密度、優れた動的リソース管理、および優れた管理の容易さを提供します。 OpenVZ Web サイトによると、この仮想化方法によるパフォーマンスの低下は非常に小さく、物理コンピュータと比較してわずか 1 ~ 3% の損失です。
OpenVZ は、SWsoft, Inc. が提供する独自製品である Virtuozzo の基盤です。OpenVZ は、 GNU General Public Licenseバージョン 2 に基づいて配布されています。
OpenVZ には、Linux カーネルと一連のユーザー コマンドが含まれています。
コア
OpenVZ カーネルは、仮想環境の概念を追加する修正された Linux カーネルです。カーネルは、仮想化、分離、リソース管理、チェックポイント/再起動を提供します。
仮想化と分離
VE は別個のエンティティであり、その所有者の観点からは、実際の物理サーバーのように見えます。各 EV には独自のものがあります。
- ファイル
- システム ライブラリ、アプリケーション、仮想化された /proc および /sys、仮想化されたロックなど。
- ユーザーとグループ
- 各 VE には独自の root ユーザーのほかに、独自のユーザーとグループがあります。
- プロセスツリー
- 各 VE は、(init から始まる) 独自のプロセスのみを認識します。プロセス識別子(PID) は仮想化されており、初期タスクの PID は本来どおり 1 になります。
- 周辺機器
- 必要に応じて、どの VE にもネットワーク インターフェイス、シリアル ポート、ディスクパーティションなどの実デバイスへのアクセスを許可できます。
- 消費者物価指数
- 共有メモリ、セマフォ、メッセージキュー。
リソース管理
すべての EV は同じコアを使用するため、リソース管理が最も重要です。各 VE はその制限内に収まり、他の VE に影響を与えないようにする必要があります。
OpenVZ のリソース管理は、2 レベルのディスク クォータ、公平な CPU スケジューラ、ユーザー Beancounter の 3 つの要素で構成されています。これらのリソースはすべて、VE の実行中に再起動することなく変更できます。たとえば、適切なパラメータをオンザフライで変更することで、より多くのメモリをオンザフライで VE に割り当てることができます。これは、VM やハイパーバイザーなどの他の仮想化アプローチでは不可能または複雑なことが多い機能です。
2 層ディスク クォータ
ホスト システム(OpenVZ) の root ユーザーは、ディスク ブロックと i ノード (ファイル数のプラスまたはマイナス) に関して指定された、VE ごとのディスク クォータを設定できます。これはディスク クォータの第 1 レベルです。これらに加えて、VE 所有者 (root ユーザー) は、自分の VE 内で通常のクォータ管理ツールを使用して、ユーザーごとおよびUNIXグループごとに標準のディスク クォータを設定できます。
ディスク クォータを変更するだけで (つまり、ディスク パーティションのサイズを変更する必要がなく)、VE にディスク スペースを動的に割り当てることができます。
公平な CPU スケジューラ
OpenVZ CPU スケジューラも 2 レベルです。最初のレベルでは、スケジューラは VE あたりの CPU ユニットに基づいて、タイム スライスをどの VE に割り当てるかを決定します。 2 番目のレベルでは、標準の Linux スケジューラが、標準のプロセス優先順位を使用して VE で実行するプロセスを決定します。
OpenVZ 管理者は、異なる VE に異なる cpuunit 値を設定でき、CPU 時間はそれらに比例して割り当てられます。
たとえば、利用可能な CPU 時間の 10% に CPU 時間を制限することもできます。
Beancounter ユーザー
ユーザー Beancounter は、VE ごとのカウンター、制限、および保証のセットです。 EV の動作のあらゆる側面をカバーするために慎重に選択された約 20 個のパラメーターのセットがあります。したがって、ノード全体に制限されているリソースを VE が悪用して、別の VE に損害を与えることはできません。
カウントおよび制御されるリソースは、主にメモリと、共有メモリ セグメント、ネットワーク バッファなどのさまざまなカーネル オブジェクトです。各リソースは/proc/user_beancountersから表示でき、それに関連付けられた 5 つの値: 現在の使用量、最大使用量 (VE の存続期間中)、バリア、制限、および失敗カウンターです。バリアと制限の意味はパラメータによって異なります。つまり、これらはソフト リミットとハード リミットと考えることができます。いずれかのリソースが制限に達すると、障害カウンタが増加するため、VE 所有者は、VE の /proc/user_beancounters の出力を分析することで、何か問題が発生しているかどうかを確認できます。
チェックポイントとライブ マイグレーション
OpenVZ のライブ マイグレーションおよびチェックポイント機能は、2006 年 4 月中旬に発表されました。これにより、VE を停止/再起動することなく、ある物理サーバから別の物理サーバに VE を移行できます。このプロセスはアプリケーション チェックポイントと呼ばれます。VE はフリーズされ、その状態全体がディスク上のファイルに保存されます。このファイルは、VE を復元できる別のマシンに転送できます。移行の遅延は数秒ですが、これはダウンタイムではなく、単なる遅延です。
オープン ネットワーク接続を含む VE 状態のすべてのビットが保存されます。ユーザーの観点からは、これは応答の遅延のように見えます。データベーストランザクションには通常よりも長い時間がかかり、VE の再起動時にユーザーは自分のデータベースがすでに別のマシンで実行されていることに気づきません。
この機能により、再起動を必要とせずにサーバーを更新するなどのシナリオが可能になります。データベースにさらに多くのメモリまたは CPU が必要な場合は、新しいサーバーを購入し、そこに VE を移行してから、その制限をスケールアップします。サーバーに RAM を追加する場合は、すべての VE を別のサーバーに移行し、最初の VE をシャットダウンしてメモリを追加し、再起動してすべての VE を再移行します。

ユーザーコマンド
OpenVZ には、VE を制御するためのコマンドラインツール(vzctl) と、VE にソフトウェアをインストールするためのツール (vzpkg) が付属しています。

vzctl
EVを制御するためのシンプルなコマンドラインツールです。
- vzctl VEID の作成 [--ostemplate
] [--config 】 - このコマンドは、VEID のデジタルID を使用して新しい仮想環境を作成します。この仮想環境は、OS テンプレート (Linux ディストリビューション) に基づき、コマンド ラインで指定された構成ファイルから取得されたリソース管理パラメータを持ちます。 --ostemplateと--config の両方のパラメータはオプションであり、グローバル設定ファイルで定義されたデフォルト値があります。
- vzctl VEID の開始
- 特定の VE をブートします。これは、カーネル内に仮想環境コンテキストを作成し、すべてのリソース管理パラメータを配置して、そのコンテキスト内で VE の/sbin/init を開始することを意味します。
- vzctl VEID を停止します
- 指定された VE を停止します。 EV は、所有者が標準の/sbin/haltまたは/sbin/rebootコマンドを使用してシャットダウン (または再起動) することもできます。
- vzctl exec VEID
- VE 内でコマンドを実行します。 VE 102 内のプロセスのリストを表示するには、 vzctl exec 102 ps axコマンドを実行するだけです。
- vzctl VEID を入力
- VE シェルを開きます。これは、たとえば、この VE で sshd が停止しており、トラブルシューティングを行う場合に便利です。
- vzctl セット VEID --パラメータ
[...] [ - 保存] - VE の設定を割り当てます。さまざまな設定があります。 IP アドレスをVE に追加するには、 vzctl set VEID --ipadd xxxx --saveを実行します。 VE のディスク クォータを変更するには、 vzctl VEID set --diskspace Soft:hard --saveを実行します。 VE のバリアおよびカーネル メモリ制限を設定するには、 vzctl VEID set --kmemsize Barrier:limit --saveを実行します。
テンプレートとvzpkg
テンプレート (フランス語: gabarit) は、新しい VE の作成に使用される事前に作成されたイメージです。大まかに言えば、テンプレートはパッケージのセットであり、テンプレート キャッシュはそれらのパッケージがインストールされた chroot 環境の tarball です。 vzctl の作成ステップ中に、tarball が解凍されます。テンプレート キャッシュ技術を使用すると、新しい VE を数秒で作成できます。
vzpkg ツールは、テンプレート キャッシュの作成を容易にするツールのセットです。現在、rpm および yum タイプのリポジトリをサポートしています。したがって、たとえば Fedora Core 5 ディストリビューション用のテンプレートを作成するには、FC5 rpm を含むリポジトリ セット (yum) とインストールする rpm のセットを指定する必要があります。さらに、インストール前およびインストール後のスクリプトを使用して、テンプレート キャッシュを最適化または変更できます。上記のすべてのデータ (リポジトリ、パッケージ リスト、スクリプト、GPG キーなど) はメタデータ テンプレートを形成します。テンプレート キャッシュはメタデータ テンプレートから自動的に作成できます。 vzpkgcacheユーティリティを実行するだけです。 vzpkgcache は、リストされたパッケージを一時 VE にダウンロードしてインストールし、結果をテンプレート キャッシュとしてパッケージ化します。
非 RPM ディストリビューション用のテンプレート キャッシュも作成できますが、これは手動のプロセスになります。たとえば、 この HOWTO では、 Debianテンプレート キャッシュを作成するための詳細な手順が説明されています。
以下のテンプレート キャッシュ (別名、事前作成テンプレート) が現在 (2006 年 5 月) 利用可能です。
- Red Hat派生製品の
- Fedora Core バージョン 5 (および以前のバージョン: 3 および 4)
- CentOS 4 (4.3)
- Gentoo 2006.0 (20060317)
- openSUSE 10
- Debian Sarge と Etch のダウンロード
- Ubuntu (リンク)
OpenVZの主な機能
スケーラビリティ
OpenVZ は単一のカーネル モデルを使用するため、Linux カーネル 2.6 のように動作します。つまり、最大 64 個のプロセッサと最大 64 ギガバイトのRAMをサポートします。単一の仮想環境を物理マシン全体、つまりすべての CPU とすべての RAM に拡張できます。
実際、単一の OpenVZ 仮想環境をデプロイする場合もあります。これは一見すると奇妙ですが、単一の VE ですべてのハードウェア リソースをネイティブに近いパフォーマンスで使用できると同時に、ハードウェアの独立性、リソース管理、ライブ マイグレーションなどの他のメリットも享受できることを考えると、これは多くのシナリオにおいて明らかな選択です。
密度

OpenVZ は、まともなハードウェア上で何百もの仮想環境に対応できます (主な制限は RAM の量とプロセッサの数です)。
このグラフは、VE の Apache Web サーバーの応答時間と VE の数の関係を示しています。測定は 768 MB (3/4 Gb) の RAM を搭載したマシンで行われました。各 VE は通常のプロセスのセット (init、syslogd、crond、sshd、および apache) を実行しました。 Apache デーモンは http_load によってロードされる静的ページを処理し、最初の応答時間が測定されました。ご覧のとおり、VE の数が増えると、メモリ不足と過剰なスワップにより応答時間が悪化します。
このシナリオでは、3/4 GB の RAM を搭載したマシンで最大 120 の VE を実行できます。これは線形に推定されるため、2 Gb の RAM を搭載したマシンでは最大 320 近くの VE を実行することが可能です。
大量管理
物理 OpenVZ サーバー (ハードウェア ノードとも呼ばれる) の所有者 (ルート) は、VE のすべてのプロセスとファイルを表示できます。これにより、一括管理が可能になります。サーバーの統合に VMware または Xen が使用されているとします。10 個の仮想サーバーにセキュリティアップデートを適用するには、それぞれの仮想サーバーにログインして、アップデート手順を開始する必要があります。 10 台の実際の物理サーバーでも同じことを行います。
OpenVZ の場合は、すべて (または選択した) VE をすぐに更新する単純なスクリプトを実行できます。
使用シナリオ
次の使用シナリオは、すべての仮想化テクノロジに共通です。ただし、OpenVZ のような OS レベルの仮想化には、パフォーマンスがあまり低下しないという独自の利点があり、これらのシナリオがより魅力的になります。
- 安全
- 仮想化により、各ネットワーク サービス (Apache、メール サーバー、DNS サーバーなど) を個別の仮想環境に分離できます。このような状況では、侵入者がアプリケーションの 1 つにセキュリティ ホールを見つけた場合、このサービス自体を悪用することしかできません。他のすべてのサービスは別の VE にあるため、それらにアクセスすることはできません。
- サーバー統合
- 現在、ほとんどのサーバーは十分に活用されていません。 OpenVZ を使用すると、このようなサーバーを仮想環境に移行して統合できます。ラックに必要なスペース、電気代、管理コストが削減されます。
- 宿泊施設
- OS レベルの仮想化により、ホストは仮想化ホスティングを安価に提供できるようになります。各 VE (したがって、最終的には各クライアント) には完全なroot アクセス権が与えられます。これは、VE の所有者があらゆるものを再インストールしたり、Linux IP テーブル (ファイアウォール ルール) などのツールを使用したりできることを意味します。
- 開発とテスト
- 開発者やテスターは多くの場合、多数の Linux ディストリビューションにアクセスする必要があります。場合によっては、これらを最初から再インストールしなければならないこともあります。 OpenVZ を使用すると、優れたパフォーマンスを維持しながら、再起動することなく、これらすべてのディストリビューションを同じコンピュータにすばやくインストールできます (新しい VE は 1 分で作成できます)。 EV のクローン作成も非常に簡単です。EV ゾーンとその構成ファイルをコピーするだけです。
- 教育的
- 各学生は 1 つ以上の VE を持つことができます。さまざまな Linux ディストリビューションで遊ぶことができます。新しい EV は 1分で (再) 作成できます。
類似技術
OS レベルの仮想化の例としては他にも、Linux-VServer、BSD Jail、Solaris ゾーンなどがあります。
今後の展開
2006 年 5 月の時点では、OpenVZパッチは標準の Linux カーネルには組み込まれていません。他にも競合する仮想化テクノロジがあるため、変更をマージできるかどうか、いつ、どのような形式でマージできるかを正確に判断するのは困難です。 LKML については、さまざまな OS レベルの仮想化アプローチ、実装の可能性、およびそれらを含める可能性について、継続的に議論されています。
OpenVZ の進行中の開発には以下が含まれます。
- カーネル 2.6.17 で開発ブランチを安定化します。
- IPv6とブリッジ ネットワークのサポートを追加
- VE に対する VCPU アフィニティの追加
- CFQベースのVE I/Oスケジューラ
- ディストリビューション固有のカーネル (SUSE10、FC5) の保守を継続します。
- 標準カーネルでの仮想化への取り組みを継続する
