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 社が配布しているイメージを使います。
で、マシンイメージの取得は、
- eustore-describe-images コマンドで一覧を取得し
- 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 のページ (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 のネタも書かなきゃならないので、日和って小さくしました。(この時点で 12⁄03 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 さんに質問し、今日はここまで。(12⁄01 のエントリに引き続き、こんなんばっか… 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 が壊れてしまったんでしょうか?もうこの時点で 12⁄03 の終りが目前なのでそろそろオチを探さないとイケないのですが、まぁ、Twitter で事前にツブやいていたように
OpenStack に徹底的にイジメられる、許して、マジで
という結果になりました。ホント OpenStack コワイです。はい。
終り。
(ちなみに glance に euca2ools で同時にイメージを登録するとジャイアントロックされるのって diablo までですかね?もうとっくに並列処理可能になってます?)
- 同僚から「節子、何叩いとるんや!これ nova-objectstore やろ。glance ちゃうやんか!!」とツッコまれました(;´Д`A [return]