Virtualizition & High Availability(Part1)

仮想化の概念と理論

  仮想化とは

仮想化(Virtualization)はメモリやCPUなどの物理的なハードウェアリソースをユーザに隠蔽し、論理的なリソースを提供する技術・仕組みです。

仮想化されるハードウェアによって「仮想CPU」、「仮想メモリ」、「仮想ネットワーク」などと呼びますが、1台のコンピュータマシンそのものを仮想化した場合は「仮想マシン」、「仮想ホスト」、「仮想サーバ」などと呼びます。

  • 仮想化のメリット
    • 複製や移動が安易し、柔軟性と拡張性を向上させる
    • コスト削減
      • サーバの設置スペースが減る
      • サーバの調達や運用・管理コストが減る
      • 消費電力などのランニングコストが減る

  • 仮想化のデメリット
    • 性能劣化が発生しやすい
    • 障害発生し原因特定が難しい
    • アプリケーションの動作検証が必要
    • 運用管理者のスキル、ノウハウが必要
    • 仮想化環境固有セキュリティ問題がある

  仮想化方式の種類

仮想化はソフトウェアによって提供される仕組みで、そのソフトウェアを「仮想化ソフトウェア」や「仮想マシンモニタ(VMM:Virtual Machine Monitor)」といいます。

  1. ホストOS型
    物理的なハードウェア上にOSをインストールし、そのOSに仮想化ソフトウェアを設置して仮想マシンを作成・動作させる方式です。仮想化ソフトウェアが設置されるOSを「ホストOS」といい、仮想化ソフトウェアで作成した仮想マシンを「ゲストOS」といいます。
    ・VMware Workstation
    ・Microsoft Virtual PC
    ・Virtual Box


  2. ハイパーバイザー型
    物理ハードウェア上にハイパーバイザーという仮想化ソフトウェアをインストールし、仮想マシンを作成・動作させる方式です(ホストOSが要らない)。ホストOSを介する処理オーバーヘットがないためホストOS型よりパフォーマンスに優れています。
    ・VMware ESXi
    ・Xen / Citrix XenServer
    ・Microsoft Hyper-V


    2-1. 準仮想化(PV:Para-Virtualization)
     通常の環境ならアプリケーションのシステムコール(処理命令)はOSのカーネルが処理しますが、準仮想化環境ではOSのカーネル(ゲストOS)ではなく更に上のシステムであるハイパーバイザーが処理します。つまり、仮想ハードウェアではなく物理ハードウェアが処理するためパフォーマンスがいいです。しかし、このような設定をするためにはゲストOSのコードを修正する必要があるため、OpenSourceであるLinuxしかできないです。

    2-2. 完全仮想化(Full Virtualization)
     OSのソースコードを改変することなくそのままゲストOSとして利用する仮想化方式です。利便性がある反面、I/O命令や割り込み、メモリ管理などを仮想ハードウェアによる「ハードウェアエミュレーション」が行うため、準仮想化に比べて処理オーバーヘットが大きく、パフォマンスが劣化する可能性があります。

  3. コンテナ型
    物理ハードウェア上にOSをインストールし、コンテナエンジンを設置して仮想環境(コンテナ)を動かす方式です。一見ホストOS型と似ていますがコンテナにはOSや仮想ハードウェアが含まれてないためホストOSのリソースを共有して動作します。ゲストOSがない分、パフォーマンスに優れ、消費電力も少ない、構成自動化や運用管理が安易ですが、ホストOSと異なるOSの使用ができないです。
    ・OpenVZ
    ・LXC
    ・Linux VServer
    ・Docker
    ・Oracle Solaris Zones


  仮想マシンの移行(マイグレーション)

物理サーバを仮想化基盤に移行したり、物理サーバ間で仮想サーバを移行するなど仮想マシン移行作業を「マイグレーション」といいます。

  • P2V(Physical to Virtual)
    物理サーバから仮想サーバへのマイグレーション

  • V2V(Virtual to Virtual)
    仮想化プラットフォーム間における仮想マシンマイグレーション
    ・サーバを停止せず移行する「ライブマイグレーション」機能の利用が可能

  CPUモード(特権レベル)

CPUが備えている機能をプログラムがどの程度まで利用できるかを表す概念です。
  • 特権モード(カーネルモード)
    CPUの機能すべてを無制限で利用できるモードであり、その際の命令を「特権CPU命令」といいます。

  • ユーザモード
    制限されたCPUモードで通常アプリケーションはこのモードで実行されます。
OSやデバイスドライバなどのプログラムなら特権モードで動作しますが、OS上で動作するアプリケーションプログラムが特権モードで動作してしまうとリソース占有や破壊などの致命的な問題を発生する恐れがあります。そのため、アプリケーションプログラムから特権モードのCPU命令が発生した場合はOSがその処理を代行する仕組みになっています。

ただ、物理マシンからみると仮想マシンのOSもアプリケーションとなるため、特権モードのCPU命令を実行することができません。その問題を解決するためにハイパーバイザーコールができるようにすればいいですが、WindowsはOS改変ができないため「バイナリトランスレーション」もしくは「CPU仮想化支援機能」が利用されます。


■ネットワーク分野では、「SDN(Software Defined Network)」と呼ばれるソフトウェによるネットワークの仮想化技術が普及してきています。
■コンテナ(Container)は、アプリケーションの実行環境だけ提供し、OSや仮想ハードウェアが含まれてないため仮想マシンの用語は使わない。
■バイナリトランスレーションは、仮想マシンから発行された特権モードのCPU命令をユーザモードのCPU命令として処理し、結果を仮想マシンに返す方法。トランスレーション処理がオーバーヘットとなり性能が劣化しやすい。

댓글