仮想化技術ってなんだろう?なぜ必要なの??
仮想化とはハードウェアを抽象化しその上で動作するアプリケーションに対して共通のプラットフォームを提供することで、仮想化技術はそれを実現するための技術です。【連載コラム:仮想化技術をしっかり解説します(1)】
仮想化技術とは、ハードウェア(物理)の機能をソフトウェア(論理)によって実現する技術です。ITインフラの技術では、物理的なマシンを仮想化した「仮想マシン」、物理的なネットワークを仮想化した「仮想ネットワーク」などがあります。さらにコンピューター自身も一種の仮想化が行われていて、OSやデバイスドライバなどでハードウェアの違いを仮想化(あるいは抽象化)して、その上で動作するアプリケーションに対して共通のプラットフォームを提供します。
目次
仮想マシン
仮想マシンは物理的な1台のハードウェアに対して1つのOSを動作させる、すなわち同時に複数のOSを動作させられない制約を解消する技術といえます。仮想マシンを実現するソフトウェア(仮想化ソフトウェア)が仮想的なマシンを動作させ、そこでOSやアプリケーションを動作させることができます。
仮想化ソフトウェアは複数の仮想マシンを同時に動作させることができるので、同時にいくつものOSを並行して動作させることができます。もちろん、対応しているOSであれば、種類やバージョンを混在させることもできます。
どうして仮想化技術が必要か
では、どうして仮想化技術(仮想マシン)が必要なのでしょうか。いくつか理由がありますが、代表的なものとしては「リソースの有効活用」と「可搬性」が挙げられます。
リソースを分割して有効活用
ハードウェアの進歩と共に、CPUは実際に計算を行う「コア」の数が増え、メモリやストレージ(ハードディスクやSSD)も大容量化していきました。これらのハードウェアリソースを1つのOSで使い切ることができなくなってきました。そこで仮想マシンを同時に複数動作させることで、リソースを分割して有効活用する方法が取られるようになりました。
CPUの複数のコア(マルチコア)は、それぞれ必要な数だけ仮想マシンに割り当てられます。また、CPUは常時100%使用しているわけではないので、必要に応じて仮想マシンに処理時間が割り当てられることでさらに有効な使用率を高められます。
メモリは、基本的に必要な分だけ仮想マシンに割り当てられて、消費されます。ただし、メモリもOS内で常にすべて使われるわけではないので、必要な分だけ割り当てることで多少効率良くメモリを利用させることができます。
ストレージも必要な分だけ割り当てられますが、最大容量を決めておくことで使った分だけストレージを消費させることができるので、こちらも効率良く容量を利用させることができます。
可搬性
仮想マシンの実体は、仮想的なストレージとして見える仮想ディスクファイルです。物理マシンが物理的なストレージをそのまま使うため、他のマシンに移したり、バックアップしたりするのが面倒であるのに対して、仮想ストレージは単なるファイルとして容易に扱うことができます。このような特長を「可搬性が高い」と言います。
たとえば、仮想マシンのバックアップを取りたいのであれば、仮想ストレージファイルと関連するファイルを一式でコピーするだけです。
また、複数の仮想マシンを実行するホスト(仮想化ホスト)から共有されるストレージにファイルを置いておけば、どの仮想化ホストでも仮想マシンを実行できます。たとえば、仮想化ホストをメンテナンスしたい時には、仮想マシンを別に仮想化ホストに移動させることでメンテナンスのために電源オフにしたり、再起動したりできます。もし仮想化ホストが障害で止まってしまったとしても、他の仮想化ホストで再起動することでシステムを継続して動作させることができます。
このような複数の仮想化ホストを用意する構成を「冗長構成」と呼び、業務システムなど重要なシステムを動作させる際の基本構成となります。
コンテナ
Dockerなどのコンテナ技術も一種の仮想化技術です。仮想マシンがハードウェアまるごとを論理的に実行するのに対して、コンテナはOSは共通のカーネルを利用し、アプリケーションの実行環境だけを別々のものとして分離しています。
カーネルの領域を「カーネル空間」、アプリケーションが動作している領域を「ユーザー空間」と呼ぶことがありますが、仮想マシンはカーネル空間とユーザー空間の両方を分離しているのに対して、コンテナはユーザー空間のみ分離していると考えると良いでしょう。そのため、たとえばLinuxカーネル上で動作しているコンテナは単一のカーネルを共有しているので、異なるバージョンや設定のカーネルを同時に動かすことはできません。
ネットワークの仮想化
仮想マシンだけでなく、ネットワークの仮想化もよく利用されています。ネットワークの仮想化にはVLANやVPNなどがあります。
VLAN
VLANは、スイッチングハブに接続されているネットワークを仮想的に別々のものとして扱う技術です。レイヤー2、すなわちイーサネットのレイヤーで分離するため、IP通信をやり取りするためにはルーティングが必要となります。
VLANには、スイッチの物理ポートで分割を行う「ポートVLAN」と、イーサネットのフレームにタグIDをつけてどのVLANのフレームかを区別する「タグVLAN」があります。接続形態や目的などに応じて設定を使い分けるとよいでしょう。
VPN
VPNは、別々のネットワークをあたかも1つのネットワークのように扱う技術です。たとえば別々の拠点を繋いだり、リモートから接続してくるPCをLANの中に接続しているように扱うものなどがあります。
VPNは接続に使用するプロトコルなども含めて、多種多様なものがあるので一概に分類を説明をするのが難しいですが、よく出てくるものをいくつか紹介します。
SSL VPN
HTTPSなどで使用されているSSL/TLS同様、プロトコルを暗号化して接続するVPN。
IPsec
拠点間VPNなどでよく使用される方式。
OpenVPN
Linux上でよく使用されるVPNソフトウェア。
WireGuard
新たにLinuxカーネルでサポートされるようになったVPN。OpenVPNに比べて設定が容易。
仮想化技術は必須の技術に
仮想化技術はオンプレミス、クラウド問わず、現在では必須の技術となっており、インフラエンジニアも一通り基礎を覚えておく必要があるものとなりました。この連載では、実際に動かして試してみることも含めて、仮想化、クラウドについて理解を深められるように解説をしていく予定です。
- 筆者紹介
宮原 徹 氏
Linux標準教科書、Linuxサーバー構築標準教科書などの監修者。LinuCレベル1/レベル2 Version10.0の改訂作業にも協力。また、幅広いOSSに関する情報提供の場として「オープンソースカンファレンス(OSC)」の企画運営も。
バックナンバー
第10回:クラウド利用の留意点
第9回:オンプレミスのクラウド環境
第8回:たくさんあるぞ!クラウドサービス
第7回:クラウド〜仮想化技術の活用系〜
第3回:第3のサーバー環境「コンテナ」
第2回:仮想化の種類と特徴