ハイパーバイザー選択の戦略
第3回はハイパーバイザー選択の戦略についてお話しします。
VMwareについて
2004年に筆者が仮想化ホスティングを始めた頃には、本格的なハイパーバイザーはVMwareしかなかったので必然の選択でした。 またVMwareはメインフレームの仮想化技術の流れを受けているため、品質に対しては非常に重視している会社であることも選択の根拠になっています。
その後、CEOがマイクロソフト出身のポール・マリッツになって少し心配しましたが(交代直後にたまたま重大なバグが出たこともありました)、 技術重視である路線は変わりなく、より戦略的な投資も加速したようで、現時点でも他社を一歩リードしたポジションにあると言えます。
ただ、最近は高機能オプションの追加だったり、クラウドサービスのライセンスがVM単位のプロバイダーライセンスになったりと、他のハイパーバイザーと比べてコスト問題がより大きくなってきています。 企業内が自社で行う仮想化はVMwareが圧倒的に多いので、プライベートクラウドとの共存という領域では今後もしばらくはVMwareが中心で あることは間違いないでしょう。
パブリッククラウドにおけるハイパーバイザーはフリーのXenやKVMが中心となっています。1年ぐらい前まではXenで構築するのが無難と言われましたが、最近はKVMで構築するのが主流となりつつあります。ITコアでも現在準備中のGS11シンプルサービスではKVMを利用しています。
Hyper-VはWindowsサーバーを動かすには特にサポート面において安心でしょうが、コスト的にそれほどは安くないというのが、 あえて選択するまでにいたりません。サーバーすべてをWindowsに統一しているという企業にはいいかも知れませんが、対象となる企業はそれほど多くないでしょう。
図1:多様化する仮想環境 |
図1は、これまでの仮想環境の変化を年別に表示したものです。
OSSクラウドについて
OSS(オープンソースソフト)のクラウド環境は現在ものすごいいきおいで開発競争が起きています。ハイパーバイザーはKVMが主流ですが、 それを操作するAPIやGUIのソフトウエアが同時にいくつも開発されています。まだどれが主流になるかわからない状況ですが、1年後ぐらいにはある程度勝負がついてくるかも知れません。
その中から、ITコアが現在検証中のソフトウエアを中心にご紹介したいと思います。
KVMと管理ツール
KVM概要
KVMは、Kernel-based Virtual Machineの略で、アメリカのQumranet社が2006年に開発されたものです。同年にオープンソース化し、2007年にLinuxカーネルモジュールとして同梱されました。Linuxカーネルモジュール2.6.20から標準機能として利用できるようになっています。2008年には、Red Hat社がQumranet社を買収し、自社のハイパーバイザーとしてKVMを選択しています。
KVMは、Linuxのカーネルモジュールとして組み込まれているため、GPL(GNU General Public License)にもとづいたライセンスになっています。
KVM管理ツール
KVMやXenなどの仮想マシンを管理するために、libvirtという抽象化ライブラリがあります。Red Hat社が主体となって開発されたライブラリで、以下のような仮想マシンをサポートしています。
- Xen hypervisor on Linux and Solaris hosts.
- QEMU emulator
- KVM Linux hypervisor
- LXC Linux container system
- OpenVZ Linux container system
- User Mode Linux paravirtualized kernel
- VirtualBox hypervisor
- VMware ESX and GSX hypervisors
- VMware Workstation and Player hypervisors
- Storage on IDE/SCSI/USB disks, FibreChannel, LVM, iSCSI, NFS and filesystems
本記事では、次世代の管理ツールとして期待されている openQRMと、libvirtライブラリを利用したvirt-managerを中心にお話します(図2)。
図2:KVMを制御する環境 |
KVMを管理するツールは、非常にたくさん存在しており、どのツールを使えば効率的に管理できるのか迷うところですが、管理ツールの詳細は、こちらのページにまとめられていますので、参考にしてください。
KVM管理ツール1:OpenQRM
OpenQRMは、データセンターの業務を一つのアプリケーションで管理するというコンセプトで 設計されています。複雑なデータセンター業務を、コンポーネントごとに分けて、プラグインの組み合わせで業務ができるようになっています。
データセンター業務の中のひとつとして、仮想化という業務が存在し、さらに仮想化の中には、今回紹介するKVMの管理だけでなく、VMwareやXenなどの仮想サーバーも管理できるようになっています。他にも、DNS,Natios,nfs-storageなど、たくさんのプラグインが用意されています。 詳細は、openQRM Pluginsのページを参照してください。
ここでは、openQRMの機能の中で、KVM関連の機能に着目して説明していきます。
OpenQRMのPluginは、管理画面のPlugin Manager(図3)で管理します。
図3:Plugin Managerの画面(クリックで拡大) |
OpenQRMを使ってKVMを管理するために必要なプラグインは、以下の通りです。
- cloud:仮想マシンの自動生成ツール
- dhcp:仮想マシンにIPをDHCPで付与する
- image-shelf:仮想マシンのイメージをイメージサーバーからダウンロードする
- kvm:仮想マシンの管理
- lvm-storage:仮想マシンのストレージの作成
- sshterm:仮想マシンのコンソールにアクセスするツール
- tftpd:ホストマシンに仮想マシンのカーネルを自動でアップロードするツール
他にも、kvm-storageを使う場合もあります。
プラグインを利用するには、プラス(+)のマークをクリックします。そして、右側にあるStartedの列のボタンを押して有効化します(ボタンのイメージが紛らわしいので注意が必要です)。KVMで仮想マシンの作成・管理する方法にもいろいろとありますが、今回は、仮想マシンの自動生成について説明していきます(図4)。
図4:OpenQRMを使ったサーバー自動構築の流れ |
前準備では、自動構築の環境を構築するためにホストOSの準備とマスターになる仮想マシンの準備をします。これが終わると、自動構築の作業ができるようになります。図4の自動構築フローの中にある、「仮想マシン作成」のスクリーンショットが図5になります。
図5:仮想マシンの作成画面(クリックで拡大) |
この画面で、仮想マシン作成に必要なパラメータ設定をします。
設定が終わったら、「create」ボタンを押すと、申請状態になります。この状態で、ホスト管理者が承認をするとサーバーの自動構築が始まります。OpenQRMでは、承認フローを利用するかどうかを設定画面で制御できるようになっており、このような承認フローを省略することも可能です。
「仮想マシン作成者」と「ホスト管理者」のやりとりは、 プライベートクラウドを作成したり、クラウドサービスを提供する場合に必要になってくるのですが、これらのフローがopenQRMのプラグイン(cloud)として提供されています。
KVM管理ツール2:VIRT-Manager
libvirtライブラリを経由したGUI管理ツールの代表としてVirt-Managerがあります。
Virt-Managerは、Cent OS, Red Hadでは、yumコマンドを使ってKVMをインストールすると自動でインストールされます。 KVMインストールコマンドは、「yum install kvm kmod-kvm」です。 インストールが終わると、図6のように仮想マシンマネージャーという メニューが表示されます。
図6:仮想マシンマネージャー |
仮想マシンマネージャーのトップ画面では、ローカル・リモートサーバーの中の仮想マシンの 動作状態が一覧で確認できます(図7)。openQRMには、このような一覧画面が標準では ないので、仮想マシンマネージャーの方が直感的に管理しやすいという特徴があります。機能としては、仮想マシンの作成・削除から、管理業務まで可能になっています。
図7:Virt-Manager 0.6.1の画面(クリックで拡大) |
yumコマンドでインストールすると、このようなvirt-managerがインストールされますが、 ソースコードがコンパイルしてVirt-Managerをインストールすると、最新の管理画面を利用することができます(Virt-Managerダウンロードページ)。
2011年2月7日現在では、最新のVirt-Manager 0.8.6が入手可能です。
図8:Virt-Manager 0.8.5(クリックで拡大) |
最新のVirt-Managerでは、CPUの使用率、ディスクIO,ネットワークIOをグラフィカルに表示できるようになっています。そのため、負荷の高いサーバーを見つけやすくなっています(図8)。
また、複数のホストへ接続して、ホスト内の仮想マシンの状態を一元管理できるようになっていることも、Virt-Managerが非常に使いやすいツールだといえる要因でしょう。Virt-Managerは、頻繁にバージョンアップが繰り返されているので、 これからもさらに使いやすいものになっていくと予想されます。ただし、OpenQRMのように、cloudサービスとしての、仮想マシンのユーザー用画面は用意されていないので、すべての管理はホストの管理者が行う必要があります。
OpenQRMとVirt-Managerには一長一短があり、両方の良いところを 利用したいという要望もあるかと思います。しかしながら、 OpenQRMで管理している仮想マシンとVirt-Managerで管理している仮想マシンはお互いに独立しているため、OpenQRMで作成した仮想マシンをVirt-Managerで管理したり、逆に、Virt-Managerで作成したものをOpenQRMで管理することができません。
どちらの仮想マシンもLinuxから見ると同じプロセスとして見えるのですが、管理ツールが違うと、管理下にある仮想マシンが違ってくるのです。
KVM管理ツール3:libvirtによる仮想マシンの制御
最後に紹介するのは、GUIを使わずに、1ページ目で紹介したlibvirtのAPIを利用する方法です。下のソースコードは、仮想マシンの名前を取得する簡単なプログラムサンプルです(言語はPython)。
まず、「import libvirt」でlibvirtのモジュールをインポートします。open('qemu:///system')は、qemuへの接続ですが、ここでリモートホストを指定することも可能です。次にListDomainsID()を使って、仮想マシンの一覧を配列で取得し、lookupByID()で、仮想マシンの情報をオブジェクトで取得します。最後に、name()を使って、仮想マシンの名前を取得しています。
libvirt APIを利用すると、仮想マシンのリソースを動的に変更したり、 リモートマシンの操作をしたりできるようになりますので、柔軟なシステムが組めるようになります。
libvirtを実装している言語は、libvirt開発サイトによると、C,C++,C#,Java,OCaml,Perl,PHP,Python,Rubyなどです。開発中のものもありますので、詳細は、libvirt開発サイトからリンクされている開発サイトを確認していください。
紙面の都合で、細かな事はあまり書けませんでしたが、KVMを管理するツールや手法の概要は理解いただけたと思います。