Xenでのひととき: 仮想化したLinuxでアプリケーションをテストする

サンドボックスを作ってアプリケーションを分離し、安全に、平和に保つ

XenはLinux™カーネルで使用できる仮想化技術であり、これを使用すると、新しいアップグレードを、あたかも既存環境で実行しているかのように囲い込んでテストすることができます。この記事では、Fedora Coreを使ってXenをインストールする方法を説明しますが、いったんインストールしてしまえば、どのディストリビューションを使っても、Xenの中では全てが同じように動作します。Linuxでの仮想化について覗いてみましょう。そして、新しいソフトウェアをテストするために、あるいは同じLinuxマシン上で複数の仮想マシンを実行する場として、サンドボックスを使う利点を調べてみましょう。

Bryan Clark (bclark@redhat.com), Interaction Designer, Red Hat

Bryan Clarkは、Red HatのDesktop Groupで、猿のような叫び声を上げています。また、GNOMEデスクトップに関する多くのプロジェクトのメンバーでもあり、世界中のデスクトップを乗っ取ろうと精力的に活動しています。彼と、Clarkson Open Source Instituteの彼のメンバーは、Xenのパフォーマンス統計を再評価する研究論文を昨年発表しています。彼は現在マサチューセッツ州ケンブリッジに住み、楽しみのために他の土地へ旅するのを趣味としています。連絡先はbclark@redhat.comです。



2005年 3月 15日

既存のソフトウェアに対して次々に改善事項やバグ修正が加えられるため、オープンソースの世界は常に変化し続けています。ソフトウェア・アップグレードの最先端を維持することは、片手間でできることではありません。ソフトウェア・アップグレードで一番厄介なのは、アップグレードが完了した後、そのアプリケーションが本当に動作するかどうか分からない、ということです。大部分のソフトウェア・パッケージング・システムではロールバック機能を持っていますが、それでは不十分な場合が多々あります。理想的に言えば、こうしたアップデートによって影響を受けない環境の中で、こうしたアップデートをいじってみたいものです。

皆さんにも、子供が遊ぶのと同じような、汚れを気にせずに遊べるサンドボックス(sandbox: 日本の「砂場」に当たる)が必要でしょう。

仮想化(virtualization)はしばしば、アプリケーションやシステムを、同一ハードウェア上にある他のものから分離するする(あるいはサンドボックス化する)ために使われます。Linuxでは、ハードウェア・エミュレーターから純粋なハードウェア仮想化まで、様々な形式の仮想化をサポートしています。そうした中で最近、飛び抜けて人気が高まっている仮想化技術が、University of Cambridgeで開発されたXenです。Xenは、今までにないパフォーマンスとセキュリティーから、特に注目すべきものと言えます。

Xenの登場

University of Cambridgeでの研究プロジェクトとして開発されたXenは、オープンソース・コミュニティーで急激に人気が高まっています。Xenは、疑似仮想化VMM( paravirtualizing Virtual Machine Monitor)です。つまり、OS(オペレーティング・システム)は特定な領域で修正されてハイパーバイザー(hypervisor)を呼びますが、そのOS上で実行するアプリケーションは修正されないのです。VMWareなど他の仮想化では、真の仮想化(実行中のOSを変更する必要がない)を行いますが、やはりマシンコードの読み込み処理をしながら変換する必要があり、そのためにパフォーマンスが影響を受けます。

Xenでは修正したOSが必要なため、Xenアーキテクチャーに移植しない限り、単純に現在のLinuxカーネルを持ってきてXenハイパーバイザーの下で実行することはできません。しかし、Xenアーキテクチャーに移植された新しいLinuxカーネルがカレント・システムで使えるのであれば、既存システムは何ら変更せずに実行することができます。

図1. 簡単なXenアーキテクチャー
The simple Xen architecture

Xenはどこにあるか

Xenのソースコードは、Xenのプロジェクト・ページから入手することができます(参考文献にリンクがあります)。既にLinuxディストリビューションを実行しているのであれば、パッケージ・アップグレード、またはパッケージ・インストールからXenを入手することができます。Xenをパッケージしている主なディストリビューションは、下記の通りです。

自分が使用しているディストリビューションをチェックしてみてください。このリストにないものを使っている場合には、ソースコードを直接使う必要があるかも知れません。ディストリビューション固有のインストール手順を除けば、どのディストリビューションを使っても、Xenでは同じように動作します。

Fedora Coreを使う

私のシステムでは、 Fedora Core 3 がインストールされ、動作するようになっていますので、記事を簡潔にするために、Fedora Coreでシステムを立ち上げる方法について説明することにします。

Xenのパッケージが開発チャンネルで入手できるようになったのはごく最近ですが、Fedoraでは既に大きなXenユーザー・コミュニティーができています。FedoraでXenを試している人の数は非常に多いため、オンラインのヘルプを見つけるのに苦労はないでしょう。


Xenをインストールする

このセクションでは、皆さんがすぐに使えるように、参考文献にあるQuick Start Guideからの主なポイントをハイライトして説明します。XenのアップデートがFedoraに取り込まれるにつれ、時間と共にQuick Start Guideも恐らく変わって行くでしょう。wikiがこうした変更を反映して、最新にアップデートされ続けることを祈りたいものです。

まず、ベース・マシン用に、最小サーバー・インストールから始めましょう。このベース・マシンは皆さんのハイパーバイザーであり、サーバー・アプリケーションは何も実行しません。このマシン上で実行する、Xenサーバーに置くべきパッケージは後でインストールするので、実行したいアプリケーションをインストールする必要はまだありません。

システムが実行するようになったら、そのシステムをFedoraの最新開発バージョン(rawhideと呼ばれます)にアップグレードする必要があります。これは、/etc/yum.repos.d/ ディレクトリーにある要素のうち、fedora-devel.repo以外をenabled=0に、fedora-devel.repoをenabled=1に変更することで行います。

これでyumリポジトリーが設定できたので、マシンをrawhideにアップグレードし、最新のXenリリースが使えるようにする必要があります。

リスト1. FC3をrawhideにアップグレードし、Xenパッケージをインストールする
yum update
yum install xen kernel-xen0 kernel-xenU

次に、作業用のダミー・ファイルシステムを作ります。

リスト2. Xenサーバー・ファイルシステムをフォーマットし、設定する
mkdir -p /xen/base
dd if=/dev/zero of=/root/base.img bs=1M count=1 seek=1024
mkfs.ext3 /root/base.img
mount -o loop /root/base.img /xen/base

Xenサーバー・ファイルシステムをフォーマットし、マウントしたら、次のステップは、何かを実行するためのベースとなるパッケージをインストールすることです。XenサーバーでWebサーバーを実行するには、Webサーバー・パッケージのセットをインストールする必要があります。(警告: これにはしばらく時間がかかります。yumを実行したら、散歩にでも行ってください。)

リスト3. Xenサーバー・パッケージをインストールする
yum --installroot=/xen/base -y groupinstall web-server \
		--enablerepo=base --disablerepo=development

(この間、皆さんは散歩しているはずです。)

これで必要なパッケージが全てインストールされたのですが、単純なfstabファイルを追加する必要があります。これによって、ルート・デバイスsda1を取得するのだとXenサーバーに伝え、Xenサーバーは、ルートとしてこれを使うのです。このルート・デバイスは、実際にはハイパーバイザーによる仮想化デバイスなのですが、サーバーにはそれが分かりません。

リスト4. Xenサーバーのfstabファイル
/dev/sda1		/		ext3	defaults	1 1
none			/dev/pts	devpts  gid=5,mode=620	0 0
none                    /dev/shm        tmpfs   defaults	0 0
none                    /proc           proc    defaults	0 0
none                    /sys            sysfs   defaults	0 0

このファイルを、/xen/base/etc/fstabに書き込みます。通常通りのFedoraインストールでは、このfstabは作られません。Fedoraの将来のバージョンでは、この問題を処理するツールが含まれものと期待されています。

最後に、システムが適切に実行するようにするため、少し細工が必要です。Xenは現在、initrdで問題を抱えているため、システムをブートさせるためには、幾つかのデバイス・コードを皆さんが自分で作る必要があります。さらに、スムーズに実行するためには、TLSライブラリーを移動した方が得策です。現在のところ、TLSライブラリーとXenは、まともに相互動作しないのです。これが終わったら、このファイルシステムをアンマウントします。

リスト5. 動作させるための、最後の細工
for i in console null zero ; do MAKEDEV -d /xen/base/dev -x $i ; done
mv /lib/tls /lib/tls.disabled
mv /xen/base/lib/tls /xeb/base/lib/tls.disabled
umount /xen/base/

Xenを実行する

これで、苦労しつつもゲストを手動設定できたので、実際にマシンをリブートしXenカーネルを使い始めることができます。おそらく、通常よりもずっと多くのメッセージが出力され、TLSライブラリー(前のセクションで、他に移動させて取り除いたものです)に関する気がかりなメッセージも見えるかも知れません。

Xenでは、実行するサーバー毎にコンフィギュレーション・ファイルが必要です。サーバー全てに対して、単一の動的コンフィギュレーション・ファイルを作ることもできますが、私としては、2つそれぞれに対して静的なコンフィギュレーション・ファイルを作るようにお勧めします。見て分かる通り、ディスク・ラベルがサーバーに対して、ファイル・イメージがsda1デバイスだと伝えています。また、使っているxenUカーネルと、サーバー・ゲストが受け取るメモリーも規定されています。

リスト6. Xenサーバー・コンフィギュレーション・ファイル
/etc/xen/base
kernel ="/boot/vmlinuz-2.6.10-1.1141_FC4xenU"
memory = 64
name = "BaseServer"
nics = 1
disk = ['file:/root/base.img,sda1,w']
root = "/dev/sda1 ro"
/etc/xen/test
kernel ="/boot/vmlinuz-2.6.10-1.1141_FC4xenU"
memory = 64
name = "TestServer"
nics = 1
disk = ['file:/root/test.img,sda1,w']
root = "/dev/sda1 ro"

サーバーを実行状態にするには、xend startコマンドでXenサービスを起動し、次にxm create baseコマンドで、ベースのコンフィギュレーション・ファイルからBaseServerを作ります。こうしたアクションを行うと、Xenゲストへと導かれ、Xenゲストが起動するのを見ることができます。ゲスト・コンソールをエスケープしたい時には、Ctrl-] を押しさえすれば、すぐにハイパーバイザー・コンソールに戻ることができます。


Xenを使う

ここまでで、コンフィギュレーション・ファイルの編集とXenサーバーを幾つか実行するようにシステム設定するために、しばらく時間を費やしたことになります。その苦労の報いはどんなものでしょう?

今やシステムのコピー2つが、同じマシン上で仮想化され、同じカーネルを実行しています。BaseServerが、通常通りWebサービスを実行するための安定な環境を表すとすると、TestServerは、Fedoraのrawhideが提供する最新ソフトウェア・アップデートを表すことになります。TestServerシステムに対しては、ソフトウェア・アップデートの新バージョンすべてを試しながら、いくらでもアップグレードを行うことができます。充分安定だと判断できたところで、TestServerをBaseServerとして実行させればよいのです。

BaseServerを設定する

BaseServerが動作しているのであれば、実行させようとしているapache httpdサービスの設定を変更する良い機会です。/etc/httpd/conf.d/ ディレクトリーからssl.confファイルを外すことによって、sslをオフにした方がよいでしょう。そうしないと、サーバーに対して証明書を生成しなければならなくなります。また、apacheユーザーをシステムに追加する必要があるかもしれません。

Xenハイパーバイザーによって、自動的に仮想ネットワーク・デバイスが与えられます。このデバイスでdhcpを実行できることが確認できれば、単純にdhclient eth0を実行すると、BaseServer用のIPアドレスが取得できるはずです。

TestServerを設定する

いったんBaseServer用のコンフィギュレーションを設定できたらば、BaseServerコンソールからpoweroffを実行し、このインスタンスをシャットダウンします。既にBaseServerからログアウトしているのであれば、xm console BaseServerを使って、再度アクセスできるようにします。

今度は、cp /root/base.img /root/test.imgを使ってベース・イメージ・ファイルをコピーし、同じファイルシステムの重複コピーを作ります。xm create -c testを実行するとBaseServerと同じサーバーを実行しますが、今度はTestServerと呼ばれます。TestServerにログインし、Xenをインストールするのセクションで行ったのと同じようにrawhideサポートをイネーブルにし、yum updateを実行します。

このTestServerインスタンスは、先のBaseServerでの構成と全く同じ構成を持っていますが、Fedoraのrawhideが提供する最新パッケージにとアップグレードされています。これで、皆さんのWebサイトが相変わらず問題なく動作するかどうかを、色々いじりながら試すことができるのです。


Xenには他に何があるのか?

この簡単な解説と単純なサンプルで、皆さんもXenを動作させられるようになり、様々なテストが行えると思います。Xenを手早く理解できるようにと、LVMやスナップショットなどを利用する方法、あるマシンから別のマシンにXenサーバーを移行する方法などについては触れませんでした。しかしXenが提供する利点の幾つかは理解できたと思いますので、下記の参考文献を調べて、他にどんな素晴らしいことができるかを、皆さん自身で試してみてください。

参考文献

  • Xenユーザーのためのメーリング・リストやその他のサポート・チャンネルを、Xen Project Pageで見つけてください。
  • Xen and the Art of Virtualization」は、Xenのハイパーバイザー・アーキテクチャーを詳細に記述した研究資料です。この資料と、Xenアーキテクチャーに関するその他の論文類 (US)は、Xenが具体的にどのように動作するのかを理解する上で非常に貴重な資料です。
  • Xen and the Art of Repeated Research」は、XenoLinux(Xen仮想マシンで実行しているLinux)とネイティブLinuxとの、あるいはIBM eServer™ zSeries®メインフレーム上での仮想化ツールとのパフォーマンス比較です。結果の一貫性を保つために、初期のパフォーマンス分析と同じ分析を繰り返しています。
  • Xenを使えるまでに立ち上げ、皆さんの経験を共有するために、fedoraproject sitewiki page on the Xen Quick Start Guide for Fedoraを利用してください。
  • FUDCon: Fedora User and Developer Conferenceは誰でも参加できる会議です。最近行われた最初の会議で、Xenに関する話題も取り上げられました。
  • SUSE LinuxGentoo's bugzilla(実験的eビルド)などのディストリビューションでもXenを入手してください。
  • Virtualization and the On Demand Business」(IBM Redpaper, 2004年8月)は、組織がITインフラからビジネス価値を高め、柔軟性を引き出すための手法として、仮想化をどう利用すべきかについて述べています。
  • IBM Virtualization Engineにおけるオートノミック機能」(developerWorks, 2004年9月)はタイトル・エンジンを紹介しています。タイトル・エンジンは、リソースやサーバー、ストレージ、ネットワークなどを、個別のコンポーネントとしてではなく、統合されたシステムとして管理できるシステム・サービスやシステム技術を、一つにまとめたものです。
  • Advanced Virtualization Features on p5 Servers」(IBM Redbooks Technote, 2005年2月)は、IBM eServer pSeries® 5サーバー上で、必要に応じた最善の仮想化構成を選択する方法を解説しています。
  • Developer resources for an on demand worldは、仮想化に関する様々なリソースを提供しています。
  • developerWorksのLinuxゾーンには、Linux開発者のための資料が他にも豊富に用意されています。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux, Open source
ArticleID=231729
ArticleTitle=Xenでのひととき: 仮想化したLinuxでアプリケーションをテストする
publish-date=03152005