Eucalyptusの動作環境
※この記事は、書籍『Eucalyptusではじめるプライベートクラウド構築』の内容を、ThinkIT向けに特別にオンラインで公開しているものです。詳しくは記事末尾の書籍紹介欄をご覧ください。
コンポーネント
Eucalyptus はAmazon EC2/S3 の機能を実現するために、複数の「コンポーネント」と呼ばれる単位でソフトウェアを分割しています。Eucalyptus の最大の特徴は、コンポーネント志向アーキテクチャを採用したことであり、インストールするハードウェアやOS に強く依存せず、インストール先のシステム構成を柔軟に選択できる点にあります。
Eucalyptus のコンポーネントはそれぞれの役割で分割され、1 つの機能を実現するために1つないしは複数のコンポーネントが協調動作します。Eucalyptus のコンポーネントは論理的にCLC(Cloud Controller)、CC(Cluster Controller)、NC(Node Controller)、SC(StorageController)、Walrus(S3 互換ストレージ管理機能)に分けられ、ある程度の制約はありますが任意のハードウェアにインストールできます( 図1 )。また、それぞれのコンポーネント間は、一部を除き暗号化されたSOAP メッセージによって通信されます。
図1:コンポーネント構成(クリックで拡大) |
- CLC(Cloud Controller)
- CLC はそれぞれのコンポーネントの中心となるコンポーネントであり、主にEucalyptus クラウド内のデータを管理し、クラウド利用者からのAPI リクエストを受け付けます。CLC は受け取ったAPI リクエストから、CC やSC、Walrus に命令を発行します。
- CC(Cluster Controller)
- CC は物理マシンのクラスタを管理するコンポーネントであり、主にNC の管理とインスタンスのネットワークを構築します。CC はCLC からの要請を受けてNC に対して命令を発行したり、ソフトウェアルータを立ち上げ、仮想ネットワークやファイアウォールの制御などを行います。また、複数のCC 間でvtun を用いたトンネリングを構築し、インスタンス同士のVPN の制御を行います。
- NC(Node Controller)
- NC はインスタンスをホストするコンポーネントであり、主にハイパーバイザ(Xen/KVM)の管理と物理マシンのリソース監視を行います。CC から要請を受けて、新しいインスタンスを起動したり、仮想ネットワークの構成を行います。
- SC(Storage Controller)
- SC はEBS 機能を実現するコンポーネントであり、主にSC のローカルディスク上にディスクファイルを作成し、各NC 上で動作するインスタンスからマウントできるようにiSCSI やAoE(ATAover Ethernet)を利用してディスク情報をNC に伝達します。また、ボリュームのスナップショットを作成することもできます。
- Walrus
- Walrus はS3 互換の機能を提供するコンポーネントであり、主にS3 互換のAPI を受け付けるようにHTTP サーバを立ち上げ、HTTP リクエストに応じてローカルファイルシステムを操作します。
コンポーネントの協調動作
Eucalyptus では、CLC が受け付けたAPI リクエストに応じてそれぞれのコンポーネントがSOAP メッセージによる通信を行い、協調動作することによって1 つの機能を実現しています。ここでは、さまざまなコンポーネントが協調し、また最も基本的な機能であるインスタンスを起動する処理を例にとって各コンポーネントの動きを説明します。
図2:インスタンス起動(クリックで拡大) |
図2 は、CLC がインスタンス起動リクエストを受け付けてからNC 上でインスタンスが起動するまでを表したものです。実際の起動は仮想ネットワークの構築や、もう少し細かい検証などの処理が行われること、状態の通知処理などは非同期で実施されるといった点に注意してください。
Eucalyptus 上での処理の契機となるのは、CLC がAPI リクエストを受信したタイミングとなります。CLC がインスタンス起動リクエスト(RunInstances リクエスト)を受信すると、まずCLC内部でリクエストの内容を精査し、指定したイメージが存在するか、ユーザーに指定したイメージを起動する権限があるか、同時起動数は適切な数値かといった情報をチェックします。正常なリクエストと判断されると、CLC はリソースの空き状況をチェックし、リソースに余裕のあるクラスタを管理しているCC に対してインスタンス起動リクエストを送付します。CC 内部で再び検証を行った後、CC が管理しているNC の中でどのNC でインスタンスを起動するかを決定し、NC に対してインスタンス起動リクエストを送付します。NC では受け取ったインスタンス起動リクエストからどのイメージを利用するのかを判断し、Walrus からイメージファイルをダウンロードします。ダウンロード後、指定された情報に従いハイパーバイザにインスタンスの起動を要請します。インスタンス起動後、NC はCC に、CC はCLC に、それぞれインスタンスが起動したことを通知し、処理が完了します。