[技術一般] 09 June 2007 はてなブックマーク - 仮想環境を開発現場に導入してみて Twitterでつぶやく

仮想環境を開発現場に導入してみて

virtual
職場にて開発現場に仮想化を導入してから半年程が経過し、良好な手応えを得ています。
なので今回は現状を交えつつなぜ仮想化ソリューションを導入すべきかについて書きたいと思います。
ただし、仮想化とはなんなのか、どういう技術なのかという事については末尾の参考リンクをたどってください。
飽くまでも、技術ではなく現場への効果という視点からの文章です。

□現状
現在職場で導入している仮想化環境では、ホストOSにUbuntu 6.10 Serverを利用し、仮想化ソフトに無償のVMware Server 1.0.2を利用しています。利用している1Uサーバのハードウェアスペックは、デュアルコアのPentiumD 3.2GHz、メモリ4GB、HDD 250GB 2台(ソフトRAID1で利用)となっています。
そして現在、上記の環境においてWindowsも含めて10台の仮想マシンが稼働しており、それらは複数のプロジェクトにゴリゴリと利用されています。
この仮想環境の構築にあたって必要となったのは、新規ハードウェア購入に投資した15万円+構築作業の人件費です。見えない部分を合計しても20万円は行かないと思われます。

□開発現場のサーバに関する一般的問題
さてWEB系システム開発の現場において、テストサーバの準備は切っても切り離せない作業です。
ところが、これを物理的なマシンで行うと、パッと思いつくだけで下記の問題が発生します。

・物理マシンが溢れかえる
・電気代が高くなる
→ 最近のハードは電気を食う
・ハードウェアコストがかさむ
・それぞれの物理マシンのメンテナンスが必要
→ LANやら電源やらの配線とか、HDDとかの寿命とか
・それぞれの物理マシンの性能を使いきれない
・上記の原因により古い開発環境の維持がコスト的に不可能
・システムは、その物理マシンのハードウェアに拘束される

何やらIBMのCMみたいになってきましたが・・・。
これらは、普通は意識してませんがプロジェクトのコスト増加に直結します。
まあ、誰も配線のための人件費や電気代までプロジェクトコストに計上しないですが、小さい会社でマルチにプロジェクトを走らせている場合は馬鹿にならないはずです。(これ上司のオヤジ殺しのバズワードに使ってくださいw)


□解決方法
これらを解決する方法としては、複数のアプローチがあると思います。
(1)1つのサーバに開発環境を混在させる
(2)仮想化ソリューションを用いて1つのサーバに複数の仮想マシンを混在させる
(3)ブレードサーバで物理的に集約管理する

WEB系の開発企業では既に(1)は行っていると思います。これは主にポートを変えて複数デーモンを起動、複数DBをインストールなどといったことをします。しかし、これはもっとも避けたい解決手段であろうことは、誰しもが知ってます。なぜなら、混在させた結果、最終的には環境が意味不明で理解不能な状態に行き着くからです。そして、その困った現状は決まって今のインフラが退職した後に明らかになります。
(私の経験上では、)その最悪の事態を防ぐため、環境のわけがわかるように詳しいドキュメンテーションを作らせたとしても意味がありません。その作業自体が非常にコストがかかる上、複雑で頻繁に変更が加わる環境のドキュメンテーションは通常全く信用なりません。
ひとつ飛ばして(3)は、そもそもべらぼうに高い金をとられます。1Uを5台買うより安いといってもやはり高いので、(貧乏人の私には)話になりません。
そして、実際どういうソリューション(クラスタリングしたシステム上で仮想化ソリューションとか?)があるのか詳しくは知りませんが、物理サーバが増えるという問題自体には何の解決策ももたらしていません。いずれにせよ金がかかります。

そこで、(2)仮想化ソリューションを用いて1つのサーバに複数の仮想マシンを混在させるなわけですよ。簡単に言えば、複数のソフトウェア的に独立したシステムでハードウェアを共有してやるということです。
この手法により得られるメリットは、物理サーバのデメリットをことごとく打ち消します。

・物理マシンは1台で良い
→ 場所、電気代、配線、メンテナンスが1台分で良い
・物理マシン上で動く仮想マシンはハードウェアに依存しない
→ 仮想マシンの保管、移行が容易、つまり1年前のプロジェクト環境でもすぐに復元可能

もちろん、デメリットとして複数システムでハードウェアを共有させることによる性能低下があります。
しかしながら、これは無視しても良いと思います。なぜなら開発環境では高いパフォーマンスは要求されない上、高いパフォーマンスが必要な検証では実機もしくはそれと同等の性能を持つマシンが提供(または準備)されるのが普通だからです。そして、現在の環境(仮想マシン10台稼働)では取り立てて反応が遅かったり、性能が悪いということはありませんでした。
さらに、簡単にサーバを追加できることから、開発者が新しいOSや環境を積極的に試すようになると言う副次的な効果も得られます。

□具体的なソリューションの例
現在、仮想化は関心度の高い技術であり沢山の実現方法があります。XenやKVMなどは非常に熱い話題として良くニュースになりますし、Linuxに限定すればユーザモードLinuxなどの技術もあります。
もちろん技術的好奇心も大事ですが、高い技術と知識を必要とせずに効果を得られるソリューションとして、ここでは下記2つを奨めます。

Microsoft VirtualServer2005 R2
→ ホストOSにWindows
VMware VirtualServer
→ ホストOSにLinux、Windows

いずれも完全仮想化のアプローチを採用しているためWindows、Linuxともに通常は問題なく稼働しますし、何より無償です。また、インストールや設定も非常に手軽であり開発者レベルの知識で容易に仮想マシンを追加できます。
これらを20万円弱のそこそこなハードに乗っければ、その日から強力な仮想化環境を手に入れることができます。

□開発環境を越えた応用
これは既に開発者の域を越えているのですが、興味があるのはやはり実運用における複数の仮想マシン間での連動です。具体的にはXenなどを利用して下記みたいなことができると楽しいですね。どちらかというと趣味の域に入ってますがw
・1台のサーバ上にAP1、AP2、DBなどを準備しAP2はホットスタンバイしているとか
・メニイコアマシンでWWW、AP1、AP2、AP3などの負荷分散環境を作ってみるとか
・顧客のサイトのホスティングをするときにApacheのVirtualHostではなく、仮想マシンにより複数環境を運用するとか

#長くなりましたが、WEB系システム開発という視点で仮想化のメリットについて書いてみました。何かの参考になれば幸いです。

□参考
@IT:仮想化技術のアプローチと実装(1/2)
http://www.atmarkit.co.jp/flinux/special/vm/vm01.html

OTP 仮想化による検索結果
#とても参考になる記事がいっぱいです
http://opentechpress.jp/search.pl?query=%E4%BB%AE%E6%83%B3%E5%8C%96&sort=2

VMware ServerのインストールHowTo
How To Install VMware Server On Ubuntu 6.06 LTS (Dapper Drake)
http://www.howtoforge.com/ubuntu_vmware_server

How To Install VMware Server On Ubuntu 7.04 (Feisty Fawn)
http://www.howtoforge.com/ubuntu_feisty_fawn_vmware_server_howto

How To Install VMware Server On Debian Sarge
http://www.howtoforge.com/debian_sarge_vmware_server_howto

How To Install VMware Server On A Fedora Core 6 Desktop
http://www.howtoforge.com/vmware_server_fedora_core_6

裏マキノ式 VirtualServer2005 R2のメモ
http://www.makino-style.org/ura/index.php?MicrosoftVirtualServer2005RC2

Comments

No comments yet

Add Comment

このアイテムは閲覧専用です。コメントの投稿、投票はできません。