Eucalyptus Advent Calendar 2012 JP 三日目

Euca Monkey を使ってみたよ?

さて、Eucalyptus Advent Calendar 2012 JP の三日目です。初日がどうやら一部で「うわっ飛ばしすぎじゃね?」とか心配されたようなので、3日目は大人し目にいきたいと思います。

で、「大人し目って何だ?」って考えてみたんですが、大人しい == ドタバタしない系だと思い、つまり何か仕掛けたら放置プレイでいいんじゃね?となるようなものをターゲットにしようってことになり、協議の結果 Euca Monkey を扱おうという結論に達しました。で、この Euca Monkey ってのは Eucalyptus のストレステストツールでして、README とかを読んでると Eutester っていうテストフレームワークを使うそうです。でもここでいきなりこのテストフレームワークの使い方を説明しだすと、また皆さんを置いてけぼりな展開になるので、ここはぐっと我慢して Euca Monkey を使う方法に徹します。

ちなみに Euca Monkey の作者は Eucalyptus 社のソフトウェアデザイナ の Kyo Lee さんで、詳しくは彼のブログで紹介されています。

環境の準備

で、何はともあれ Eucalyptus の環境を作らないと話ははじまらないんですが、初日のときみたいに nightly build に手をだして本筋から外れるのも何なので、今回は日和って Eucalyptus 3.1 の環境でやります。ステーブルサイコー!

ちなみに Eucalyptus 3.1 の環境の作り方は OSPN Press の「オープンソース」を使ってみよう (第26回 dodai-deploy編)を参考にしてください。

あぁ、一応聖なる紳士淑女のために説明をしますが、ちゃんとメモリを 16GB も積んだマシン2台構成で1台はフロントエンド (CLC/CC) で、もう1台はノードとしました。で、CLC/CC の eucalyptus.conf は以下のように変更しています。

# diff -u eucalyptus.conf.orig eucalyptus.conf
--- eucalyptus.conf.orig        2012-09-27 08:17:29.000000000 +0900
+++ eucalyptus.conf     2012-12-03 02:12:05.000000000 +0900
@@ -154,13 +154,13 @@
 # The networking mode in which to run.  The same mode must be specified
 # on all CCs and NCs in the entire cloud.  Valid values include SYSTEM,
 # STATIC, MANAGED, and MANAGED-NOVLAN.
-VNET_MODE="SYSTEM"
+VNET_MODE="MANAGED"

 # The name of the network interface that is on the same network as
 # the NCs.  In Managed and Managed (No VLAN) modes this may need to be
 # a bridge.  The default is "eth0".
 # Networking modes: Static, Managed, Managed (No VLAN)
-VNET_PRIVINTERFACE="eth0"
+VNET_PRIVINTERFACE="eth1"

 # On a CC, this is the name of the network interface that is connected
 # to the "public" network.  The default is "eth0".
@@ -188,22 +188,22 @@
 # A space-separated list of individual and/or hyphenated ranges of public
 # IP addresses to assign to instances.
 # Networking modes: Managed, Managed (No VLAN)
-#VNET_PUBLICIPS="your-free-public-ip-1 your-free-public-ip-2 ..."
+VNET_PUBLICIPS="192.168.33.110-192.168.33.250"

 # The address and network mask of the network the cloud should use for
 # instances' private IP addresses.
 # Networking modes: Static, Managed, Managed (No VLAN)
-#VNET_SUBNET="192.168.0.0"
-#VNET_NETMASK="255.255.0.0"
+VNET_SUBNET="10.0.0.0"
+VNET_NETMASK="255.0.0.0"

 # The number of IP addresses to allocate to each security group.
 # Specify a power of 2 between 16 and 2048.
 # Networking modes: Managed, Managed (No VLAN)
-#VNET_ADDRSPERNET="32"
+VNET_ADDRSPERNET="2048"

 # The address of the DNS server to supply to instances in DHCP responses.
 # Networking modes: Static, Managed, Managed (No VLAN)
-#VNET_DNS="your-dns-server-ip"
+VNET_DNS="192.168.32.21"

 # The network broadcast address and default gateway to supply to instances
 # in DHCP responses.

で、NC の eucalyptus.conf は以下のように変更しました。

# diff -u eucalyptus.conf.orig eucalyptus.conf
--- eucalyptus.conf.orig        2012-09-27 08:17:29.000000000 +0900
+++ eucalyptus.conf     2012-12-03 02:12:24.000000000 +0900
@@ -88,10 +88,10 @@
 # KVM hypervisor.

 # If "1", use Virtio for the root file system
-USE_VIRTIO_ROOT="0"
+USE_VIRTIO_ROOT="1"

 # If "1", use Virtio for dynamic block volumes
-USE_VIRTIO_DISK="0"
+USE_VIRTIO_DISK="1"

 # If "1", use Virtio for the network card
 USE_VIRTIO_NET="0"
@@ -154,7 +154,7 @@
 # The networking mode in which to run.  The same mode must be specified
 # on all CCs and NCs in the entire cloud.  Valid values include SYSTEM,
 # STATIC, MANAGED, and MANAGED-NOVLAN.
-VNET_MODE="SYSTEM"
+VNET_MODE="MANAGED"

 # The name of the network interface that is on the same network as
 # the NCs.  In Managed and Managed (No VLAN) modes this may need to be
@@ -171,13 +171,13 @@
 # configuration, this may be a bridge or a physical interface that is
 # attached to the bridge.  The default is "eth0".
 # Networking modes: Managed
-VNET_PUBINTERFACE="eth0"
+VNET_PUBINTERFACE="eth1"

 # On an NC, this is the name of the bridge interface to which instances'
 # network interfaces should attach.  A physical interface that can reach
 # the CC must be attached to this bridge.
 # Networking modes: System, Static, Managed (No VLAN)
-VNET_BRIDGE="br0"
+VNET_BRIDGE="br1"

 # A map of MAC addresses to IP addresses that Eucalyptus should allocate
 # to instances when running in Static mode.  Separate MAC addresses and

マシンイメージの準備

Euca Monkey を動かすには何故か CentOS 6.3 の環境が必要だそうです。ちなみに物理でも仮想でもいいようなので、インスタンス上でやろうと思うんですが、マシンイメージを用意するのがメンドーだなーっていうあなたのために

「ハイ、http://emis.eucalyptus.com/ 」。

え?そこはマシンイメージ工房じゃないの?って思われるかもしれませんが、残念ながら CentOS 6.3 のイメージは用意してませんので、Eucalyptus 社が配布しているイメージを使います。

で、マシンイメージの取得は、

  1. eustore-describe-images コマンドで一覧を取得し
  2. eustore-install-image コマンドでインストールする

という簡単なコマンドと手順で実現できるため、まずは eustore-describe-images コマンドを叩きます。(カチャカチャカチャ…ッターン!)

# eustore-describe-images
Traceback (most recent call last):
  File "/usr/bin/eustore-describe-images", line 36, in <module>
    import euca2ools.commands.eustore.describeimages
ImportError: No module named eustore.describeimages

さぁ、はじまりました。これだから使い慣れないディストリビューションで Eucalyptus 動かすの嫌なんだよなー。(完全に責任転嫁)

でとりあえず euca2ools のバージョンを確認です。

# dpkg -l | grep euca2ools
ii  euca2ools                             2.0.0~bzr516-0ubuntu3          managing cloud instances for Eucalyptus

あー、これは無理だわー、eustore-describe-images コマンドは euca2ools 2.1 からだわー。しょーがないから便利コマンドは諦めて CentOS 6.3 のイメージファイルを直接取得して手動で登録します。

で、取得したら以下のように登録します。

# tar -xzf euca-centos6.3-2012.11.07-x86_64.tgz
# cd centos-6.3-x86_64/
# euca-bundle-image --kernel true -i kvm-kernel/vmlinuz-2.6.32-279.14.1.el6.x86_64
# euca-upload-bundle -b kernel.001 -m /tmp/vmlinuz-2.6.32-279.14.1.el6.x86_64.manifest.xml
# euca-register -a x86_64 kernel.001/vmlinuz-2.6.32-279.14.1.el6.x86_64.manifest.xml
IMAGE   eki-945F390D

# euca-bundle-image --ramdisk true -i kvm-kernel/initrd-2.6.32-279.14.1.el6.x86_64.img
# euca-upload-bundle -b ramdisk.001 -m /tmp/initrd-2.6.32-279.14.1.el6.x86_64.img.manifest.xml
# euca-register -a x86_64 ramdisk.001/initrd-2.6.32-279.14.1.el6.x86_64.img.manifest.xml
IMAGE   eri-31F837E3

# euca-bundle-image --kernel eki-945F390D --ramdisk eri-31F837E3 -i centos-6.3-x86_64.img
# euca-upload-bundle -b machine.001 -m /tmp/centos-6.3-x86_64.img.manifest.xml
# euca-register -a x86_64 machine.001/centos-6.3-x86_64.img.manifest.xml
IMAGE   emi-69183D43

でテキトーに起動してログインします。

Euca Monkey のインストール

Kyo Lee さんのブログや README によれば「10ステップでインストールできるぜ」と言ってますので、以下の10ステップを実行します。

ステップ 1

git のインストール

# yum -y install git

ステップ 2

github から euca-monkey のソースを取得

git clone https://github.com/eucalyptus/euca-monkey.git

ステップ 3

ディレクトリ euca-monkey/ 配下に移動

cd ./euca-monkey

ステップ 4

cloud-resource-populator のインストーラを実行

../installer-cloud-resource-populator.py

で、スクリプトの実行が終ると4ステップの手順が示されるけどガン無視して次に進みます。

ステップ 5

euca-monkey-webservice のインストーラを実行 (いまさらだけど、HTTP proxy 配下の環境で実行している人は yum にちゃんと proxy の設定してネ)。

../installer-euca-monkey-webservice.py

ステップ 6

Euca Monkey の初期画面

Euca Monkey のページ (http://インスタンスのIP/euca-monkey.php) にブラウザでアクセスして、ちゃんと動いているか確認

あ、ちなみに事前にセキュリティグループの 80/tcp は開けといてね。あとインスタンス上でファイアウォールが有効になっている場合は system-config-firewall-tui コマンドとかで適宜 80/tcp を開けてね。

ステップ 7

ディレクトリ launch_euca_monkey/ 配下に移動

cd ./launch_euca_monkey/

ステップ 8

../conf/ ディレクトリ配下にある Euca Monkey の設定ファイル 2b_tested.lst と generator.ini を適宜変更します。

私の環境では以下の内容

  • ./conf/2b_tested.lst
192.168.33.102  UBUNTU  12.04   64      REPO    [UI CC00 CLC SC00 WS]
192.168.33.101  UBUNTU  12.04   64      REPO    [NC00]
  • ./conf/generator.ini
### RESOURCE GENERATOR PARAMETERS

[USER INFO]
account: cloud-user-test-acct-00
user: cloud-user-00
password: mypassword00

[RESOURCES]
running instances: 2
volumes:  2
snapshots: 1
security groups: 3
keypairs: 5
ip addresses: 2

[ITERATIONS]
iterations: 10

本当は RESOURCES や ITERATIONS の値を大きくしたいんですが、このあと OpenStack Advent Calendar のネタも書かなきゃならないので、日和って小さくしました。(この時点で 1203 19:10 …(^o^)/)

ステップ 9

Euca Monkey を起動

../launch-euca-monkey.py

実行すると画面にポロポロっと下拵えの様子が出力されて、準備が完了すると

===== LAUNCH EUCA MONKEY : DONE =====

って出力されます。あとは裏でバリバリっと動くのです。

ステップ 10

期待のグラフががががが…?

で、コンソールを眺めてても何も起きません。そりゃそうです、実行結果はブラウザでステップ 6 でアクセスした場所を表示し、画面上部の [Refresh] ボタンをクリックして画面を更新します。するとモリモリ………って、あれ?画面左側の INPUT GRAPH しか描画されないお…(´・ω・`)

Euca Monkey のテストのログを見ると INPUT 側のログには

2012-12-03:20:07:20     cloud-user-test-acct-00 admin   intellilink     2       2       1       3       5       2
2012-12-03:20:07:25     cloud-user-test-acct-00 admin   intellilink     0       0       0       0       0       0
(省略)

って吐かれてるのに、一方の結果のログには

2012-12-03:20:07:23     cloud-user-test-acct-00 admin   intellilink     -1      -1      -1      -1      -1      -1
2012-12-03:20:07:27     cloud-user-test-acct-00 admin   intellilink     -1      -1      -1      -1      -1      -1

って吐かれてる…。どうみてもこれ失敗してるよなぁ。。。

で、ここで今更気付くのが羽深クオリティなんですが、そーいや Kyo Lee さんのブログのポスト見ると Eucalyptus 3.2 で実装されてる UI が写ってる…。もしかして Euca Monkey って 3.1 じゃ動かない? (そんな記述は見当たらないんだけどなぁ。。。)

ということで、Kyo Lee さんに質問し、今日はここまで。(1201 のエントリに引き続き、こんなんばっか… T^T)


OpenStack を徹底的にイジメ抜く、許さない、絶対

Euca Monkey で消化不良な結末を迎えたので、思わず OpenStack Advent Calendar のことを忘れて今日を終えるところでした…。

さて、気持ちを切り替えて頑張ります。

えーと、タイトルは強気ですが、ぶっちゃけアタクシ OpenStack 初心者なのです (一部の人達には誤解されていますが…)。なので、初心者は初心者らしく、dodai-deploy を使って環境を作成します。

そしてこれは「ネタ」なので、書いてあることに対してスルー力が必要です。むしろこの日記自体をスルーしてくれると個人的には助かります。( ´_ゝ`)

… … …

… … …

… … …

(…3時間経過…)

… … …

… … …

… … …

OpenStack を泣かす前に自分が泣きそうな状況になりましたよ。ツールに頼ってばかりではいけませんね… T&T

教訓: (またこのパターンかよ…) OpenStack ぐらい手動で構築できるようにならないとダメです。

glance を泣かしてみる

何度も言いますが本当に OpenStack 初心者なので、OpenStacker 的には当然なことも僕にはワカラナイので「オイオイ、そんな使い方はねーだろーよ?」ってことをやっちゃってるかもしれません。

Eucalyptus だろうが OpenStack だろうが、まずはマシンイメージを登録しないことには始まりません。なので華麗にマシンイメージを登録してみたいと思います。

ちなみに、世の中的には glance にマシンイメージを追加するときは glance コマンドを使うようですが、僕は Eucalyptoid なので glance コマンドの使い方を知りません。なので意地でも euca2ools でイメージを登録してます。で、Horizon さんは素敵な方なので EC2 認証情報の zip ファイルをダウンロードさせてくれるのですが、その中にある ec2rc.sh の中には S3_URL に関する記述がないんです、何でだろう?僕の設定が悪いんですよねきっと、はい。

まぁ、なので毎回以下のように環境にあわせて設定してます。

S3_URL=http://192.168.33.101:3333

で、早速、おまちかねのイメージ登録です。ただし、普通に登録したのではツマラナイので、以下のスクリプトを用意し、1つのイメージを並列で登録してみました。

#!/bin/bash -x

WD=$(basename `pwd`)
KERNEL_IMG=`ls kernel-*`
RAMDISK_IMG=`ls initramfs-*`
MACHINE_IMG=`ls ${WD}.img`
BUCKET=`date +'%Y%m%d-%H%M%S'`

echo ${KERNEL_IMG}
echo ${RAMDISK_IMG}
echo ${MACHINE_IMG}

mkdir -p /mnt/tmp-${BUCKET}

euca-bundle-image -d /mnt/tmp-${BUCKET}/ -i ${KERNEL_IMG} --kernel true
euca-upload-bundle -b ${BUCKET} -m /mnt/tmp-${BUCKET}/${KERNEL_IMG}.manifest.xml
EKI=`euca-register ${BUCKET}/${KERNEL_IMG}.manifest.xml | gawk '{print $2}'`

euca-bundle-image -d /mnt/tmp-${BUCKET}/ -i ${RAMDISK_IMG} --ramdisk true
euca-upload-bundle -b ${BUCKET} -m /mnt/tmp-${BUCKET}/${RAMDISK_IMG}.manifest.xml
ERI=`euca-register ${BUCKET}/${RAMDISK_IMG}.manifest.xml | gawk '{print $2}'`

euca-bundle-image -d /mnt/tmp-${BUCKET}/ -i ${MACHINE_IMG} --kernel ${EKI} --ramdisk ${ERI}
euca-upload-bundle -b ${BUCKET} -m /mnt/tmp-${BUCKET}/${MACHINE_IMG}.manifest.xml
euca-register --architecture x86_64 ${BUCKET}/${MACHINE_IMG}.manifest.xml

で、このスクリプトを6並列実行したところで、えーと、何ていいましょう、まぁ、普通ありえないとは思うのですが、私の環境はちょっと特殊でして、まぁ、以下を見てください。

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       9.2G  3.5G  5.3G  40% /
udev            7.8G  4.0K  7.8G   1% /dev
tmpfs           3.2G  280K  3.2G   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            7.8G     0  7.8G   0% /run/shm
cgroup          7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/sda5       445G   13G  410G   4% /mnt

まぁ、聡明な OpenStacker の皆さんならばきっとこれを見て m9(^Д^) ってなっていると思います。そう、実は /dev/sda5 にはいくつかディレクトリを用意しておいて、それらを /var/lib/glance/ や /tmp/ に bind マウントして今回のスクリプトを実行して

いえ~ぃ、glance1 ジャイアントロック~www

って笑う予定でした。ところがそのマウント行為をすっかり忘れてしまい、当然ながらディスクフルを起してしまい、glance も nova-objectsoter も動作がおかしくなり、おまけに「やべー、12/03 の Advent Calendarに穴あけちゃうよー」って思って慌てて環境を掃除して再起動してみましたが、刻すでに遅し

/var/log/nova-api.log を見ると

2012-12-03 23:10:42 ERROR nova.api.openstack [req-7f54c557-1f6c-42f2-aa74-dd6ff5fd26b9 aac09b12b22d4f1b85bd8339d6688a43 f045
25346fd94c19a2a098212b93c5e6] Caught error: (OperationalError) (2003, "Can't connect to MySQL server on '192.168.33.101' (11
1)") None None

なんて素敵なエラーが吐かれています。mysql の DB が壊れてしまったんでしょうか?もうこの時点で 1203 の終りが目前なのでそろそろオチを探さないとイケないのですが、まぁ、Twitter で事前にツブやいていたように

OpenStack に徹底的にイジメられる、許して、マジで

という結果になりました。ホント OpenStack コワイです。はい。

終り。

(ちなみに glance に euca2ools で同時にイメージを登録するとジャイアントロックされるのって diablo までですかね?もうとっくに並列処理可能になってます?)


  1. 同僚から「節子、何叩いとるんや!これ nova-objectstore やろ。glance ちゃうやんか!!」とツッコまれました(;´Д`A [return]