opencloudcampus privatecloudstudy eucalyptus deep-dive at gmo
TRANSCRIPT
第4回 自作プライベートクラウド研究会 - Eucalyptus Deep Dive at GMO -
羽深 修
@habuka036
NTTデータ先端技術株式会社
Japan Eucalyptus Users Group
2012/06/20
自己紹介とか
定番の自己紹介という名の宣伝
●クラウドWatchにて「ユーカリプタス入門」を連載中
◇もう半年以上更新できてないけど...
定番の自己紹介という名の宣伝
●昨年5/25にImpress Japanから「Eucalyptusで作るプライベートクラウド構築」を出しました
定番の自己紹介という名の宣伝
●Eucalyptusのマシンイメージを配布する「マシンイメージ工房」を運営しています ◇英語版を作成中...(っていうか翻訳が進んでない)
●ちなみに... ◇CentOS 5.8/6.2, Ubuntu 11.10,12.04のイメージ
が手元にありますが、更新できてません…。
Eucalyptusとは
1) Eucayptusの現況
●本当にオープンソースなの? ◇ 誤解されているかもしれないれど、Eucalyptusはv1.0リリース後は
一環してオープンソース ◆ v3.0まではEnterprise版とOpenSource版の2系統があったのも事実
◆ だけど、v3.1からは1本化するとのこと - ぶっちゃけ、リリース毎にマージするの大変だったらしい。v3系のリリースが約1年遅れ
た理由の半分がマージの困難さっぽい。
◇ v3系のOpenSource版は今度リリースされるv3.1
● つまりv3系ってリリースされたの? ◇ Enterprise版(v3.0)はリリース済み
◆ Eucalyptus社のフォームで申し込んでメールか電話でやりとりすれば30日体験版を貰えるよ。英語ができない私ですら貰えたよ。
◇ OpenSource版(v3.1)はベータ版の状態 ◆ CommunityのVPであるGregさんが4月に「2、3ヶ月後には~」と言ってたの
で、もうそろそろ
●で、今日のDeep Diveの対象は? ◇ 一応v3.1βについて
◆ 一部v2系の頃の情報が混ってるかも…
2) Eucayptusの概要 -1-
●そもそも、どーゆー成り立ち? ◇大学の研究プロジェクトから生まれた
◆ 日本ではよく「学生コード」って言われてた。 - 他のIaaSのコードは学生コードじゃないと言い切れるの? (Wakame-VDCはイ
イ)
◆ お世辞にも「綺麗」とか「読み易い」とは言えない - きっとEucalyptusは難読化が施されている
◇ Amazon EC2互換を目指して開発 ◆ EC2は2009-04-04版のAPIと互換を目指して
- もちろん、今は一部2010-08-31とか2011-01-01とかとか
◆ S3とIAMはどのバージョンだろう?
◇現在はEucalyptus Systems Inc,という会社が開発 ◆ 当然ながら、最初の頃は会社の運営を軌道に乗せることが最優先で
あったため、コミュニティ側へのサポートが十分ではなかった
◆ ビジネスもコミュニティもうまくやっていく必要があったので、MartenをCEOに招聘
◆ コミュニティの運営を活発にするためにGregをVPに招聘
2) Eucayptusの概要 -2-
● 一応「コンポーネントモデル」って昔言ってた
● Eucalyptusの言う「コンポーネントモデル」って? ◇ 各コンポーネントは疎結合
◇ つまり各コンポーネントはルールに従ってさえすれば別にEucalyptusじゃなくても動くぜ ◆ 嘘じゃないよ
◇ じゃあ、その「ルール」って? ◆ DRY(違)だから、コードに書いてあるぜwww
◆ ソースコードのwsdlディレクトリ配下に定義があります。
● つまりコンポーネントって? ◇ 後述するけど簡単に書くと以下があります
◇ ユーザからの命令を受け付けるクラウドコントローラ (CLC)
◇ ネットワーク機能を提供し、各ノード達に命令するクラスタコントローラ (CC)
◇ ハイパーバイザーを管理してインスタンスを起動するノードコントローラ (NC)
◇ EBS機能を提供するストレージコントローラ (SC)
◇ マシンイメージを管理するために必要なS3機能を提供するという重要な役割の担っているのに、一人だけ略称がない Walrus
Eucalyptusのコンポーネント
● Eucalyptusはメインとなる3つのコンポーネントとストレージ機能を提供する2つのコンポーネントから構成されます
● これら5つのコンポーネントをそれぞれの役割区分でFrontend, Zone, Nodeと表現します
クラウドコントローラ (CLC)
●クラウドコントローラ(CLC)には主に以下の役割があります ◇ ユーザアカウント
の管理や認証 ◇ ユーザの要求を受
け付ける ◇ 受け付けた要求を
クラスタコントローラ(CC)に渡す
◇ 設定値やクラウド内の情報をDBに格納し管理
◇ Web管理画面の提供
クラスタコントローラ (CC)
●クラスタコントローラ(CC)には主に以下の役割があります ◇ CLCからの要求を受
けノードコントローラ(NC)に処理を要求する
◇ NCで起動しているインスタンスのネットワークを制御
◇ ユーザがインスタンスに接続する際のPublicIPの提供
◇ NCの空きリソースを監視
ノードコントローラ (NC)
●ノードコントローラ(NC)には主に以下の役割があります ◇ CCからの要求を受
け、Walrusからマシンイメージを取得
◇ マシンイメージをキャッシュ
◇ インスタンスの起動や停止、EBSボリュームの取り付けや取り外しなどの処理をハイパーバイザー(XenおよびKVM)に依頼
ストレージコントローラ (SC)
●ストレージコントローラ(SC)には主に以下の役割があります
◇ ボリュームの管理
◇ ボリュームからのスナップショットの管理
◇ インスタンスに対するボリュームの提供
Walrus
●Walrusには主に以下の役割があります
◇ S3互換の大規模ストレージ
◇ マシンイメージの管理および提供
役割区分について
●Frontendは、主にユーザからの要求を受け付ける機能を持つコンポーネントの集合です ◇そのため、CLC, CC, Walrusはユーザからアクセス可能なネッ
トワークに配置されなければならない ◆ SCは直接はユーザと通信しない
●Nodeは、その名のとおりノードコントローラの集合です ●Zoneは、Nodeとそれらを管理するクラスタコントローラ
とそのZoneに所属するストレージコントローラの集合です ◇マルチクラスタ構成が可能になったv1.6系からはクラスタ毎
にストレージコントローラを配置する構成が標準になりました
◇ただし、アーキテクチャ的な仕様により、ストレージコントローラはクラウドコントローラと通信可能なネットワークに所属していなければなりません
ソースコードについて
● 最新版はgithubにあります ◇ https://github.com/eucalyptus/eucalyptus
`-- eucalyptus
|-- clc CLCに関するコード
|-- cluster CCに関するコード
|-- devel 開発・デバッグ時のちょっとしたツール
|-- extras 運用・監視系スクリプト(ganglia, nagios)
|-- gatherlog ログ収集に関するコード…使ってる?
|-- m4 autoconfのマクロ
|-- net ネットワークまわりの関数(CCとNCが利用する)
|-- node NCに関するコード
|-- project eclipseのプロジェクトフォルダ?
|-- storage ストレージやデータを扱う関数(NCが利用する)
|-- tools 様々なスクリプト達 (仕分け前的な置き場)
|-- util 様々な関数 (CC,NC,GLが利用する)
`-- wsdl CC,NC,GLのWSDLファイル
ソースコードについて (余談)
●よく「Eucalyptusってさー、節操なく色んな言語のコードが混在しているよねー?m9(^Д ^)pgr」って言われるけど…
← Eucalyptus
ソースコードについて (余談)
●よく「Eucalyptusってさー、節操なく色んな言語のコードが混在しているよねー?m9(^Д ^)pgr」って言われるけど…
●おっと、OpenNebulaの悪口はそこまでにしてもらおうか
← Eucalyptus OpenNebula →
必要環境
まずはネットワークモード -1-
●必要な環境は「ネットワークモード」と「どんな規模を構築したいか?」によります
●ネットワークモードには以下の4つがあります ●SYSTEMモード ◇最小構成を作れるネットワークモードのうちの一つ ◇必要なハードウェアは最小で物理マシン1台のみ ◇ただし、インスタンスに対するIPアドレスを付与する機
構がないため、DHCPサーバが必要
●STATICモード ◇最小構成を作れるネットワークモードのうちの一つ ◇必要なハードウェアは最小で物理マシン1台のみ ◇ DHCPサーバは自前で起動するけども、事前にMACアドレ
スとIPアドレスのペアを決めて設定ファイルに記述しておく必要あり
まずはネットワークモード -2-
●MANAGEDモード ◇一番、Eucalyptusの機能を楽しめるネットワーク
モード
◇必要なハードウェアは最小で物理マシン2台
◇加えてこのネットワークモードの場合は、インテリジェンスなL2スイッチが必要 ◆無くてもこのモードは使えるけど、VLANの意味が…
●MANAGED-NOVLANモード ◇ぶっちゃけて言うと、上のMANAGEDモードを使いた
いけどVLANに対応したスイッチがないぜ、もしくは「うちんとこのネットワーク、タグVLANを流せないぜ」って人向け
◇今日の後半でのデモはこのモードでやります
マシンスペック -1-
●CPUはXeonクラスで ◇「NC以外はそんなにCPU要らないんじゃないの?」って
言われるけど、CLCはユーザからの要求をさばくためにCPUを使うし、CCはユーザとインスタンスの通信をさばくためにCPUを使うしで何だかんだ言ってどのコンポーネントもCPUはあったほうがいい
◇とは言え、動作確認や機能検証するだけならハイスペックなCPUじゃなくてもOK。ちなみに私はPentium Dとかで動作確認することが多いです。 ◆ わが家はVT機能がついてるマシンは妻のウルトラブックのみで
すよ
●今日は(も)ターゲットは64bitです ◇もちろん、Eucalyptusは32bitなマシンでも動くよ ◇ちなみに「32bit環境のIaaSが欲しいの」っていう需要
あります?
マシンスペック -2-
●メモリも積んでおこうね ◇昔、CLCやCCを2GBytesなマシンで動かしたことある
けど、息切れしちゃうから、まともに運用したかったらせめてCLCは4GBytes以上、CCは8GBytes以上あったほうがいい。Walrusはマシンイメージの登録時とかにガッツリとメモリを消費しちゃうから、ケチっちゃ駄目よ。
●ハードディスクが必要なのは以下 ◇NCはインスタンスで消費するし、マシンイメージの
キャッシュでも消費する
◇SCはEBSボリュームとスナップショットの利用具合
◇Walrusはマシンイメージとキャッシュで消費
◇実際に運用しだすと1桁TBじゃ足りな~いってなる
OS (Linux Distro) -1-
●Eucalyptus社のサイトでバイナリが提供されているディストリビューションは以下 ◇RHEL/CentOS 5.x/6.x → 3.1 beta ◆ /etc/yum.repo.d/配下に設定すればyumでインストール可
能
◆今日の後半のデモはこのyumでインストールする方法を紹介します
◆もしくはFastStartで (6/27提供予定らしい)
◆ http://www.eucalyptus.com/download/eucalyptus/centos
◇Ubuntu 10.04/12.04 → 3.1 beta ◆ add-apt-repositoryコマンドでレポジトリを追加したら
apt-getでインストール可能
◆ http://www.eucalyptus.com/download/eucalyptus/ubuntu
OS (Linux Distro) -2-
◇Debian 6 → 2.0.x
◆ /etc/apt/sources.listにレポジトリを追加したらapt-getでインストール可能
◆ http://www.eucalyptus.com/download/eucalyptus/debian
◇Fedora 12~ → 2.0.x
◆ RHEL/CentOSと同じ
◆ http://www.eucalyptus.com/download/eucalyptus/fedora
◇openSUSE 11.2 → 2.0.x
◆ zypperコマンドでレポジトリを追加したらzypperコマンドでインストール可能 (らしい)
◆ http://www.eucalyptus.com/download/eucalyptus/opensuse
そーいや Ubuntu と言えば…
●Ubuntu 12.04 にはバイナリが含まれてないけど、オワコンだから?
◇Eucalyptusのサイトで提供されてるし、一方で「Eucalyptus3のパッケージを12.10に入れようぜ」って提案があるし、オ、オワコンじゃないんじゃないかな~ (;´Д`)y─┛~~
◆ https://blueprints.launchpad.net/ubuntu/+spec/servercloud-q-eucalyptus
ら、LiveDVD...
____________
ヾミ || || || || || || || ,l,,l,,l 川〃彡|
V~~''-山┴''''""~ ヾニニ彡| 出す・・・・・・!
/ 二ー―''二 ヾニニ┤ 出すが・・・
<'-.,  ̄ ̄ _,,,..-‐、 〉ニニ| 今回 まだ その時と場所の
/"''-ニ,‐l l`__ニ-‐'''""` /ニ二| 指定まではしていない
| ===、! `=====、 l =lべ=|
. | `ー゚‐'/ `ー‐゚―' l.=lへ|~| そのことを
|`ー‐/ `ー―― H<,〉|=| どうか諸君らも
| / 、 l|__ノー| 思い出していただきたい
. | /`ー ~ ′ \ .|ヾ.ニ|ヽ
|l 下王l王l王l王lヲ| | ヾ_,| \ つまり・・・・
. | ≡ | `l \__ 我々がその気になれば
!、 _,,..-'′ /l | ~''' LiveDVDのリリースは
‐''" ̄| `iー-..,,,_,,,,,....-‐'''" / | | 10年後 20年後ということも
-―| |\ / | | 可能だろう・・・・・・・・・・ということ・・・・!
| | \ / | |
今日の構成
コンポーネントの配置上の注意点
●利用者から届く場所へ配置するもの ◇ CLC → 利用者がAPIを発呼する ◇ CC → インスタンスにアクセスする ◇ Walrus → 利用者がマシンイメージを登録する
●コンポーネント間の通信 ◇ CLC <-> CC → 利用者からのAPI伝達/各CCのリソース報告 ◇ CC <-> NC → CLCからのAPI伝達/NCのリソース報告 ◇ NC <-> Walrus → マシンイメージの取得 ◇ CC <-> SC → EBS機能に対する命令など ◇ NC <-> SC → EBS ボリュームの操作
●コンポーネントの同居 ◇ CLCとWalrus → EC2 APIの発呼とS3機能の利用度がマシンス
ペック的にさばける範囲ならば同居でも大丈夫 ◇ CCとSC → ネットワークの転送量とEBS機能の利用度がマシン
スペック的にさばける範囲ならば同居でも大丈夫
今日の構成
大風呂敷を広げると畳めなくなるので…
●以下の3台で構成 ◇CLCとWalrus同居 ... 1台
◇CCとSC同居 ........ 1台
◇NC ................ 1台
HA構成やマルチクラスタ構成はまたいつか…
euca-clc euca-cc euca-nc1
eth0
eth1
今日のゴール
今日のインストールデモを見た皆さんに
「今日帰宅してから、もしくは明日にでも『GMOクラウド』上にEucalyptusをインストール『してみたいなぁと思わせる』」ことが今
日の目的です
今日のゴール
今日のインストールデモを見た皆さんに
「今日帰宅してから、もしくは明日にでも『GMOクラウド』上にEucalyptusをインストール『してみたいなぁと思わせる』」ことが今
日の目的です
今日のゴール
今日のインストールデモを見た皆さんに
「今日帰宅してから、もしくは明日にでも『GMOクラウド』上にEucalyptusをインストール『してみたいなぁと思わせる』」ことが今
日の目的です
今日のゴール
今日のインストールデモを見た皆さんに
「今日帰宅してから、もしくは明日にでも『GMOクラウド』上にEucalyptusをインストール『してみたいなぁと思わせる』」ことが今
日の目的です
浜田さんから「思わせるだけじゃ駄目なんだよ」って怒られる… ((( ;゚Д゚)))
インストールから動作確認まで Step by Step
注意!
●これ以降のデモですが、当日は失敗しました。もちろん色々な要因があるのですが、とりあえず情報の一つとして公開します。というのも、以降の方法で動く環境を構築できる可能性があるためです。
●それとは別に、GMOクラウド上で環境を作るためには、もうひと工夫必要かもしれないことが判明しています。その方法についてはいつかどこかでリベンジ編として公開します。
インストールと設定 -1-
●レポジトリの設定
◇以下の内容を/etc/yum.repos.d/eucalyptus.repoとして保存
[eucalyptus] name=Eucalyptus 3.1 beta baseurl=http://downloads.eucalyptus.com/software/eucalyptus/nightly/3.1/centos/$releasever/$basearch
gpgcheck=0 [euca2ools] name=Euca2ools 2.1 baseurl=http://downloads.eucalyptus.com/software/euca2ools/2.1/centos/$releasever/$basearch
gpgcheck=0
インストールと設定 -2-
●epelの追加 ◇以下を実行してepelのレポジトリを追加
●Xenのインストール ◇ NCで以下を実行し、Xen関連のパッケージをインストー
ル
●ループバックデバイスの追加 ◇ SCとNCで以下を実行し、ループバックデバイスの数を増
やしておく
rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/5/i386/epel-release-5-4.noarch.rpm
yum install kernel-xen.x86_64 xen.x86_64 xen-libs.x86_64
echo 'options loop max_loop=256' > /etc/modprobe.d/loop for i in `seq 8 255`; do echo loop${i} >> /etc/udev/makedev.d/50-udev.nodes; done
modprobe loop
インストールと設定 -3-
●Xenの設定
◇以下を実行してNCのXenをlibvirtから利用できるようにする
sed -i -e 's/#(xend-http-server no)/(xend-http-server yes)/' /etc/xen/xend-config.sxp
sed -i -e 's/#(xend-address localhost)/(xend-address localhost)/' /etc/xen/xend-config.sxp
インストールと設定 -4-
●CLCとWalrusのインストール ◇以下を実行してCLC役のマシンにCLCとWalrusをインストール
●CCとSCのインストール ◇以下を実行してCC役のマシンにCCとSCをインストール
●NCのインストール ◇以下を実行してNC役のマシンにNCをインストール
yum install eucalyptus-cloud eucalyptus-walrus
yum install eucalyptus-cc eucalyptus-sc
yum install eucalyptus-nc chkconfig libvirtd off reboot
インストールと設定 -5-
● CCのeucalyptus.confで以下のパラメータを設定
● NCのeucalyptus.confで以下のパラメータを設定
VNET_MODE="MANAGED-NOVLAN" VNET_PRIVINTERFACE="eth1" VNET_PUBINTERFACE="eth0" VNET_PUBLICIPS="10.100.100.100-10.100.100.200" VNET_SUBNET="192.168.0.0" VNET_NETMASK="255.255.0.0" VNET_ADDRSPERNET="64" VNET_DNS="8.8.8.8"
VNET_MODE="MANAGED-NOVLAN" VNET_PUBINTERFACE="eth1"
インストールと設定 -6-
● CLCでDBの初期化を実施してCLCとWalrusを起動
● CCでCCとSCを起動
● NCを起動
euca_conf --initialize /etc/init.d/eucalyptus-cloud start
/etc/init.d/eucalyptus-nc start
/etc/init.d/eucalyptus-cc start /etc/init.d/eucalyptus-cloud start
インストールと設定 -7-
● Walrusの登録 (以下をCLCで実行)
● CCの登録 (以下をCLCで実行)
● SCの登録 (以下をCLCで実行)
● NCの登録 (以下をCCで実行)
euca_conf --register-walrus --partition walrus --host 157.7.160.191 --component walrus
euca_conf --register-nodes "172.16.6.194"
euca_conf --register-cluster --partition jp-east-1a --host 172.16.6.193 --component cc-172.16.6.193
euca_conf --register-sc --partition jp-east-1a --host 172.16.6.193 --component sc-172.16.6.193
動作確認 -1-
● 証明書類の取得
● AZの確認
● マシンイメージの登録
mkdir -p .euca/admin/keypairs euca_conf --get-credentials .euca/euca2-admin-x509.zip cd .euca/admin/ unzip ../euca2-admin-x509.zip
wget http://eucalyptus.machine-image.com/downloads/CentOS-5.6-x86_64-Mini-20110829.tar.bz2
tar -xjvf CentOS-5.6-x86_64-Mini-20110829.tar.bz2 cd CentOS-5.6-x86_64-Mini-20110829/ ./register.sh
. eucarc euca-describe-availability-zones verbose
動作確認 -2-
● キーペアの登録
● インスタンスの起動
● セキュリティグループの設定
● 接続
euca-add-keypair key01 > ~/.euca/admin/keypairs/key01.pem chmod 400 ~/.euca/admin/keypairs/key01.pem
euca-authorize -P tcp -p 22 -s 0.0.0.0/0 default
euca-run-instances -k key01 emi-598530F1 watch -d euca-describe-instances i-96A240E5
ssh -i ~/.euca/admin/keypairs/key01.pem 10.100.100.100
トラブルシューティング
構成や設定でのチェックポイント
●混乱しがちなのはCCとNCでのVNET_PUBINTERFACEとVNET_PRIVINTERFACEの値 ◇ CCではクラウド外へ通信できるNIC──つまり、インスタンスの
PublicIPのアドレスを持つNICがVNET_PUBINTERFACEとなり、NCと通信するNICがVNET_PRIVINTERFACEになります。
◇ 一方NCではCCと通信するNICがVNET_PUBINTERFACEとなり、VNET_PRIVINTERFACEの設定値は使いません。 ◆ eucalyptus.confのVNET_PUBINTERFACEのコメントには「CCと同じ値を設定
してね」とか紛らわしいことが書いてあるけど…
●「SCはCCおよびNCとだけ通信できればいい」と思われがちだが、v2.0.xまではCLCとも通信できないと駄目です ◇ DBからのデータの読み書きを実はDBと直接やっているっぽい
◇ v3.xで改善されたのかしら?
● eucalyptus.confのほとんどのパラメータはCCやNC向けで、CLCが参照する値はほとんどないです ◇ たまに、VNET_PUBLICIPSの値をCLCのeucalyptus.confで設定してし
まう間違いがあるが、設定すべきなのはCCのeucalyptus.conf
OS設定での留意点
●SELinuxはoffってね ◇getenforceの結果がDisabledじゃなかったら
setenforce 0を実行
●iptablesはoffってね ◇Eucalyptusが設定/起動するiptables以外はなるべ
く止めてね
●時刻同期は必須 ◇今日みたいに仮想化の上で構築するのではなく、普
通は物理上で構築すると思うけど、時刻同期は忘れちゃダメ
●MTAは使えるように設定してね ◇今日は時間の都合で省いたけど、本当はCLC上にMTA
を起動させたほうがいいです
トラブル時の解決方法
● ディスクの空き容量を確認する ◇ 各物理マシンにログインしたら、まず先にこれを見たほうがいい。(中井さんの書籍にも
書いてある)
● 各コンポーネントのプロセスが動いているか確認する
● 各コンポーネントのポートがListenになっているか確認する
● ログを見る ◇ 各コンポーネントの/var/log/eucalyptus/配下のログファイルを見る
◇ 各マシンのsyslogを見る
● 以下のコマンドを実行して各種情報を確認する ◇ euca-describe-availability-zones verbose
◇ euca_conf --list-nodes
◇ euca-describe-availability-zones coredump
◇ ifconfig -a
◇ ip addr show
◇ brctl show
◇ iptables-save -t nat
◇ iptables-save -t filter
● tcpdumpでパケットキャプチャも (後日追記) ◇ というのも当日のデモでCCとNC間の通信が疎通できているかを確かめるために、息を吐く
ようにtcpdumpを叩いてましたwww
Eucalyptus Q&A
当日の質問の様子 -1-
●tagVLANのついたパケットってEucalyptusの外に流れたりします?
◇いえ、tagVLANのついたパケットはCC<->NC間しか流れません。
◇というのも、あくまでもCC<->NC(インスタンス)間のネットワークを、セキュリティグループおよびユーザ毎に分離するために使っているからです。
当日の質問の様子 -2-
●HW構成でネットワークの帯域について言及が無かったけど、1Gbpsでも足りますか? ◇あ…、すっかり忘れてました。経験則では、CLC1台、
CC1台、NC15台ぐらいの構成で、NWの帯域が1Gbpsでも何とかなってます。
◇ただし、それ以上の台数で構成した場合は心許ないかもです…。
●bondingとかで束ねたほうがいいですか? ◇もちろん、そうできるのであれば、そのほうが良いです。
もっとも1Gbpsを10Gbpsにするほうが楽でいいですよ。あとは構成を工夫するとか──例えばNCはWalrusからマシンイメージをダウンロードするときに帯域を圧迫するけど、NC<->Walrus間を独立セグメントにするという方法で負荷を分散できます。(まぁ、構成がややこしくなるので、ちょっとシンドイですけどね)
当日の質問の様子 -3-
●色々なIaaSを管理するのってどんなのがあります?
◇あまり詳しくはないですが、個人的に気にしているものとしては以下の2つです。
◇Aeolus
◆ http://www.aeolusproject.org/
◇Scalr
◆ http://scalr.net/
フリートーク
参考情報
使っているフォント
●タイトルとか ◇しねきゃぷしょん ◆ http://chiphead.jp/font/htm/cinecaption.htm
●本文とか ◇ゆたぽん(コーディング) ◆ http://net2.system.to/pc/font.html
●箇条書きの記号 ◇こくばん ◆ http://falseorfont.web.fc2.com/
●図形の中とか ◇たぬき油性マジック
参考情報 -1-
●Eucalyptus Systems, Inc. ◇http://www.eucalyptus.com
●オープンソース版のサイト ◇http://open.eucalyptus.com
●日本 Eucalyptus ユーザ会 ◇http://eucalyptus-users.jp
●日本 Eucalyptus ユーザ会の ML ◇http://ml.eucalyptus-
users.jp/mailman/listinfo/eucalyptus-users ◆気軽に質問してください
●Twitter ◇@eucalyptuscloud ◇@jEucalyptusUG
参考情報 -2-
●Eucalyptusではじめるプライベートクラウド構築 ◇ http://www.impressjapan.jp/books/3025 ◇正誤表 http://bit.ly/qvGZAP
●ユーカリプタス入門 (クラウドWatchで連載中) ◇日本語版
http://cloud.watch.impress.co.jp/docs/column/eucalyptus ◇英訳版 http://bit.ly/qr4gFH
●データセンター完全ガイド 2011年 冬号 ◇ http://t.co/5UFCdN0
●tAWS Tanacasino (利用者用GUIクライアント) ◇ http://sourceforge.jp/projects/eclipse-aws/
◆ Amazon EC2やOpenStackでも使えます
●マシンイメージ工房 ◇ http://eucalyptus.machine-image.com/
参考情報 -3-
●中井さんの名著
◇プロのための Linuxシステム構築・運用技術
◇プロのための Linuxシステム・ネットワーク管理技術
◇プロのための Linuxシステム・10年効く技術
v2.0.x系の Deep Dive
● 以降の情報は2011/11/21に行なわれた、国立情報学研究所のトップエスイー教育センターのセミナーで使用した資料を一部書き換えたものです。
● 本資料をよりよく理解したい方は以下を参照してください。(アカウントの登録が必要ですが、無料です) ◇ IaaSクラウドを支えるサーバ・インフラ技術を学ぶハンズオンセミナー 第
一部(その1)「Eucalyptusとedubase Cloud」 ◆ http://stream.edubase.jp/contents/view/571#
◇ IaaSクラウドを支えるサーバ・インフラ技術を学ぶハンズオンセミナー 第一部(その2)「edubase CloudによるIaaSインフラ活用演習」 ◆ http://stream.edubase.jp/contents/view/572#
◇ IaaSクラウドを支えるサーバ・インフラ技術を学ぶハンズオンセミナー 第二部(その1)「IaaSクラウドを支えるサーバ・インフラ技術(講義)」 ◆ http://stream.edubase.jp/contents/view/598#
◇ IaaSクラウドを支えるサーバ・インフラ技術を学ぶハンズオンセミナー第二部(その2)「IaaSクラウドを支えるサーバ・インフラ技術(講義)」 ◆ http://stream.edubase.jp/contents/view/599#
ユーザの登録
● Eucalyptusを利用するためには何よりも最初にユーザを登録しないといけません
◇ もちろん、最初にシステムが作成するユーザ「admin」で利用し続けることも可能ですが、複数の利用者で利用する場合に単一ユーザを共有するのは好ましくありません
● ユーザを登録するには以下の3つの方法があります
◇ CLC上で管理コマンド「euca-add-user」で登録
◇ Eucalyptusの管理者がWeb管理画面で登録
◇ Eucalyptusを利用したいユーザがWeb管理画面でユーザ登録を申請
◇ IAMを利用して管理する
コマンドで登録
管理者が登録
利用者が申請
イメージの作成 -1-
● Eucalyptusでインスタンスを起動するためには、まずマシンイメージを作成して登録する必要があります ◇ 一般ユーザはカーネルイメージやRAMディスクイメージを登録でき
ないため、一般的には管理者が登録したマシンイメージを利用します
● 登録するためのマシンイメージを作成する方法は色々な方法がありますが、手っ取り早い方法は以下の2つのサイトから入手する方法があります ◇ Eucalyptusの公式サイトから入手
http://open.eucalyptus.com/wiki/EucalyptusUserImageCreatorGuide
◇ マシンイメージ工房から入手 http://eucalyptus.machine-image.com
● 入手したマシンイメージはEuca2oolsのコマンドeuca-bundle-imageとeuca-upload-bundleとeuca-registerを実行して登録します ◇ もちろんEuca2oolsを使わずに他のツールやAPIを直接叩いて登録す
ることも可能です
イメージの作成 -2-
●マシンイメージのバンドルの仕組み 「バンドル」にはイメージファイルをバンドルするeuca-bundle-imageコマンドと、稼動しているLinuxをバンドルする──つまりインスタンスを保存するeuca-bundle-volコマンドの2つがあります
イメージの作成 -3-
● euca-bundle-imageはイメージファイルをtar+gzで圧縮し、X509証明書で暗号化し、10MB毎に分割し、マシンイメージに関する情報を記述したマニフェストファイルを生成します ◇ euca-bundle-volは空のイメージファイル(ext3フォーマット)を作
成し、物理ディスクのデータをイメージファイルにコピーし、euca-bundle-imageと同じ処理を行ないます
◇ 作成できるイメージファイルは最大で10GBまでです
◇ Euca-bundle-volは--no-inheritオプションが指定されない限り、メタデータからインスタンス情報を取得します。これはマニフェストを生成する際にインスタンスの情報を継承するためです。そのためインスタンスでない環境、たとえば物理マシン上でeuca-bundle-volを実行する場合は—no-inheritオプションを指定します
◇ 暗号化処理では圧縮されたイメージファイルをAES-128-CBCという方式で暗号化します
◇ バンドルではインスタンスがメタデータを取得する場合を除き、Eucalyptusにはアクセスしません
イメージ登録 -1-
●マシンイメージのアップロードの仕組み マシンイメージをeuca-upload-bundleでWalrusに
アップロードする際は、まずeuca-upload-bundleのオプションで指定されたバケット名が既にWalrusに存在するか否かをチェックします。指定されたバケットが既に存在し、アクセス権限があれば処理を継続しますが、アクセス権限がない場合はエラーになり処理が中断します。なお、指定されたバケットが存在しない場合はバケットを作成します。 バケットの準備が整ったら、まずマニフェスト
ファイルをアップロードし次に分割されたファイルをアップロードします。 ちなみに、マシンイメージのアップロードではEC2
APIは使わず、S3 APIのみ使用します。
イメージ登録 -2-
●マシンイメージの登録の仕組み マシンイメージの登録にはeuca-registerコマンドを使用しEC2
APIのRegisterImageを発呼します。Eucalyptusは指定されたマニフェストに従って、アップロードされている分割マシンイメージの整合性チェックを行ないます。チェックの結果に問題がなければ分割マシンイメージを結合→複号→展開という処理を行ない、キャッシュファイルとして素のマシンイメージをWalrusに保持します。 なお、このキャッシュファイルを作成する際に、Web管理画面
の「Walrus Configuration」の項目「Space reserved for unbundling images (MB)」に設定されている値(デフォルト値は30720MB)をチェックし、キャッシュファイルが消費しているディスクサイズがその値以上であれば古いキャッシュファイルを削除します。 ちなみに、Walrusがキャッシュファイルを作成/保持するタイ
ミングには、このRegisterImageが発呼された場合やもしくはインスタンス起動時にWalrusにキャッシュファイルが存在しない場合などがあります。
インスタンスの起動処理 -概要-
● インスタンスの起動処理の流れ
ユーザがインスタンスを起動した際の各コンポーネント間の処理のおおまかな流れは以下のようになっています。
1. ユーザがCLCにインスタンスの起動を要求
2. CLCがCCにインスタンスの起動を要求
3. CCは起動スケジュールと空きリソース具合によってインスタンスを起動するNCを選定し、選定したNCにインスタンスの起動を要求
4. NCは自身のキャッシュを確認し、キャッシュが存在しない場合はWalrusからマシンイメージを取得。キャッシュが存在する場合はキャッシュをコピー
5. NCはマシンイメージからインスタンスを起動
6. 起動したインスタンスはCCで起動しているDHCPサーバからIPアドレスを取得
この流れに沿って、各コンポーネント上での処理を説明していきます。
● ユーザがCLCにインスタンスの起動を要求
CLCはユーザからのインスタンス起動の要求を受けつけると以下のチェックを行ないます。 ◇ ユーザの正当性をチェック
◇ 起動要求の内容の正当性をチェック
◇ 起動するインスタンスに見合ったリソースの空きに関するチェック
リソースの空きは、指定されたVM Typesの空きがあるか、利用可能なPublicIPの空きがあるかなどをチェックします。チェックした結果がエラーの場合はユーザにエラーを返し、問題がなければ次の処理へと進みます。
CLCは自身のクラウドにおけるリソースの空き状況を把握するために20秒毎に各CCにリソース情報の問い合わせを行っており、CCは自身のクラスタにおけるリソースの空き状況を把握するために6秒毎に各NCに対してリソース状況の確認を行なっています。
インスタンスの起動処理 -1-
インスタンスの起動処理 -2-
● CLCがCCにインスタンスの起動を要求
CLCがCCにインスタンスの起動を要求する際に以下の情報を渡します。
◇マシンイメージなどの情報
◇インスタンスタイプ
◇キーペアの情報
◇セキュリティグループなどの情報
CCは各NCのリソース状況やEucalyptusの設定値に従いインスタンスを起動するNCを選択し、CLCにはプライベートIPとMACアドレスとNCの情報などを返します。CCから情報を受け取ったCLCはパブリックIPの割り当てをCCに要求します。
なお、CCがNCを選択する際にはeucalyptus.confに設定されているSCHEDPOLICYに従います。SCHEDPOLICYに設定できる値はGREEDYとROUNDROBINとPOWERSAVEがあります。
GREEDYは1つめのNCのリソースが枯渇するまでそのNCでインスタンスを起動し、リソースが枯渇したら次のNCを使うようなスケジュールポリシーです。ROUNDROBINは各NCで順番にインスタンスを起動していくスケジュールポリシーで、Eucalyptusではこれがデフォルト値です。POWERSAVEはインスタンスが起動していないNCを停止させ、リソースが必要になったらWake-on-LANでNCを起動させるスケジュールポリシーですが、これはUbuntuでのみ動作します。
インスタンスの起動処理 -3-
● CCがNCにインスタンスの起動を要求
CCはNCにインスタンスの起動要求を行なう前処理として、当該セキュリティグループに関する仮想ネットワークが存在するか否かをチェックし、もし該当する仮想ネットワークが存在しない場合は以下のように仮想ブリッジやVLANデバイスを作成します。VLANについては中井さん書籍「プロのためのLinuxシステム構築・運用技術」を参考にしてください。
仮想ネットワークを作成し、CCがNCにインスタンスの起動を要求する際には以下の情報を渡します。
◇マシンイメージに関する情報
◇インスタンスタイプ
◇キーペアの情報
◇タグVLANのIDとPrivateIP用のMACアドレス
NCにインスタンス起動要求が受け入れられたら、CCはCLCから受け取ったPublicIPをPrivateIPと関連付けるルールをiptablesに設定します。一方、命令を受け取ったNCは起動するインスタンス分のリソースを自身の空きリソースから減じて次の処理に進みます。
インスタンスの起動処理 -4-
● NC上でのマシンイメージ処理
NCはインスタンスの起動要求を受け付けたら、要求されたマシンイメージが自身のキャッシュに存在するかチェックします。マシンイメージがキャッシュ上に存在しない場合はWalrusから以下のデータをダウンロードします。
◇マシンイメージ(EMI,EKI,ERI)のマニフェストファイル
◇マシンイメージ(EMI,EKI,ERI)
Walrusからマシンイメージをダウンロードする際、Walrus上に復号されたマシンイメージがキャッシュされていない場合はWalrus上で復号処理が実施され、NCは復号処理が終るまでダウンロード処理を(10回まで)リトライし続けます。
マシンイメージがダウンロードされたら、NCはインスタンスを起動する前にダウンロードしたマシンイメージをNC上のキャッシュに登録します。もしNC上のキャッシュがeucalyptus.confのNC_CACHE_SIZEで指定した値に達した場合は古いキャッシュファイルから削除され、新しいマシンイメージがキャッシュに加えられます。
もしマシンイメージがNCのキャッシュ上に存在する場合は、Walrusからはマニフェストファイルのみダウンロードされ、NC上のキャッシュファイルの完全性をチェックします。キャッシュファイルが破損および改竄されていない場合はキャッシュからインスタンスデータの格納場所にコピーされます。
インスタンスの起動処理 -5-
● NCでのインスタンス起動処理
NCはマシンイメージの処理が終ったのち、キーペアのSSH公開鍵をマシンイメージ(EMI)の/root/.ssh/authorized_keysに追加します。
次に、NCはswapディスクとephemeralディスクの準備を行ないます。このときNCはswapおよびephemeralディスクをddコマンドでraw形式なファイルとして作成を行ないます。なお、このときにephemeralディスクは数GBから数十GBのサイズになるため、処理に時間がかかります。
インスタンスデータの格納場所にこれら各種ファイルが準備できたら、NCはlibvirtで起動するためのxmlファイル(libvirt.xml)を生成し、それを以ってlibvirtにインスタンスの起動を命令します。
● インスタンス上での起動処理
インスタンス上で起動処理が始まる頃にはCLCは既にインスタンスの状態をpendingからrunningに遷移させています
なお、このときインスタンス自身はまだ起動処理中ですので、CLC上でrunningに遷移した直後にインスタンスに接続しようとするとコネクションエラーなどになる場合があります。
インスタンスは自身の起動処理の中でCCのDHCPサーバからPrivateIPのアドレスを取得します。
セキュリティグループ ~1~
インスタンスに対するアクセス制御はセキュリティグループで設定します。セキュリティグループは「タグVLANによるプライベートネットワークセグメントの分離」と「iptablesによるパケットフィルタリング」によって実装されています。
● タグVLANによるネットワーク分離
タグVLANによるプライベートネットワークセグメントの設定はeucalyptus.confに記述された値に従って、Eucalyptusが計算に基いて設定を自動的に行なうため一般利用者が勝手自由に設定を変更したりできないようになっています。
よって、セキュリティグループ1つあたりのIPアドレス数などはEucalyptusの環境を構築する際にあらかじめ決めておくことが重要です。もちろんあとでも変更は可能ですが、これらの設定を変更した場合はインスタンスを停止しCCを再起動する必要があるため、稼働中のEucalyptusでおいそれと変更すべきではありません。
セキュリティグループ ~2~
● iptablesによるフィルタリングとNAT
iptablesによるパケットフィルタリングは、利用者がEuca2oolsのeuca-authorizeやeuca-revokeを使用して柔軟に設定することが可能です。前述のタグVLANがインスタンスのプライベートネットワークを分離する機能であるのに対し、パケットフィルタリングは外部からインスタンスにアクセスするためのPublicIPに対するアクセス制御の機能になります。
Eucalyptusの場合、PublicIPはCCのVNET_PUBINTERFACEに設定され、CC上のiptablesで制御されます。パケットフィルタリングは、設定対象としてプロトコルとポートの組み合わせを指定し、制御対象として接続元のネットワークか他のセキュリティグループを指定します。
なお、iptablesのパケットフィルタリングの詳細な仕組みについても中井さんの書籍「プロのためのLinuxシステム・ネットワーク管理技術」を参考にしてください。
EucalyptusではPublicIPは全てCCに付与され、CCのiptableseのNAT機能により各NC上のインスタンスに付与されているPrivateIPに対して転送されます。
EBSボリューム
● EBSボリュームの作成と取り付け
インスタンスのディスクは揮発性のディスクであり、インスタンスが停止すると全てのデータが削除されます(S3インスタンスの場合のみ)。そのため、永続化したいデータを扱う場合はEBSボリュームを作成してインスタンスで利用します。
Eucalyptusでは、EBSボリュームを実現するためにATA over Ethernet(AoE)かiSCSIのどちらかを使用します。
どちらを使用する場合でも、SC上にEBSボリュームのデータを格納するためのファイルが作成され、そのファイルにLVMパーティションやLVMの管理構造体を作成し、AoEやiSCSIによってインスタンスが起動しているNCに提供されます。
作成したEBSボリュームは、コマンド「euca-attach-volume」「euca-detach-volume」やAPI「AttachVolume」「DetachVolume」を使用してインスタンスに取り付け/取り外しを行ないます。AoEでもiSCSIでもEBSボリュームはインスタンスに直接取り付けられるわけではなく、インスタンスが起動しているNCに渡されてNCのハイパーバイザーの機能によってインスタンスに取り付けられます。
なお、インスタンスにEBSボリュームを取り付ける際には/dev/sdbや/dev/xvdbのようなデバイス名を指定します。
EBSボリュームのスナップショット
● EBSボリュームからのスナップショット作成
EBSボリュームをバックアップする場合、取り付けられているインスタンス上で──例えばバックアップツールを利用してバックアップを取得することも可能ですが、簡単な方法としてEBSボリュームからスナップショットを作成する方法があります。このEBSスナップショットは、当然のことですがEBSボリュームを利用している最中でもスナップショットを作成することが可能です。
ただし、インスタンスやNCの管理下で行なわれるわけではなくSC上で実施されるため、EBSボリュームに高負荷なI/Oが発生している状況下ではデータ不整合が発生する可能性がゼロではありません。よってEBSスナップショットを作成する際はインスタンス上で発生している負荷に注意を払う必要があります。
なお、EBSスナップショットはEBSボリュームのLVM管理構造体の中身だけを取り出して、SCには生のファイルとして格納し、Walrusにはgzip圧縮したファイルとして格納します。
インスタンスの停止処理
● S3インスタンスを停止した際の処理
インスタンスを停止すると、CLC→CC→NCの順番で停止命令が発呼されます。
CCは当該インスタンスが起動しているNCに対して停止命令が発呼できなかったり、発呼した停止命令に対するレスポンスが得られないなどの場合には管理下の全NCに対して当該インスタンスの停止命令を発呼し、停止命令を受け取ったNCはCCに対して停止命令を受け付けたことを返信します。
そのあとNCはハイパーバイザーに停止命令を送り、インスタンスを停止します。ここまでの間、インスタンスのステータスはrunningからshutting-downに遷移します。
NCはインスタンスが停止したのち、インスタンスデータ(/var/lib/eucalyptus/instances/ユーザID/インスタンスID)を削除します。
その後、NCはCCからの6秒毎のリソース問い合わせでインスタンスの情報を返し、CCは20秒毎のCLCからのリソース問い合わせでインスタンスの情報を返し、インスタンスが停止したことをCLCが把握した時点でインスタンスのステータスはshutting-downからterminatedに遷移します。
インスタンスのステータスがterminatedに遷移したあとは一般利用者に対するインスタンスのリスト上では当該インスタンスは消えますが、CLC上ではそれから10分後に内部情報をTERMINATEDからBURIEDに遷移させ、完全にインスタンス情報を消去します。