前のトピック: 仮想リソース

次のトピック: アプライアンスの構造


仮想アプライアンス

仮想アプライアンスは、CA AppLogic のアプリケーション モデルにおける重要な概念です。

CA AppLogic の仮想アプライアンスは、境界と内部で構成されるインスタンス化可能なオブジェクトです。 境界には、アプライアンスの設定、外部ストレージ ボリューム上のデータへのバインディング、および他のアプライアンスへの接続に必要なあらゆるものが含まれています。 内部は、仮想マシンとブート ボリュームで構成されます。ブート ボリュームには、OS、設定ファイル、およびアプライアンスの内部で実行されるアプリケーション ソフトが格納されています。

一般的な仮想アプライアンスの構造

上記の図は、一般的な仮想アプライアンスの詳細な構造を示しています。 アプライアンスの境界は、以下の要素で構成されます。

端子(IN などの入力と DBASE や LOG などの出力を含む)

アドオン ボリューム(コンテンツ ボリュームなど)

アプライアンスの内部は、仮想マシンとブート ボリュームで構成されます。 ブート ボリュームには、適切なバージョンの Linux と、アプライアンスを動作させるのに必要な他のすべてのソフトウェア パッケージやスクリプトが設定されています。 仮想マシンは、ブート ボリュームから起動するように設定され、複数の仮想ネットワーク インターフェース カードを備えています。

eth0 vNIC は、常にデフォルト インターフェースとしてセットアップされます。このインターフェースを使用してアプライアンスにログオンし、リモート サーバと同じようにソフトウェアのインストールやトラブルシューティングを行うことができます。

さらに、アプライアンスの境界に定義された端子(入力または出力)ごとに別個の vNIC が作成されます。 1 つの vNIC でアプライアンスに送受信されるすべてのトラフィックを処理することもできますが、端子ごとに別個の vNIC を用意することで、ネットワーク トラフィックの生成と監視、接続プロトコルの適用、およびセキュリティの向上を簡単に実現できます。

境界には、一連のアプライアンス固有のプロパティ(アプライアンスを設定するために使用できるパラメータ)が含まれます。 アプライアンスを開始すると、各プロパティの環境変数が自動的に作成され、そのプロパティに割り当てられた値で初期化されます。 さらに、プロパティ値はブート ボリュームに格納されている 1 つ以上の設定ファイルにも反映されます。 これにより、アプライアンスを設定するための主要メカニズムとしてプロパティを使用できます。

境界には、1 つ以上のボリューム プレースホルダが含まれる場合もあります。 プレースホルダは、事前に定義されたストレージ ボリューム用のスロットです。 スロットを埋めるには、マウントするボリュームの名前をアプライアンスに設定します。 これは、仮想的なリムーバブル ディスクに相当します。 アプライアンスの多くは、このメカニズムを使用して HTML ページ、カスタム コード、データベースなどのコンテンツにアクセスします。

各アプライアンスには、ハードウェア リソースの予算も割り当てられます。これには、アプライアンスの最小/最大 CPU 使用率、メモリ使用量、および帯域幅を定義する 3 つのリソース範囲のセットが含まれます。

最後に、アプライアンスのスケジュール方法や実行方法に影響を与える一連の実行属性が各アプライアンスに関連付けられます。 これらの属性のうち、開始順の値とマイグレート可能フラグの 2 つを特によく使用します。 開始順は、同じアプリケーションからアプライアンスを開始する順序をアプライアンス間の依存関係に従って指定および変更するために使用します。 マイグレート可能フラグは、デフォルトでは true であり、スケジューラの設定に従ってこのアプライアンスをあるサーバから別のサーバにマイグレートできることを示します。 このフラグを false に設定すると、アプライアンスを特定のサーバに固定できます。

クラスとインスタンス

CA AppLogic では、仮想アプライアンスが最上位のコンポーネント オブジェクトとして扱われます。 新しいタイプのアプライアンスを作成すると、実際に作成されるのはアプライアンスのクラスであり、そのようなアプライアンス(そのクラスの名前付きインスタンス)を要求に応じて作成する方法を CA AppLogic に指示できます。 アプライアンス クラスは、インスタンスを作成するためのテンプレートであり、実行できません。 実際の実行中のアプリケーションには、連携して動作するように設定され、相互に接続されたインスタンスのみが含まれています。

CA AppLogic がクラスをインスタンス化するプロセス

上記の図は、CA AppLogic がどのようにクラスをインスタンス化するか示しています。 すべてのクラスには対応するクラス記述子があり、クラス記述子によって以下の要素が定義されます。

1 つ以上のクラス ボリューム(そのうちの 1 つはブート ボリュームとして指定される)

プロパティ

CA AppLogic では、任意のアプライアンスに適用される実行属性とは別に、各アプライアンス クラスに固有の設定パラメータを定義できます。 CA AppLogic には、汎用的なプロパティ インターフェースを使用してそのような設定パラメータのセットを定義し、編集するためのプロパティ メカニズムが用意されています。

CA AppLogic のプロパティ メカニズムを利用するには、プロパティの名前、データ型、およびデフォルト値をクラス定義の一部として指定することにより、プロパティを定義します。 また、アプライアンスのボリューム上にある 1 つ以上の設定ファイルをプロパティ値のターゲットとして選択することもできます。

アプライアンス インスタンスの内部では、以下のいずれかの方法でプロパティ値にアクセスできます。

端子

CA AppLogic の端子は、アプライアンス間で論理的な対話を行うための接続ポイントです。 端子の抽象化は、何も変更せずに仮想アプライアンス内の既存のソフトウェア パッケージが端子を介して通信できるように設計されています。

端子には入力と出力があります。 入力は、ネットワーク接続を受信するための端子です。 出力は、ネットワーク接続を発信するための端子です。 リクエストとデータのフローに関しては、どちらのタイプの端子も双方向です。 端子は、ネットワーク名、仮想ネットワーク アダプタ、および仮想ネットワーク インターフェースで構成されます。

あるアプライアンスの出力を別のアプライアンスの入力に接続すると、それぞれの仮想ネットワーク インターフェース間に仮想ワイヤが作成され、接続の両端に仮想 IP アドレスが割り当てられます。

注: 仮想 IP アドレスは、VM の内部で実行されているソフトウェア専用です。 実際のルーティング可能なネットワーク アドレスではありません。 接続上の実際のトラフィックは、仮想ワイヤを介して配信されます。

端子は、仮想アプライアンスで実行されているソフトウェアからは名前付きのネットワーク ホストとして認識されます。 入力には、Apache などのサーバが受信接続リクエストをリスニングできるホスト名が定義されます。 未接続状態の出力は、仮想マシン内では「到達不可能なホスト」として表示されます。 他のアプライアンスの入力に接続された出力は、有効なネットワーク ホストとして動作し、そのホストへの接続が確立されます。 アプライアンスにログオンし、接続された出力に対して ping を実行すると、出力の名前はその出力が接続された他のアプライアンスの入力の IP アドレスに解決されます。

注: 端子では、他のアプライアンスやサーバへの参照は除去されます。

アプライアンスの内部で実行されているコードは、アプライアンスの境界に定義された端子ごとに、数台のホストのみで構成される「ネットワーク」を認識します。 これにより、アプライアンスの設定を変更せずに、別の構造に含まれる同じアプライアンスの別のインスタンスを接続できます。

たとえば、データベース サーバにアクセスする必要があるアプライアンスを構築する場合は、そのデータベースにアクセスするための出力を定義し、それに DBASE という名前を付けることができます。 アプライアンス内の JDBC ドライバを設定するときは、ターゲット データベース サーバのホスト名として出力「DBASE」の名前を設定します。 実行時には、JDBC ドライバのターゲット ホスト名を変更しなくても、アプライアンスの各インスタンスを別のデータベース サーバに接続できます。その場合、同じホスト名「DBASE」が特定のインスタンスの接続先であるデータベース サーバの正しい IP アドレスに自動的に解決されます。

端子ごとに、どのプロトコルを許可するかを指定できます。 これは、端子上に仮想ファイアウォールを作成し、送受信を許可したプロトコルのみに限定するのと同じ効果があります。 CA AppLogic の補助機能として、アプリケーションをセットアップするときは、プロトコルが一致する端子のみが接続されるようになっています。 したがって、DBASE 出力を介して MySQL と連携するようにアプライアンス内のソフトウェアを設定した場合は、誰かが誤って Oracle サーバに接続しないように、DBASE のプロトコルを MYSQL として宣言できます。

注: 任意の端子を必須の端子として宣言することにより、この種の外部サービスに接続しないとアプライアンスが動作しないことを CA AppLogic に指示できます。 必須の端子が未接続状態の場合、CA AppLogic はアプリケーションの開始を拒否し、接続し忘れている端子をユーザに通知します。

ボリューム

各アプライアンスには、少なくとも 1 つのストレージ ボリューム(アプライアンスの起動時に使用されるボリューム)が必要です。 これらのボリュームは、アプライアンスのクラス定義の一部として指定され、アプライアンスのインスタンスが作成されるたびにインスタンス化されます。 多くの場合、追加ボリューム用のプレースホルダを含むアプライアンスを定義すると便利です。 定義されたプレースホルダは、後で外部ボリュームを差し込むことができる「スロット」になります。

プレースホルダに差し込むことができるボリュームは、アプリケーション ボリュームと呼ばれます。 アプリケーション ボリュームを明示的に作成するには、適切なコマンドを実行し、名前、ストレージ サイズ、および必要なファイル システムのタイプを指定します。 アプリケーション ボリュームを CA AppLogic コントローラにマウントして、データを送受信することができます。

たとえば、2 つのボリューム(ブート ボリュームとコンテンツ ボリューム)を含む Web サーバ アプライアンスを定義すると便利です。 ブート ボリュームには、Linux を起動して Apache Web サーバを実行するのに必要なソフトウェアと設定ファイルが格納されます。 このボリュームは、クラス定義の一部になり、アプライアンスのインスタンスごとにインスタンス化されます。

一方、コンテンツ ボリュームは、特定の Web サイト用の HTML ファイル、静止画像、およびスクリプトを格納するアプリケーション ボリュームのプレースホルダです。 コンテンツ ボリュームへの参照と共に Web サーバ アプライアンスのインスタンスを設定すると、特定の Web サイトを提供する Apache Web サーバのインスタンスが生成されます。 この Web サーバのページやその他のコンテンツは、コンテンツ ボリュームに配置されます。

ヒント: 1 つのアプリケーション ボリュームを使用して、複数の Web サーバのコンテンツを展開できます。 これを簡単に行うには、特定のアプライアンスがコンテンツにアクセスする際に使用するボリュームのベース ディレクトリを指定するプロパティを追加します。 これにより、同じコンテンツ ボリュームを使用して複数の Web サーバを設定しながら、異なるディレクトリでコンテンツを提供するように各インスタンスをセットアップできます。

同じパターンを使用して、特定のアプリケーション機能用の EJB パッケージを含むボリューム(およびそのベース パス)を設定した汎用的な J2EE サーバや、特定のデータベースを含むボリュームとパスを設定した汎用的なデータベース サーバを設計できます。

実際、このようにアプリケーション ボリュームとディレクトリ パスのプロパティを組み合わせて使用することにより、アプリケーションのユーザ インターフェース、静的コンテンツ、コード、およびデータを 1 つのボリュームにまとめることができるため、展開、変更、および管理が簡素化されます。