第23回:Eucalyptusの仕組み(3)


 前回はインスタンスの起動に関する仕組みについて解説しました。今回はインスタンスを利用する際に利用する各種機能や残りの部分を解説します。なお、下記の図中の「インスタンスの保存」は第21回で説明しましたので割愛します。

想定シナリオの概要図

セキュリティグループの設定

 インスタンスに対するアクセス制御はセキュリティグループで設定します。セキュリティグループは「タグVLANによるプライベートネットワークセグメントの分離」と「iptablesによるパケットフィルタリング」によって実装されています。

 タグVLANによるプライベートネットワークセグメントについては本連載の第6回でも書きましたが、利用するネットワークのセグメントなどの設定はEucalyptusに対して行ない、一般利用者が勝手自由に設定を変更したりできないようになっています。

 よって、セキュリティグループ1つあたりのIPアドレス数などはEucalyptusの環境を構築する際にあらかじめ決めておくことが重要です。もちろんあとでも変更は可能ですが、これらの設定を変更した場合はインスタンスを停止しCCを再起動(cleanrestart)する必要があるため、稼働中のEucalyptusでおいそれと変更すべきではありません。

 なお、タグVLANによるプライベートネットワークの分離の詳細な仕組みについては短期集中連載「ユーカリプタスに学ぶ!IaaSクラウドを支えるサーバ・インフラ技術」の第3回にて解説していますので、あわせてお読みください。

セキュリティグループのプライベートネットワークの分離

 iptablesによるパケットフィルタリングは、一般利用者がコマンド「euca-authorize」「euca-revoke」やAPI「AuthorizeSecurityGroupIngress」「RevokeSecurityGroupIngress」を使用して柔軟に設定することが可能です。前述のタグVLANがインスタンスのプライベートネットワークを分離する機能であるのに対し、パケットフィルタリングは外部からインスタンスにアクセスするためのPublicIPに対するアクセス制御の機能になります。

 Eucalyptusの場合、PublicIPはCCのVNET_PUBINTERFACEに設定され、CC上のiptablesで制御されます。パケットフィルタリングは、設定対象としてプロトコルとポートの組み合わせを指定し、制御対象として接続元のネットワークか他のセキュリティグループを指定します。

 なお、iptablesのパケットフィルタリングの詳細な仕組みについては短期集中連載「ユーカリプタスに学ぶ!IaaSクラウドを支えるサーバ・インフラ技術」の第4回にて解説しています。

セキュリティグループのパケットフィルタリング

EBSボリュームの作成と取り付け

 インスタンスのディスクは揮発性のディスクであり、インスタンスが停止すると全てのデータが削除されます (Eucalyptus3から実装予定のEBSインスタンスを使用した場合は削除されません)。そのため、永続化したいデータを扱う場合はEBSボリュームを作成してインスタンスで利用します。

 Eucalyptusでは、EBSボリュームを実現するためにATA over Ethernet(AoE)かiSCSIのどちらかを使用します (Eucalyptus 1.6系ではデフォルトでAoEが推奨され、2.0系ではiSCSIが推奨されています)。

 どちらを使用する場合でも、SC上にEBSボリュームのデータを格納するためのファイルが作成され、そのファイルにLVMパーティションやLVMの管理構造体を作成し、AoEやiSCSIによってインスタンスが起動しているNCに提供されます。

 なお、iSCSIを使用したEBSボリュームの詳細な仕組みについては短期集中連載「ユーカリプタスに学ぶ!IaaSクラウドを支えるサーバ・インフラ技術」の第2回にて解説しています。

 作成した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スナップショット)は、当然のことですがEBSボリュームを利用している最中でもスナップショットを作成することが可能です。

 ただし、インスタンスやNCの管理下で行なわれるわけではなくSC上で実施されるため、EBSボリュームに高負荷なI/Oが発生している状況下ではデータ不整合が発生する可能性がゼロではありません (幸いにして筆者は遭遇したことがありませんが……)。よってEBSスナップショットを作成する際はインスタンス上で発生している負荷に注意を払う必要があります。

 なお、EBSスナップショットはEBSボリュームのLVM管理構造体の中身だけを取り出して、SCには生のファイルとして格納し、Walrusにはgzip圧縮したファイルとして格納します。

EBSスナップショットの利用

ElasticIPの確保と取り付け

 インスタンスに取り付けられているPublicIPはインスタンスを停止すると解放されてしまいます。そのため第三者に対してインスタンスでサービスを提供する場合などにPublicIPが都度変ってしまっては不便なため、ElasticIPの機能を利用してPublicIPを確保しインスタンスに取り付け、PublicIPがインスタンスの停止時に解放されてしまうことを防ぐことができます。

 なお、一般利用者がPublicIPの確保や解放を行なうにはコマンド「euca-allocate-address」「euca-release-address」やAPI「AllocateAddress」「ReleaseAddress」を使用し、確保したPublicIPをインスタンスへ取り付けたり取り外したりするにはコマンド「euca-associate-address」「euca-disassociate-address」やAPI「AssociateAddress」「DisassociateAddress」を使用します。

 インスタンスのPublicIPは前述したようにCCのVNET_PUBINTERFACEに対して設定されるため、PublicIPの取り付け/取り外しはCC上で処理されます。なお、PublicIPをインスタンスから取り外した場合、そのインスタンスに以前取り付けられていたPublicIPが取り付けられます。

インスタンスの停止

 インスタンス(Eucalyptus3で実装予定のEBSインスタンスではなくS3イメージによる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に遷移させ、完全にインスタンス情報を消去します。

次回はマルチクラウド管理ソフトウェア「Aeolus」について

 第21回から3回にわけてEucalyptusの主な機能の仕組みについて解説しました。次回はマルチクラウド管理ソフトウェアのAeolusを取り上げる予定です。


羽深 修
Eucalyptus歴はまだ1年ですが、周囲からはEucalyptus中毒と勘違いされているようです。Japan Eucalyptus User Groupの活動に参加し、オープンソースカンファレンスでネタなどを披露しています。度々Eucalyptusへのパッチも書いてます。ちなみに仕事ではCentOS + Xenという環境でEucalyptusを利用していますが、自宅のEucalyptus環境はGentoo Linux + KVMで動かしています。

志田 隆弘
主にEucalyptusやクラウドとはあまり関係のない分野でちょこちょこと活動していました。Eucalyptusはバージョン 1.3の頃からいじり始め、かれこれ2年近くEucalyptusに浸かった生活をしています。Eucalyptus 1.4が出たタイミングで、Tanacasinoという名前のGUIクライアントを作ったりしていました。最新のEucalyptusで動作するので、ぜひ使ってみてください。

田中 智文
志田さんとともに初期の頃からEucalyptusの調査・検証・使用してきました。志田さんの作成したTanacasinoのメンテナンスと機能拡張を行っています。新婚ほやほやなので家でのハック活動時間が少ないですが、Walrus Clientを作ってみたりbotoを使ってEucalyptusを操作して遊んでいます。

関連情報
(羽深 修/志田 隆弘/田中 智文)
2011/9/16 06:00