最近のITキーワードとして、「仮想化」があります。一つのPCで、複数のOSを独立して動かす技術です。今日、ふっと仮想化を利用したアイディア?を一つ思いついて、色々と検討していました。当方の考えたアイディアは「お遊び」の発想なのですが、思考の流れを並べてみますね。
- バックアップを時系列で保存しているハードディスクが、複数溜まってしまった
- それらは、それぞれ単一のディスクにしまってあるのだが、RAID5で冗長化したくなった
- しかし、わざわざファイルサーバを改めて用意するほどの用途でも、使用頻度でもない
- 手元にあるWindowsXPをインストールしたPCで何とかならないだろうか?
- しかし、このPCにはRAID5を構築できる機能が無いし、RAID5のカードを買い足すほどの用途でもない…
- また、バックアップ時以外には、うるさいハードディスクの電源は入れておきたくない(今はほぼ無音なので)
- なんとか、今ある機材だけで、RAID5を構築する手は無いか?
- そういえば、ハードディスクのリムーバブルケースは余っているな。これで、使っていないときにディスクの電源は切れる
- じゃあ、後はRAID5を作ればいいから、LinuxのmdadmでソフトウェアRAID5でもやろうか
- でも、デュアルブートにしちゃったら、WindowsXPからアクセスできないじゃないですか…
- よし、ならWindowsXPの上でVMwareを動かして、その仮想マシンの中でRAWデバイスのRAID5を構築しよう
- それで、Sambaを入れれば、XPから仮想ファイルサーバとデータをやり取りできる!
…と、ここまで考え、500GBx3=1TBのRAID5ストレージを作って運用し、ファイルサーバがいらないとき(使用時間の大部分)は、ハードディスクの電源も切っておけるし、仮想マシンも起動する必要なし・ということで、なんかいいアイディアのような気がしました(笑)。普通だったら、ファイルサーバを用意するものなんでしょうけれども、貧乏くさいというか、仕事柄、無駄を作らないソリューションを突き詰めてみたいというか…。自分の環境ですから、こういったやり方も面白いということで、暇を見つけてやろうと思っています。
ところで、仮想化の真のメリットってなんでしょう?VMwareはじめ、Xen・Hyper-V・AMD-V・VT-xなど、仮想化を提供する技術は増えてきています。そこで、仮想化を使った各ベンダーの推す、仮想化を利用したITソリューションのメリットを色々と読んでみたのですが、今ひとつピンときません。
何でピンとこないかというと、「仮想マシンを導入するメリット」については、確かに色々と謳い文句が語られるのですが、「仮想マシンが絶対に必要なシーンは何か?」の提示が、ほとんど見受けられないのです。どころか、プレゼン資料では、「高可用性」「自動化」「生産性向上」など、かなり無理なところにまで結びつけているような気もします。
まず、メリットとして多く言われているのは、「実は、稼動しているサーバのCPUパワーのほとんどは遊んでいるから、その遊んでいるCPU時間で仮想マシンを動作させれば、無駄を抑えることが出来る」という点です。確かに、物理サーバーのなかに仮想サーバを複数置けば、場所などのコストが小さくなります。サーバー統合ということで、管理面も一つのPCで全部を見ることが出来るので、楽になりそうに思えます。
しかし、仮に遊んでいる部分があったとしても、遊んでいるのはCPUパワーだけです。バス・ハードディスクなどの低速なペリフェラルは、CPU以上に働いています。CPUが遊んでいるということは、何か仕事があったらフルにぶん回せる、余裕のある状態だともいえます(※もしかしたら、かなりの企業がオーバースペックのサーバを買ってしまった・もので、CPUが遊んでいる状態かもしれませんけれども…)。とまれ、もし仮想マシンがプロセスとして増えたら増えた分だけ、新たにOSを動かす負担が掛かります。OSを動かす=単なるプロセス以上にハードディスクやメモリなどのI/Oを酷使することとも言えますので、それぞれの仮想マシンのパフォーマンスは落ちてしまいます。I/Oの負担増に関しては、仮想化のデメリットとして多く触れられていますので、「ハードディスクを仮想マシンごとに分ければいいじゃない」「CPUをすごいのに変えればいいじゃない」「NIC挿しまくればいいじゃない」というソリューション?も答えにありそうですが、それは、結局ある程度のコスト負担が発生しますね。
次に、サーバを仮想マシンで統合する点について。サーバのソフトウェアやシステムには色々あるので、一概には言えないのですけれども、「仮想化する必要があるの?」という疑問が生じてきます。ソフトウェアが余程ひどい作りで、常にCPUタイムを食い尽くすようなものであれば、仮想マシンで分けてしまうのも手かもしれませんが、仮想化ソフトウェアがCPUロードをコントロールできるのと同じ・ないしは、それ以上のレベルで、サーバのプロセスもシェアリングを行っています。プロセスが同じサーバで動いていれば、そもそも統合化という考え方にはなりません。ですから、仮想マシンを動かして、その下のプロセスとしてサーバソフトを動作させるよりは、普通にホストOSのプロセスとして走らせた方が、高速ですし省電力でしょう。また、サーバを分ける大きな理由となるデータベースのレプリケーションや、ラウンドロビンなどは、仮想化で統合というアプローチには、たどり着きづらいと思われます。ただ、「ウェブサービスは絶対にIISじゃなきゃいやだ・でも、DNSはFreeBSDじゃなきゃいやだ・データベースは、Linuxで動いているPostgreSQLじゃなきゃいやだ」みたいな設計を出されたら、仮想化の魅力はありますね。
そして、フェイルオーバーに関して。仮想化で提示されるメリットにおいて、仮想マシン内でのOSやプロセスのクラッシュが、ホストOS・他の仮想マシンに影響を与えないことが強調されますが、実のところ、普通に設計して運用しているならば、OSやプロセスがクラッシュするよりも、ハードウェア障害の方が余程起こりやすいといえます。通常、壊れやすいハードはハードディスクとマザーボードなので、大抵は予備を持っています。例えば、Webサーバが壊れても、そのサーバ以外は生きていますから、いじる必要は無く、故障したウェブサーバの機材交換とチェックだけで、すぐサービス提供の状態へ復旧できます。しかし、統合された1台のサーバが深刻なハードウェア障害に見舞われたら、仮想化されている全てのサーバ機能がダウンしてしまいます。確かに、仮想マシンはハードウェアへの依存が低い(※ほぼ無いかもしれません)ので、どんな代替機にでもすぐに移し変えることが出来るのですが、結局、各仮想サーバのバックアップ(ないしはスナップショット)は作らなくてはなりませんし、各仮想マシンの、クラッシュ状態はどうか・ファイルシステムは無事なのか・データの不整合は生じていないか?などなど、それぞれの仮想環境の確認と復旧には、結構な手間とパワーが掛かるように思います。そう思うと、仮想化によるサーバ統合化は、リスクやダメージも統合化されてしまうのではないか?と、考え込んでしまいそうです。
他にも、コンピューティング環境の破壊や、ウィルスなどの感染に対処するために、クライアント用途で仮想マシンを使用して作業をする利用例もありますが、仮想PCは、ビデオなどのデバイスへの出力はそれほど早くないので、GUI等の環境では、かなりじれったいかもしれません。
と、ここまで、仮想化をビジネスと結びつけるメリットと、それについての私的な考えをつらつらと書いてみたのですが、仮想化については、ハードウェア進化における「省電力性」ほどのアピールを感じさせてくれるわけでもないし、「本番の使用にも十分耐えうる」など、逆に心配になるような強調があったり、そもそも「CPUが常時遊んでいるようなサーバ群を、設計構築して導入を計画したのは、どこの誰なんだよ」のような素朴な疑問がわいてきます。しかし、だからといって仮想化は余計なこと?無価値?かと言えば、そんなことは無いと考えます。
実際に仮想化を試してみた多くの人の感想は、「PCのなかで他のOSが動いていて、面白いな!」くらいの印象が、多いかもしれません。当方も、そんな感じでした。しかし、仮想化は、「プログラミングやテスト環境の構築」「特殊な状況でのデプロイメント(この場合は、環境の可搬性というべきでしょうか)」などの用途では、既に多く利用されています。ビジネスとして「頑張って仮想化のメリットを見出す」状態から、「仮想化が必要とされる状況」が見えてくるのは、もう少し先にあるのかもしれません。
冒頭に書いた、当方の仮想化の利用例は、ビジネス価値へ結びつく例としては、あまり出てこない要求だと思います。しかし当方にとっては、固有の条件を満たす、いい解決方法が得られそうだと思いましたし、仮想化の用途を考えてみるいい機会になりました。こんな、ちょっと変わった使い方への要求があれば、ぜひ聞いてみたいですね。そこには、仮想化の思わぬニーズが隠されているのかもしれません。