« なぜ皆Linuxやapacheを使うのか | Main | WEBサイトの重さを調べる方法 »

February 04, 2007

仮想化技術について

最近blogの更新が遅くて申し訳ありません。忙しいというのもあるのですが、それよりは最近の仕事がSI(プロマネ兼上流工程での設計)をやっているのでシステム管理というテーマで書けるものがないというのが本当の理由です(更に言うと最近は例えばサーバ準備にしても自分でやらなくても「これやっといてね」と一言言えば済んでしまう立場になったというのも大きいかも)。そんな中久々に自分の手を動かして検証してみたいテーマがみつかりました。それは最近ホットな仮想化技術です。というわけで今回は仮想化技術の話しです。

【仮想化技術の歴史は長い】
皆さんは「仮想化技術自体は大変歴史が長い」ということをご存知でしたでしょうか。仮想化という考え方は実はこれまで大型汎用機でずっと当たり前に使われてきた技術で、その技術がやっとIAサーバにも降りてきた、というところが新しいのです。

何故大型汎用機では仮想化技術が当たり前に使われてきたのかは設計思想から考えれば一目瞭然です。その設計思想とは「非常に高価な機械を大勢でシェアして使うということ」と「サービスを絶対に止めない」ということです。この設計思想を実現するために「ハードウェアリソースをソフトウェア的に論理的に分離して使うということ」と「ハードウェアリソースを徹底的に冗長化し壊れたパーツをシステムから切り離したり新しいリソースを追加すること」を実現しています。

これまでも仮想化技術は各メーカーエンタープライズ級サーバ(数億円以上する。SunのFire10k以上、IBMのpシリーズなど)では普通にサポートされていました。なのでそれらのサーバを使っていた人達からすると、何を今更?という反応をしているのかもしれません。

【仮想化技術を使うと何ができる?】
ここで、つまりは仮想化技術を使うと何ができるの?という方もいると思うので大まかに考えてみたいと思います。
■レベル1: 1つのOS上で複数のタスクを動かす
このレベルはすでにWindows,MAC,Linux,UNIXなどいろいろなOS上で当たり前のように実現されています。

■レベル2: 1台のPCで複数のOSを動かす
通常は1台のPC上に1つのOSしか同時起動できませんが、これが複数OS同時に動かすことが可能になります。

■レベル3: 複数のハードウェアリソースで複数のOSを動かす
例えばPCを5台設置しておき、その上にOSを8個だとか30個だとか動かすことが可能になります。何故こういうことをしたいのかといえば、大型汎用機の設計思想同様「ハードウェアリソースをシェアして使うということ」と「サービスを絶対に止めない」ということを実現したいからです。例えば普通の会社であれば「勤怠システム」「財務システム」「グループウェア」「在庫管理システム」などシステム毎にサーバを持つのは明らかに無駄です。また冗長化を考えて各サーバを2セットずつ持つことも無駄です。そんなときレベル3が実現できれば、ハードウェア投資を最小限に抑えつつサービス可用性が上がり、かつハードウェアリソースが足りなくなったらシステムにPCを追加するだけで増強が可能です。

というように、仮想化技術はサーバ数の増大に苦しむ中規模以上の会社にとってなくてはならないものになると個人的に期待しています。

【仮想化の仕組み】
仮想化の仕組みですが、これまでOSがハードウェアリソースの管理を行っていましたが、今後はホストOSというものがそれを実現するようになります。仮想化を行うときは、サーバにはまずホストOSをインストールしその上に各OSをインストールするようにします。ただし注意しなければいけないのはホストOSには対応OSが決まっていることです。ホストOS上にはどんなOSでもインストールできるわけではないので注意しましょう。

【資料】
今手元にある資料から抜粋した、ホストOSとゲストOSの対応状況を記します。

・VMWARE(VMWare)・・・Windows server,Redhat Linux,SuSE Linuxなどをサポート
・Xen Enterprise(open source)・・・Linux,NetBSD,OpenSolarisなどをサポート
・Virtual Server(Microsoft)・・・Windows Server2003をサポート
・Solarisコンテナ(SUN)・・・Solaris10をサポート

|

« なぜ皆Linuxやapacheを使うのか | Main | WEBサイトの重さを調べる方法 »

雑記・コラム」カテゴリの記事

Comments

Virtualization について検証しました。
予想では I/O ネックになると思っていましたがその通りの結果でした。
具体的には HDD への log write によるボトルネックです。

CPU 性能は年々順調に向上し、multi core や Sun T1 のように thread 性能は上がっているのは間違いないのですが、I/O に関してはそうなっていません。
なので Virtualization する場合は、
・使うリソースが違うもの。
・元々リソースを使っていないもの。
・ピークが分散している処理を集約化する。
等には効果があると思いました。
信頼性とのトレードオフですが、集中化はセキュリティの面でもメリットがあるので、今後のトレンドなのは間違いないというのは同感です。
# 今の時点でも I/O に多少金をかけても(たとえば SAN とか)価値があると思っています。
# ただ耐障害性を考えて standby などを作ると結局台数が増えちゃうんですけどね(^^;

Posted by: herohero | February 04, 2007 at 10:16 PM

コメントありがとうございます。

ディスクI/Oがネックとなっている場合は、ディスク装置というハードウェアリソースを追加してあげればよいのだと思います。

また耐障害性についてはstandby機を持つのではなくハードウェアリソースを余分に積んでおくというのが仮想化技術を使う場合の正しい姿だと思います。

ただ問題となりそうなのはホストOSの安定性でしょうか。これが安定しない限りはいくらハードウェアリソースを持っていても意味なさそうですよね。

Posted by: sanonosa | February 04, 2007 at 11:19 PM

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/32004/13784996

Listed below are links to weblogs that reference 仮想化技術について:

« なぜ皆Linuxやapacheを使うのか | Main | WEBサイトの重さを調べる方法 »