fbpx

Wakame-vdc検証報告書

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

オープンソースクラウド基盤ソフトウェアの一つである「Wakame-vdc」に関しての調査報告書の公開を本日より開始。 

Wakame-vdcのウェブサイト(http://wakame.jp/)においても、インストールマニュアル等が公開されているが、今回の調査ではインストールするに際しての注意点やトラブルシューティング、今後の課題などの内容も含まれており、Wakameのウェブサイトと合わせて利用することで、より理解が深まるものとなっている。

1. 概要
Wakame-vdcは、コンピュータ資源管理を自動化するためのソフトウェアであり、IaaS型クラウドを構築するためのクラウド基盤と呼ばれるものである。Wakame-vdcはWakame Software Foundationが運営する、Wakame Projectで開発されており、初期のコードは日本企業の株式会社あくしゅが全て提供している。今後はWakame-vdcと組み合わせてより便利に使っていけるソリューションとの相互活用を図る計画がある。
現在、開発体制としてはこのWakame Software Foundationにて、本ソフトウェアを個人利用・商用利用することを目的としたユーザの声を収集し、逐次ソースコードへ反映していくというやり方を取っており、現場で必要とされたものを実装していく比較的現実路線のオーソドックスなスタイルとなっている。

ソフトウェアの特徴としては、Rubyで記述された国産のオープンソースソフトウェア(Apache 2.0ライセンス)であることと、開発のスタイルにある通り、データセンターサービスを意識した機能がいくつか備わっている点にある。
ドキュメントなどはまだ少ないが、日本語で記述されてから英語に翻訳されていく流れとなっている。


2. Wakame-vdcの機能

Wakame-vdcのバージョン番号は、西暦の下2桁とリリース月の組み合わせで決定しており、W初版は2010/4/19にリリースされた。
本稿ではVersion 10.11 (2010年11月リリース版)を元に記述する。執筆中にVersion 10.12が発表されており、そちらの機能についても述べるが、検証はしていない。
Version 10.12でも基本的な思想やアーキテクチャに変更は無く、役割の異なるノード間での、AMQPを介した連携などは従来通りに行っている。しかしコードのレベルでは大幅にリファクタされている。

2.1. アカウントとユーザIDの関連 (v10.11)
Wakame-vdcでは、アカウントと呼ばれる課金・請求の単位を決めるグループと、それに所属するユーザID・パスワードを管理する。例えば個人の場合、アカウントはクレジットカード、中小企業であれば企業名、大手企業であれば部署など、最終的に課金を束ねる単位として定義されている。その中で、ユーザIDを1つ以上持てるようになっている。
2.2. KVMによる仮想マシンの管理 (v10.11)
Wakame-vdcは現在、KVMにのみ対応している。今後もVMWare等、対応する仮想化環境が増える見込みである。起動したインスタンスにはSSH接続ができるため、そこからは一般的なホスティングサーバと同様に利用できるようになる。
2.3. 仮想マシンのHA (v10.12)
KVMそのものは安定した仮想化技術であるが、それでもKVMプロセスが予期せぬシャットダウンを起こした場合に、Wakame-vdcがそれを検出し、直ちに再度マシンイメージから起動しなおす機能がある。
2.4. リソースプール (v10.11)
リソースをリソースプールとして定義し、それをアカウントに関連付けることができる機能である。ここでいうリソースとは、インスタンスが起動する物理サーバや使用するディスクを指す。
一般的にはデータセンター側が用意した共通のプールを全てのアカウントで共有して利用するという方法になるが、特定のアカウントの為に用意した別のプールを割り当てることができるため、ハウジングと組み合わせた利用などが考えられる。
特定の物理サーバ上で起動させたい、ディスクは決まった製品が良いといった、利用者ごとの要求を吸収するための機能として設計されている。
2.5. IPネットワークリソースプール (v10.12)
v10.12では、2.4で述べたリソースプールに、IPネットワークが加わる。これはアカウント毎に異なったIPアドレスレンジとVLANタグを割り当てる機能である。
応用として、現状VLANを多用して顧客別サービスを設計しているデータセンターにて、Wakame-vdcにアカウントと対応するVLANごとのIPネットワークを定義すれば、Wakame-vdcの共有リソースをアカウントごとのVLANで隔離することができる。

2.6. ディスクボリューム (v10.11)
Wakame-vdcでは、全てのインスタンスは共有ディスクボリュームを利用する。マシンイメージはディスクボリュームに格納されており、これをディスクボリューム内で複製してiSCSIチャネル経由でインスタンスとして起動するようになっている。このため、インスタンスのHAなどを実現しやすい。標準ではZFSをバックエンドに選択することができる。
2.7. スナップショット (v10.11)
ディスクボリュームをそのタイミングの状態で複製する機能である。バックアップなどに利用できる。
2.8. セキュリティグループ (v10.11)
AmazonEC2と同様に、全ての仮想マシンに軽量なファイアウォールが備わり、仮想マシンごとに詳細な通信制御ができる。他のアカウントで作られたインスタンスから送出される関係のないパケットをフィルタリングしてセキュリティを向上させることができる他、2.5節で述べたようにアカウント毎のIPネットワークを定義した上でも利用できることから、VLANと組み合わせることで、より安全でより高度なセキュリティコントロールを実現することができる。
2.9. ユニバーサルログ (v10.12)
リソースの使用状況を記録したユニバーサルログが出力される。このログはデータベースに格納されているので、課金などのシステムから参照し、請求へとつなげることを想定した作りになっている。


3. アーキテクチャ
Wakame-vdcは、2009/4/22にリリースされたWakame-fuelと同様に、AMQPの実装であるRabbitMQを用いて各ノード間の通信を行う。各ノードはそれぞれの責務において、Web APIなどHTTP(s)通信によるサービスの提供などを行う。

3.1. Hyper Visor Agent (HVA)
物理サーバ内の仮想化機能を利用し、仮想マシンを管理するエージェントである。ファイアウォールの設定として、NetFilterを用いる他、仮想マシンの死活監視も行い、必要であればHAとしてインスタンスの自動復旧などを実施する。

3.2. Storage Target Agent (STA)
ストレージシステムを利用し、ディスクボリュームを管理するエージェントである。現時点ではZFSを用い、実際に要求したディスクボリュームが作成されているかなどの管理を行う。ZFS版はzpoolを監視している。仮想マシンの起動時には、iSCSI経由で起動できるように、ストレージシステム内部でマシンイメージの複製を行うなどする。

3.3. Naming Service Agent (NSA)
仮想マシン向けのサービスとして、DHCPサーバやDNSサーバの管理をするエージェントである。

3.4. Data Center Manager (DCMGR)
データセンター全体のリソースコントロールを管理する仕組みの総称で、現在は2つのコンポーネントから成る。

3.4.1. Web API
クライアントからの要求を受けて、それを実行するためにデータセンター内部のAMQPネットワークにメッセージを送信する。リソースの割り当てなどデータベースを参照しながら機能する。

3.4.2. Collector
データセンター内部のリソースの状況を把握するためにAMQP内を流れるデータを収集し、データベースへ反映させる。

3.5. Web UI
ブラウザからコントロールができるようにユーザインターフェイスを提供し、DCMGRへ取り次ぐ。
4. Wakame-vdcのインストール方法

本章では、Wakame-vdcのインストール手順を説明する。使用する環境については4.1節で述べるが、2台のサーバを想定する。片方のコマンドの出力結果を元に設定する項目があるため、インストール作業は並行して行うことが好ましい。本章では実際のインストール作業に近くなるよう、それぞれの設定を並行して説明する。

4.1. 使用する環境

Wakame-vdcの最小構成としては、2台の物理マシンからの構成である。Wakame-vdcには、Ubuntu10.04とOpenSolarisを想定したパッケージがあり、それぞれが必要なためである。ネットワーク環境としては、インターネットに接続している必要がある。これはパッケージのインストールのためである。またwakameでDHCPサーバを起動するため、DHCPを使用していない環境であることが好ましい。
ノードの種別とパッケージ・OSの対応表は以下のようになる。以降の説明では、設定するサーバをそれぞれUbuntu、Solarisと表記する。

アーキテクチャ OS gemパッケージ ノード種別
 i386 / x86_64  Ubuntu 10.04 Server wakame-vdc-webui vdc-webui
 wakame-vdc-dcmgr vdc-dcmgr-web-api
vdc-dcmgr-collector
 wakame-vdc-agents  vdc-agents-hva
vdc-agents-nsa
OpenSolaris Build134 vdc-agents-sta

UbuntuはKVMで仮想マシンを起動させるため、VTに対応しているサーバを利用する必要がある。

4.2. Ubuntuでのインストール

Ubuntu用のMakefileをダウンロードする。

# wget --no-check-certificate https://github.com/hansode/wakame-vdc2-builder/raw/master/ubuntu/10.04/Makefile

ダウンロードしたMakefileで、make wakameを実行する。makeの仕様上、Makefileがあるディレクトリで実行する必要がある。

# make wakame 

make wakameでの処理内容としては、インストール・設定用スクリプトのダウンロードと実行である。ダウンロード・実行されるスクリプトは以下のものである。
01_setup-base.sh
02_setup-ruby.sh
03_setup-wakame-vdc.sh
04_configure-startup.sh
91_generate-demo-resource.sh

91_generate-demo-resource.shはmake demoの際に実行される。

4.3. Solarisでのインストール

Ubuntuでの作業と同様に、Makefileをダウンロードする。こちらはSolaris用のMakefileとなっている。

# wget --no-check-certificate https://github.com/hansode/wakame-vdc2-builder/raw/master/opensolaris/snv_134/Makefile

 

Makefileのあるディレクトリで、make wakameを実行する。

# make wakame 

Ubuntuのものと同様にパッケージのインストールや設定が行われる。スクリプトのファイル名は同じであるが、内容はSolaris用のものになっている。

01_setup-base.sh
02_setup-ruby.sh
03_setup-wakame-vdc.sh
04_configure-startup.sh
91_generate-demo-resource.sh

91_generate-demo-resource.shはmake demoの際に実行される。

4.4. Ubuntuでのブリッジインターフェイスの設定

仮想マシンが使用するため、Ubuntuではブリッジインターフェイスを構成する必要がある。
Ubuntuの場合は、/etc/network/interfacesを編集する。

設定内容は以下のようになる。追加する行は太字で表示している。

address ではbr0に振られるIPアドレスを指定する。Ubuntuに設定したいアドレスを指定すればよい。ここでは192.168.2.2としている。

4.5. Ubuntuでのホストノードの登録

ホストプールに、ホストノードを登録する。Ubuntu上でmake demoを実行する。

ここでは、登録するノードはlocalhostを想定しているため、自動的に登録される。登録に必要なデータベースのテーブル作成なども合わせて行われる。

4.6. SolarisでのSTAの設定

SolarisはSTAノードとして使用する。設定としては/etc/init.d/vdc-agents-staを編集し、AMQPサーバを指定している箇所を変更する。

ファイルの内容は、以下のようになっている。変更箇所を太字で表示している。

ここではUbuntuのIPアドレスを指定している。
4.6.1. ストレージノードの登録

Solaris上でmake demoを実行する。

ストレージプールに登録するためのSQL文が表示されるので、コピーしておく。

IPアドレスについては、取得に失敗する場合がある。失敗した場合、該当箇所が空白になるので注意する必要がある。

UbuntuでMySQLコマンドを実行し、このSQL文を貼り付ける。

Solarisでのmake demoの際に出力されたSQL文を貼りつける。IPアドレスが含まれていなかった場合は、手動で入力しておく必要がある。

成功したら、quit;を入力してMySQLを終了する。

4.7. 各サービスの起動

4.7.1. Ubuntuでのサービス起動

4.7.2. Solarisでのサービス起動

5. Wakame-vdcの利用手順

Wakame-vdcはブラウザから操作する。UbuntuのPort9000番でWeb UIのサービスが動作しているため、http://192.168.2.2:9000/にアクセスする。図3のような画面が出る。

図3 Web UIのログイン画面

ユーザ名・パスワード共にdemoでログインできる。

5.1. アカウントの作成

アカウント及びユーザの作成は、rakeスクリプトを実行することで行える。rakeを実行するため、所定のディレクトリに移動する。本稿の手順でインストールした場合は、下記の場所となっている。

ユーザ名・パスワードを指定して作成する。

作成したユーザをアカウントに関連付けるために、下記のコマンドでユーザIDを取得する。

取得したユーザIDを指定し、アカウントを作成する。

作成後、アカウントのUUIDを確認する。

上記コマンドで取得したUUIDを用いてアカウントとユーザを関連付ける。

作成したアカウントのユーザ名、パスワードを用いてログインが可能になる。
5.2. セキュリティグループの作成

ゲストOSに適用させるセキュリティグループの設定を、予め定義することができる。NETWORK & SECURTYからSecurty Groupsを選択する。

 

図4 セキュリティグループの一覧

新しく作成する場合は、Create Securty Groupを選択する。選択後は図5の画面になる。

図5 セキュリティグループの新規作成

記述したルール以外は全て拒否されるため、必要な通信を許可しておく必要がある。ルール記述のフォーマットは下記のようになる。

#から始まる行はコメントである。また空行についても無視される。from-port,to-portでは、Port番号の範囲を指定する。例えば、ホストを問わず、SSH(Port22)による通信を許可する場合の設定例は以下のようになる。

1~1024番を全て許可するには、以下のように記述する。

SSHを192.168.2.0のネットワークでのみ許可する場合は以下のようになる。

またicmpの場合は以下のフォーマットになる。

例えば、icmpを全て許可する場合は以下のようになる。-1はワイルドカードとなっており、全てのタイプとコードが当てはまる。

また作成済みのセキュリティグループの設定を変更するには、Editをクリックする。図6の画面になり、編集できる。

図6 セキュリティグループの編集

編集後、Yes, Updateをクリックすると変更が適用される。

5.3. Key Pairの作成
仮想マシンにログインするためRSA Keyを作成することができる。実際に適用するには、仮想マシン側で起動時にwakame-vdcから鍵を取得し、設定するように起動スクリプトなどを用意する必要がある。NETWORK & SECURTYのKey Pairsタブを選択すると、図7の画面になる。

図7 Key Pairsの一覧

Create Key Pairボタンを選択すると、図8の画面になり、鍵を生成できる。生成後、秘密鍵をダウンロードすることができる。

図8 Key Pairの新規作成

5.4. 仮想マシンの起動

仮想マシンを起動するにはまず、仮想マシンのイメージを選択する。IMAGESのMachine Imagesを選択すると、図9の画面になる。

図9 ディスクイメージの一覧

起動するインスタンス用のディスクイメージを選択し、Launch Instanceをクリックすると、図10の画面が出てくる。

図10 仮想マシンの起動

適用するセキュリティグループやホスト名を選択し、Launchをクリックすると仮想マシンが起動する。起動しているかの確認はINSTANCESのInstancesで行える。セキュリティグループを適用せずに起動した場合は、すべての通信が許可される。Host Nameは任意の値を設定でき、省略も可能である。ただし現状、Web UI上では表示していない。Web APIではここで指定したHost Nameを参照可能である。

図11 仮想マシンの一覧

IPは仮想マシンのIPアドレスであり、NSAのDHCPサーバによって割り当てられている。仮想マシン側でDHCPを用いてアドレスを取得していれば、ここでの値が適用される。

Stateは仮想マシンの状態であり、下記の状態がある。

 init 準備中
 running 起動中
 shuttingdown シャットダウン中
 terminated 停止

stateがrunningになっていれば、該当の仮想マシンが起動している。

5.5. 仮想マシンの終了

Instancesタブで、仮想マシンの一覧が見られる。停止や再起動を行う場合は、図のように該当の仮想マシンにチェックを入れ、Instance Actionsから操作を選ぶ。Terminateは通常の終了、Rebootは再起動である。

図11 仮想マシンの停止・再起動

5.6. ディスクイメージの登録

本節では、作成済みのディスクイメージを登録する方法について説明する。

5.6.1. HVAノードにイメージを保存する場合

Ubuntuの任意の場所にディスクイメージを保存し、以下のSQL文を実行する。

データベース上でのID。一意な数字を指定する。
 イメージを使用するwakameのアカウントを指定する。デフォルトのdemoではa-00000000が用いられている。
イメージに付ける名前。8文字以内。Web UIで表示される名前にも使用される。
 ディスクイメージファイル。フルパスで指定する。

5.6.2. STAノードにイメージを保存する場合

まずはZFS上に、ディスクイメージ用のファイルを作成する。

にはファイルのサイズを指定する。ここではディスクイメージに設定している値を指定する。

にはプール名を指定する。ここではrpoolが作られているのでrpoolを指定する。
は作成するファイルの名前を指定する。

作成後、iSCSI targetとして登録する。

また後の操作のためにiqn番号を控えておく。

Ubuntu側で、iSCSIディスクとしてマウントする。以下のコマンドで、STAノードが提供しているディスク一覧を取得できる。

一覧から、先ほど控えたiqn番号のディスクを探し、マウントする。

マウント後、iSCSIディスクに、ディスクイメージを書き込む。

あるいはこの状態でKVMを起動し、インストール作業を行う。

ddによるコピー、あるいはkvmでのインストールが終わったらスナップショットファイルの作成を行う。STAノード上で行う必要があるため、Solaris上で行う。

/は対象のファイルを指定し、では保存する際のスナップショット名を指定する。スナップショットの名前は、snap-で始まっている必要がある。

続いて以下のコマンドを実行し、作成したスナップショットをファイルとして出力する。スナップショットファイルの置き場所は、~wakame/vdc/sta/snap//が想定されているため、移動する。

こちらもwakameではという名前を想定しているため、合わせた名前で保存する。

作成後、UbuntuからMySQLにログインし、登録を行う。STA経由の場合は以下のSQL文で、まずスナップショットとしてデータベースに登録を行う。

, , については5.6.1.の、HVAノードにイメージを保存する場合と同様である。は、スナップショットファイルの名前であるが、ファイル名の先頭のsnap-を省略して指定する。

続いてイメージとしての登録を行う。

, , については、上記と同様である。は、スナップショットファイルの名前である。こちらはsnap-を略さないが、代わりに.zsnapを省略した名前を指定する。

6. TIPSとトラブルシューティング
6.1. ログファイル
サービスとログファイルの対応表は以下のようになる。

サービス ログファイル
HVA /var/log/vdc-agents-hva.log
NSA /var/log/vdc-agents-nsa.log
Collector /var/log/vdc-dcmgr-collector.log
Web API /var/log/vdc-dcmgr-web-api.log
Web UI /var/log/vdc-webui.log
STA /var/log/vdc-agents-sta.log

6.2. VNCでの接続

Web UIに情報は現れないが、ゲストOSはVNCからの接続が可能になっている。HVAノード上でpsを実行して、KVMプロセスのオプションを確認する。

-vnc :20となっているオプションが、VNCの待ち受けPort番号である。実際に使用しているPort番号はこの数字に5900を足したものとなっている。例えば:20であれば、待ち受けPortは5920番になる。KVMプロセスが複数ある場合は、-nameオプションで指定されている名前から特定すると良い。ここで指定されている名前は、Web UIから確認できる。

6.3. ディスクイメージの保存場所

ディスクイメージの作成については5.6節で述べたが、仮想マシンが起動する際には、所定の場所にコピーされたイメージが用いられる。それぞれ、保存場所は以下の表のようになる。

保存しているノード 保存場所
HVAノード /var/lib/vm//
STAノード rpool/

急なシャットダウンなどで仮想マシンが利用できなくなった場合、WebUIからは復旧が出来なくなることがある。しかしディスクイメージは残っているため、そこから復旧やデータの回収ができる。

6.4. データベースの操作

現行のwakameでは、仮想マシンのエントリの削除は行えない。このため、使用しなくなった仮想マシンや、起動に失敗した仮想マシンのイメージなどが残ってしまう。ディスク上からイメージをファイルシステム上から消すことはできるが、データベース上にエントリが残っていると、ストレージ使用率の計算に含まれるといった不都合が生じる。
対処法としては、MySQLを直接操作して削除すれば良い。例えば、使っていないイメージのエントリを消す場合は以下のようになる。IDが1のイメージを削除するには、以下のように実行する。

削除したいイメージのIDは、selectで予め調べておくと良い。

なお、削除ができないのは、エントリを全て残すというポリシーで設計されているためである。設計上、一定期間使われていない仮想マシン等は、Web UI上に表示されなくなる機能が予定されている。

7. 今後の課題

7.1. インストールスクリプトの充実
本報告書では、HVAノード1台、STAノード1台の構成を元に説明・検証を行った。またインストール用のスクリプトも、この構成を想定している。しかし実運用時には、これらのノードを複数台用意する構成が考えられる。そのような環境を簡単に構築するためには、インストールスクリプトを、複数台構成に対応させる方が好ましい。

7.2. ディスクイメージのインポート
ディスクイメージの登録には、別途ファイルをアップロードし、直接MySQLを操作するといった作業が必要になる。このような操作も、将来的にはWeb UIからすべて行えるようになるだろう。

7.3. Key Pairの利用
現行のwakame-vdcには、Key Pairを作成する機能はあるが、実際に利用するには仮想マシン側で準備が必要である。作成したKey Pairはメタデータサーバからダウンロードする必要があり、仮想マシンにそのような処理を行うスクリプトを用意する必要がある。

7.4. 適用するセキュリティグループの変更
現行の仕様では、仮想マシンに適用したセキュリティグループを、後から違うセキュリティグループに切り替えることは出来ない。長期間の運用では、最初に同じポリシーを適用していた仮想マシンでも、後で別々のポリシーを適用させることが考えられる。そのような局面になった場合、セキュリティグループの設定でそれぞれの仮想マシン向けのポリシーを記載する必要があり、設定が複雑になる。

8. まとめ

本調査書ではWakame-vdcについて調査した。Wakame-vdcはまだ開発途中であるため、本報告書と同様のシンプルな環境を想定している部分がある。例えばインストールスクリプトがそれにあたるが、今後更新され多様な機能が追加されていくことが予想される。今回の検証バージョン10.11であったが、2010年12月にリリースされたバージョン10.12ではVLANの割当てによる、動的なネットワーク構築の機能が追加されるなど、随時機能強化がされている。
Wakame-vdcは純国産のオープンソースIaaSクラウド基盤ソフトウェアであるため、公式ドキュメントも日本語であり、日本語でのサポートが受けられる。またWakame Software Foundationへ参加することで機能の要望も出せる。

【主な参考文献】
[1] Wakame Software Foundation http://wakame.jp/
[2] Wakame-vdcインストールドキュメントhttp://wakame.jp/manual/wakame-vdc/10.11/installation.html
[3] Wakame-vdc 利用ガイドhttp://wakame.jp/manual/wakame-vdc/10.11/usersguide.html

新規CTA