Linux標準のサーバー仮想化機能「KVM」を試す


 前回は、シトリックス社のカンファレンス「Synergy 2011」に関する記事を公開したので、KVMの実際のインストール、仮想マシンの作成などを紹介できなかった。今回は、元に戻って、KVMのインストール、仮想マシンの作成を試してみる。

 今回のレビューでは、レッドハットからRed Hat Enterprise Linux(RHEL) 6.0を提供していただいたので、RHEL 6.0ベースで紹介をしていきたい。ちなみに、KVMはLinuxカーネルに統合されているため、ほかのLinuxディストリビューションにも入っており、KVM自体のテストは行える。ちなみに、CentOSやFedoraなどでも同じようなテストが行えると思う。

 CentOSやFedoraでは一部、RHEL 6.0と差がある部分があるかもしれない。その時は、レッドハットのWebサイトからRHELの試用版(30日間)をダウンロードしてテストすればいい。

 

KVMのインストール

 今回は、AMD Phenom II、メモリ8GB、HDD500GBという環境でテストした。スペック的には、デスクトップPCだ。RHELをインストールするだけなら、大規模なサーバーは必要ない。また、KVMは、ライブマイグレーションの機能を持っているが、今回は1台のPCで動作させているため、ライブマイグレーションのテストは今後行いたいと思う。

 RHEL上でKVMを利用するためには、PCのBIOSで仮想化支援機能をオンにしておく必要がある。IntelならVT-x、AMDならAMD-VをBIOSでオンにしておく。そうしないと、KVMが動作しない。

 RHELのインストールは、ウィザードに従えば非常に簡単だ。インストール時に導入するアプリケーションとしては「仮想化ホスト」を選択する。RHEL 5系では、仮想化ホストとしてXenがインストールされたが、RHEL 6系ではXenが取り外されたため、KVM関連のソフトがインストールされる。

 さらに、「今すぐカスタマイズする」を選択して、使い勝手をよくするためにX-WindowsやGNOMEなどのデスクトップ環境を選択する。さらに、仮想化関連のツールなどもインストールしておく。後は、RHELのインストールウィザードに従っていけばOKだ。


CDからRHELを起動した画面言語を日本語にセットする今回は、内蔵のSATAを利用するので、「基本ストレージデバイス」を選択。もし、iSCSIやSANなどを利用する場合は「エンタープライズストレージデバイス」を選択する
ホスト名を設定する今回は、「すべての機能を使用する」を選択今回は、「仮想化ホスト」を選択。そして、今すぐカスタマイズを選択する
カスタマイズで、デスクトップ、システム管理、仮想化などを選択しておく

 

仮想マシンを作成する

 RHELでは、コマンドラインで仮想マシンの作成/起動などが行えるが、今回はGUIベースの仮想マシンマネージャー(Virt-manager)を使って、仮想マシンの作成、仮想マシンへのOSのインストールなどを行う。

 アプリケーション→システムツール→仮想マシンマネージャーを起動する。localhostを選択して、仮想マシンマネージャーの新規の仮想マシンを作成というアイコンをクリックする。

 最初に、仮想マシンの名前を入力して、どこからOSをインストールするかを設定する。今回は、KVM上にWindows Server 2008 R2をインストールした。このため、ローカルストレージに保存したWindows Server 2008 R2のISOイメージをマウントする。これにより、仮想マシンが起動した時点で、仮想CD/DVDドライブからOSのインストールが開始する。

 マウントするISOイメージを設定すると、インストールするOSタイプ、バージョンなどを設定する。今回はWindows Server 2008 R2をインストールするため、OSタイプ「Windows」、バージョンは「Windows 2008」を指定する。

 次に、仮想メモリの容量、仮想CPUの数を設定する。Windows Server 2008 R2を動かすため、仮想メモリは2GB、仮想CPUは2つに設定した。

 次に仮想マシンが使用する仮想HDDの容量を設定する。今回は、10GBに設定した。これで、設定は終了した。

 自動的に、仮想マシンが起動して、仮想CD/DVDドライブからWindows Server 2008 R2のインストールが開始する。


仮想マシンマネージャーを起動する(アプリケーション→システムツール)このホストの詳細を表示する。現在は、仮想マシンがないため、CPUやメモリは全く使用されていないファイルの下にある新規仮想マシン作成のアイコンをクリックすると、新しい仮想マシンを作成する
仮想マシン作成後にOSをインストールする場合、仮想CDにISOイメージをマウントしておく。さらに、インストールするOSの種類を選択仮想マシンが使用するメモリ、CPUを設定仮想マシンのOSをインストールする仮想ディスクを作成
これで、仮想マシンが作成され、OSのインストールが始まるKVM上にWindows Server 2008 R2がインストールされている

 

仮想マシンの各種設定

 仮想マシンが動作しているウィンドウのアイコンをクリックすると、この仮想マシンの設定が表示される。Performanceは、仮想マシンのCPU使用量、メモリ使用量、ディスクIO、ネットワークI/Oなどがグラフで表示される。ここでは、仮想マシンがどのくらいの負荷になっているかチェックできる。

 Processorでは、現在使用している仮想CPUの数などが設定できる。CPUピニングは、仮想CPUが動作する物理CPUを制限する機能だ。また、NUMA設定から生成するボタンを使えば、NUMAアーキテクチャーで最も性能が出るように設定してくれる。

 例えば、2ソケットのNUMAアーキテクチャーのサーバーの場合、仮想CPUが2つのCPUに分かれていると、性能が犠牲になる。やはり、1つのOSが動作する仮想CPUは、同じCPU上で実行された方がいい。

 Memoryは、仮想マシンが使用する仮想メモリ容量を指定する。ここでは、割り当てを変更、最大割り当てという2つの項目がある。

 割り当て変更は、最初に指定した仮想メモリの容量を変更する時に利用する。仮想メモリの容量を小さくすることも、大きくすることもできる。

 最大割り当ては、動的なメモリ割り当てを利用する時に使う。動的にメモリを割り当てる時の最大値を設定する。今回は、複雑なことは行わないため、両方の値も同じに設定しておく。

 Boot Optionは、仮想マシンがどのデバイスから起動するかを設定する。BIOSなどにあるブートデバイスの順番設定に近い機能だ。

 後は、IDE Disk、IDE CDROM、NIC、タブレット、マウス、表示、Sound、Serial、ビデオなどの設定が用意されている。

 仮想マシンを動かすだけなら、初期設定でほとんど問題ない。


仮想マシンの詳細設定。Overviewでは、仮想マシンの名前やUUID、マシンセッティング、セキュリティなどが変更できる。Performanceでは、CPU、メモリ、ディスクIO、ネットワークIOなどの使用量がグラフで表示されている。CPUは、この仮想マシンが使用しているCPU数が設定されている。ここでCPUピニングの設定も行える。
メモリでは、仮想マシンが使用するメモリ容量を設定する。仮想マシンでどの起動デバイスを使用するかを設定。IDE Diskのモードを指定する。
NICでは、仮想ネットワークのモデルを指定する。ビデオでは、仮想ディスプレイのモードなどを指定する。

 

準仮想化ドライバのインストール

 マイクロソフトのHyper-VやVMwareのESXなどでは、仮想マシンに準仮想化ドライバをインストールすることで、キーボードやマウスの操作が使いやすくなったり、ストレージやネットワークアクセスが高速化sitari
する。KVMでも同じような準仮想化ドライバが用意されている。

 ただし、Hyper-VやESXのように、簡単にインストールできるわけではない。若干手間がかかる。

 まず、RHELのコンソールから、Virtio-Winというパッケージをインストールする(yum install virtio-win)。このパッケージをインストールすると/usr/share/virtio-winディレクトリにvirtio-win.isoというISOイメージが用意されている。このISOイメージを仮想マシンのCDドライブにマウントする。

 このISOイメージの中にあるRHEV-Block64.msiを実行する(32ビットOSは、RHEV-Block.msi)。このドライバは、ハードディスクだけなので、ネットワークドライバも準仮想化ドライバを使用するなら、RHEV-Network64.msiを実行する(32ビットはRHEV-Network.msi)。

 Hyper-VやESXのように、仮想マシンのコンソールに準仮想化ドライバのインストールボタンがあって、それを押せば自動的に準仮想化ドライバがインストールされるというわけではない。

 

KVMのライブマイグレーション

 KVMは、ライブマイグレーション機能をサポートしている。ライブマイグレーションを実現するために、専用の管理ツールがなくても仮想マシンマネージャー(Virt-manager)だけで行うことができる。

 ライブマイグレーションを利用するには、2台のホストからアクセスできるストレージを用意する必要がある。多くの場合、NFSサーバーや共有ストレージのLUNを利用することになる。

 テストだけを行うなら、性能的には問題になるが、送信側のホストサーバーにある仮想ディスクファイルがある/var/lib/libvirt/imagesディレクトリをNFSでエクスポートして、受信ホストの/var/lib/libvirt/imagesディレクトリにマウントしておく。

 ライブマイグレーションの設定は、仮想マシンマネージャーのファイル→接続を追加で、ハイパーバイザーにQEMU/KVM、接続でSSHでのリモートトンネルを選択する。その後、移行先のホスト名を選択してすればOKだ。

 実際にライブマイグレーションを行うには、仮想マシンマネージャーで移行する仮想マシンを指定して、右クリックして「移行」メニューを選び、「移行」ボタンを押す。

 KVMでのライブマイグレーションは、仮想マシンが使用しているメモリをネットワークで転送していく。もし、メモリを転送中に、メモリの内容に変化が起これば、その差分を転送していく。実際に移行するのは、すべてのメモリが転送され、移行元と移行先で同じコピーが出来上がった時だ。このため、頻繁にメモリが変更される仮想マシンでは、いつライブマイグレーションが終了するのかを保証していない。

 例えば、昔のCGIなどを利用したアプリケーション、データ更新が頻繁にあるアプリケーションが動作している仮想マシンは、KVMのライブマイグレーションは向かない。また、ライブマイグレーションを動かしてから、いつライブマイグレーションが終了するかは保証されていない。

 

 レッドハットでは、RHELからGUIなどを抜いて、コンパクトにしたRed Hat Enterprise Virtualization Hypervisor(RHEV)を用意している。RHEVは、仮想化ホストとして動作するだけのコンパクトなOSとなっている。フットプリントは128MBと非常に小さい。さらに、SELinuxによるセキュリティが導入されている。

 フットプリントが小さいことで、RHEVをインストールしたホストには、数多くの仮想マシンを動かすことができる。

 RHEVは、GUIがないため、管理が難しい。そこで、レッドハットでは、RHEVやKVMが動作しているRHELを管理するために、Red Hat Enterprise Virtualization Manager for Serverというアプリケーションを用意している。このアプリケーションを利用すれば、複数のRHEVやRHELを一括して管理することが可能だ。もちろん、ライブマイグレーションの管理などをもこのソフトで行える。

 Red Hat Enterprise Virtualization Manager for Serverはレッドハットの製品にしては、RHEL上ではどうさせず、Windows Server 2008 R2が必要になる。将来的には、RHEL上で動作するようには計画しているようだ。

 仮想マシンを作成して、動作させるまでしか今回はテストしなかったが、実際KVMを使ってみると、Hyper-VやESXに比べると管理ツールなどの弱さが目立つ。

 KVMは性能的には良さそうだが、さまざまなオープンソースのツールやアプリケーションによって組み合わされてできているため、使い勝手がいいというわけではない。やはり、Linuxを深く分かっているユーザーや開発者がいないと、なかなか運用が難しそうな気がする。

 なおレッドハットでは、KVMに関するセミナーを行っている。KVMに関する機能を紹介する「KVMスタートアップ」(1日)、ハンズオン形式でKVMを使用した仮想マシンのインストール、管理までを紹介する「KVMワークショップ」(2日間)があるので、興味を持たれた方は、受講を検討してみるといいだろう。

 スケジュールに関しては、レッドハットのWebサイトを参照のこと。

関連情報