| オープンVZ | |
|---|---|
| 開発者 | VirtuozzoとOpenVZコミュニティ |
| 初回リリース | 2005 (2005年) |
| リポジトリ | |
| 書かれた | C |
| オペレーティング·システム | リナックス |
| プラットフォーム | x86、x86-64 |
| 入手可能な | 英語 |
| タイプ | OSレベルの仮想化 |
| ライセンス | GPLv2 |
| Webサイト | openvz.org |
OpenVZ(Open Virtuozzo)は、Linux向けのオペレーティングシステムレベルの仮想化技術です。物理サーバー上で、コンテナ、仮想プライベートサーバー(VPS)、仮想環境(VE)と呼ばれる複数の独立したオペレーティングシステムインスタンスを実行できます。OpenVZは、 SolarisコンテナやLXCに類似しています。
OpenVZと他の仮想化技術の比較
VMware、Xen、KVMなどの仮想化技術は完全な仮想化を提供し、複数のオペレーティングシステムや異なるカーネルバージョンを実行できますが、OpenVZは単一のLinuxカーネルを使用するため、Linuxのみを実行できます。すべてのOpenVZコンテナは同じアーキテクチャとカーネルバージョンを共有します。これは、ゲストがホストとは異なるカーネルバージョンを必要とする状況では不利になる可能性があります。しかし、真のハイパーバイザーのようなオーバーヘッドがないため、非常に高速で効率的です。[ 1 ]
OpenVZのメモリ割り当てはソフトで、ある仮想環境で使用されていないメモリは他の仮想環境で使用したり、ディスクキャッシュに使用したりできます。以前のバージョンのOpenVZでは共通のファイルシステム(各仮想環境はchrootによって分離されたファイルディレクトリ)を使用していましたが、現在のバージョンのOpenVZでは各コンテナが独自のファイルシステムを持つことができます。[ 2 ]
カーネル
OpenVZカーネルは、OpenVZコンテナのサポートを追加するために修正されたLinuxカーネルです。この修正されたカーネルは、仮想化、分離、リソース管理、チェックポイント機能を提供します。vzctl 4.0以降、OpenVZはパッチを適用していないLinux 3.xカーネルでも、機能セットが制限された状態で動作します。[ 3 ]
仮想化と分離
各コンテナは独立したエンティティであり、物理サーバーとほぼ同様に動作します。それぞれに以下の機能があります。
- ファイル
- システムライブラリ、アプリケーション、仮想化
/proc、/sys仮想化ロックなど。 - ユーザーとグループ
- 各コンテナには独自のルート ユーザーと、その他のユーザーおよびグループが存在します。
- プロセスツリー
- コンテナは自身のプロセス( から始まる
init)のみを認識します。PIDは仮想化されているため、init PID は 1 になります。 - ネットワーク
- 仮想ネットワーク デバイス。これにより、コンテナーは独自のIP アドレス、 netfilter (
iptables)のセット、およびルーティングルールを持つことができます。 - デバイス
- 必要に応じて、ネットワーク インターフェイス、シリアル ポート、ディスク パーティションなどの実際のデバイスへのアクセスを任意のコンテナーに許可できます。
- IPCオブジェクト
- 共有メモリ、セマフォ、メッセージ。
リソース管理
OpenVZのリソース管理は、2段階のディスククォータ、公平なCPUスケジューラ、ディスクI/Oスケジューラ、そしてユーザーBeanカウンタ(下記参照)の4つのコンポーネントで構成されています。これらのリソースはコンテナの実行中に変更できるため、再起動は不要です。
- 2段階のディスククォータ
- 各コンテナは、ディスクブロックとinode (おおよそのファイル数)を単位とした独自のディスククォータを設定できます。コンテナ内では、UNIX標準ツールを使用して、ユーザーごとおよびグループごとにディスククォータを設定できます。
- CPUスケジューラ
- OpenVZのCPUスケジューラは、フェアシェアスケジューリング戦略の2段階実装です。第1段階では、スケジューラはコンテナごとのCPUユニット値に基づいて、どのコンテナにCPUタイムスライスを割り当てるかを決定します。第2段階では、標準Linuxスケジューラが標準Linuxプロセス優先度を使用して、そのコンテナ内で実行するプロセスを決定します。各コンテナのCPUに異なる値を設定することも可能です。実際のCPU時間はこれらの値に比例して配分されます。さらに、OpenVZは、総CPU時間の10%(
--cpulimit)などの厳密なCPU制限の設定、コンテナで利用可能なCPUコア数の制限(--cpus)、コンテナを特定のCPUセットにバインドする(--cpumask)などの方法を提供しています。[ 4 ] - I/Oスケジューラ
- 前述のCPUスケジューラと同様に、 OpenVZのI/Oスケジューラも2層構造で、 2層目にJens Axboe氏によるCFQ I/Oスケジューラを採用しています。各コンテナにはI/O優先度が割り当てられ、スケジューラは割り当てられた優先度に応じて利用可能なI/O帯域幅を分配します。そのため、単一のコンテナがI/Oチャネルを飽和させることはありません。
- ユーザー Beancounters
- User Beancounters はコンテナごとのカウンタ、制限、保証のセットであり、単一のコンテナがシステムリソースを独占するのを防ぐことを目的としています。現在の OpenVZ カーネル (RHEL6 ベースの 042stab*) には 2 つの主要なパラメータがあり、その他はオプションです。[ 5 ]その他のリソースは主にメモリと、プロセス間通信の共有メモリセグメントやネットワークバッファなどのさまざまなカーネル内オブジェクトです。各リソースは から確認でき
/proc/user_beancounters、現在の使用量、最大使用量 (コンテナの存続期間中)、バリア、制限、失敗カウンタの 5 つの値が関連付けられています。バリアと制限の意味はパラメータに依存します。簡単に言うと、これらはソフト制限とハード制限と考えることができます。いずれかのリソースが制限に達すると、その失敗カウンタが増加します。これにより、コンテナの所有者は /proc/user_beancounters を監視することで問題を検出できます。
チェックポイントとライブマイグレーション
2006年4月中旬、OpenVZ向けにライブマイグレーションとチェックポイント機能がリリースされました。これにより、コンテナをシャットダウンすることなく、ある物理サーバーから別の物理サーバーへ移動することが可能になります。このプロセスはチェックポイントと呼ばれ、コンテナは凍結され、その状態全体がディスク上のファイルに保存されます。このファイルを別のマシンに転送することで、コンテナを解凍(復元)できます。この遅延は約数秒です。状態は通常完全に保存されるため、この一時停止は通常の計算遅延のように見えるかもしれません。
制限事項
OpenVZはデフォルトでコンテナのアクセスを実際の物理デバイスに制限しています(これによりコンテナはハードウェアに依存しなくなります)。OpenVZ管理者は、ディスクドライブ、USBポート、[ 6 ] PCIデバイス[ 7 ]物理ネットワークカード[ 8 ]など、様々な実際のデバイスへのコンテナのアクセスを有効にすることができます。
/dev/loopNループデバイスはカーネルスレッドを使用するため、セキュリティ上の問題が発生する可能性があり、デプロイメントにおいて制限されることがよくあります。そのため、ディスクイメージのマウント機能が制限されます。回避策としては、FUSE を使用することです。
OpenVZ は、PPP ベースの一部の VPN テクノロジ(PPTP/L2TP など)と TUN/TAP のみを提供しています。IPsecはカーネル 2.6.32 以降、コンテナ内でサポートされています。
EasyVZと呼ばれるグラフィカルユーザーインターフェースは2007年に試みられましたが[ 9 ] 、バージョン0.1以降は開発されませんでした。Proxmox VEはバージョン3.4まではOpenVZベースのGUIを備えたサーバー仮想化環境として使用できましたが、その後のバージョンではLXCに切り替えられました。
参照
参考文献
- ^ 「サーバー統合のための仮想化技術のパフォーマンス評価」 。2009年1月15日時点のオリジナルよりアーカイブ。
- ^ 「Ploop - OpenVZ Linux Containers Wiki」 。2012年3月26日時点のオリジナルよりアーカイブ。
- ^ Kolyshkin, Kir (2012年10月6日). 「OpenVZは7周年を迎え、ギフトをご用意しました!」 OpenVZブログ. 2013年1月17日閲覧。
- ^ vzctl(8) マニュアルページ、CPU フェア スケジューラ パラメータ セクション、 http://openvz.org/Man/vzctl.8#CPU_fair_scheduler_parameters 2017-04-14 にWayback Machineでアーカイブ
- ^ 「VSwap - OpenVZ Linux Containers Wiki」 。2013年2月13日時点のオリジナルよりアーカイブ。
- ^ vzctl(8) マニュアルページ、デバイスアクセス管理サブセクション、 http://wiki.openvz.org/Man/vzctl.8#Device_access_management
- ^ vzctl(8) マニュアルページ、PCI デバイス管理セクション、 http://wiki.openvz.org/Man/vzctl.8#PCI_device_management
- ^ vzctl(8) マニュアルページ、ネットワークデバイスセクション、 http://wiki.openvz.org/Man/vzctl.8#Network_devices_control_parameters
- ^ EasyVZ: OpenVZ のグラフィックス。 Linux 仮想化のためのフロントエンド