Xenでサーバ環境構築その1〜xenについて知ろう〜

Xenでサーバ構築をしたいので、色々調べてみました。

Xenとは何か?仕組みはどうなっているのか?
そして調べていくうちに出てきた、「完全仮想化」と「準仮想化」がどのようなもので、どちらを利用して構築するか?
について、まとめました。

参考にさせていただいたサイトはこちらです。

http://www.valinux.co.jp/contents/tech/techlib/xen/xen_sp_02.html
インストールと環境構築 (1/3):実践! Xenで実現するサーバ統合(1) - @IT
http://www.computerworld.jp/topics/vt/59310.html
第1回 オープンソースの仮想マシン・ソフト「Xen」 | 日経 xTECH(クロステック)
エンタープライズサーバ ES7000シリーズ【日本ユニシス】
第1回 ●仮想化とは何か | 日経 xTECH(クロステック)

Xenとは?

一つのハードウェアを、複数のハードウェアがあるかのように扱う事ができる「仮想化」を実現し、その仮想化されたハードウェア上で複数のOSを同時に動作させることができるソフトウェア。
ホストOSを必要とせず仮想マシンを動作させる、「仮想マシン・モニター」の代表の一つ。
ホストOSを必要とするものには、VmwareServer等がある。

Xenを導入するメリット

(サーバ動作環境として利用するという前提。)

コスト面
  • リソースの有効活用

一台の物理サーバ上に複数台のサーバ機能を集約することで、リソースを有効活用し、「物理サーバ」の削減を行う事ができる。
また、リソース使用率の低いサーバを複数まとめることで、ハードウェア当たりのリソース使用率を向上させる。

仮想化時におけるサーバの独立性
  • 複数台のサーバが影響を及ぼしあわない

仮想化した各サーバのリソース必要量や優先度に応じて、柔軟にリソースを配分する事が可能である。配分した以上は、他のサーバからの影響を受けない。
この配分は動的に変化させる事も可能。
独立性が確保されているので、セキュリティを確保している。

運用面
  • テスト環境、開発環境の容易な構築
  • 事前に用意した仮想サーバを用いての新規仮想サーバの容易な構築
  • OSから上の層に変更を加えずに異なるサーバへ移動

仮想サーバの複製、サーバ使用状況やハードウェアの更新に合わせたハードウェア間の移動が可能となり、上記の事を実現できる。

仕組み

仮想化と準仮想化

Xenは、準仮想化と呼ばれる手段を使って仮想化している事が特徴。(ただし、完全仮想化も存在する)
仮想化が、ハードウェアをエミュレート(模倣)するのに対して、準仮想化は、完全にハードウェアをエミュレートはしない。その代わりに仮想環境に適した形の仮想ハードウェアを作り出す。
理由は、そうする事で仮想環境上に存在するゲストOSからの要求をそのまま処理できるため、動作が早くなるからだ。ただし、ゲストOSはこの仮想ハードウェア上で動作するように書き換えなければならない。
一方の完全仮想化は、ゲストOSからの仮想ハードウェアに対する要求が、一度CPUに受け取られる。
その後、CPUからXenに制御として渡される。
その制御を渡されたXenは、ゲストOSが行おうとした処理を分析して、仮想ハードウェアの動作をエミュレートしなければならない。
このせいで準仮想化に比べて、オーバーヘッド(与えた命令以外に付随してくる処理)が大きくなってしまう。

準仮想化の構造

続けて準仮想化における構造的な話をすると、「Domain0」と「DomainU」と呼ばれるものがOSを動作させるために存在する。
まず「Domain」とは一つ一つの仮想マシン環境を指し、これはXenの上に存在する。
そして「DomainU」には、ゲストOSが入る。「Domain0」は、物理デバイスの制御及び、Xenのマネジメント機能を受け持つOSが入る。
「DomainU」からの要求が実際に処理される際には、要求がXenを通して「Domain0」に渡され、「Domain0」が物理デバイスの制御を行える事を利用してなされる。
この、Domain0のおかげで、Xen自身がシンプルな構造を保っていられる。

完全仮想化と準仮想化それぞれのメリット、デメリット。

メリット

完全仮想化…OSを書き換える必要がないので、どのようなOSでもインストールする事ができる。
準仮想化…要求を直接エミュレートさせる事ができるので、処理が早い

デメリット

完全仮想化…オーバーヘッドが大きくなるため、動作が重くなる。
準仮想化…OSを書き換えなければいけないので、全てのOSを利用する事ができるわけではない。


以上です。

次回は実際に、環境構築を行っていこうと思います。
利用しようとしている、CentOSは準仮想化に対応していそうなので、そちらで構築していきたいと思います。