高い可用性とスケーラビリティの実現 - ARR および NLB
公開日: 2008 年 11 月 13 日 (作業者: wonyoo (英語))
更新日: 2009 年 2 月 16 日 (作業者: wonyoo (英語))
要約
このドキュメントでは、高い可用性とスケーラビリティを実現するために、Application Request Routing (ARR) をネットワーク負荷分散 (NLB) と組み合わせて使用する方法について規範的なガイダンスを提供しています。
概要
Microsoft Application Request Routing (ARR) for IIS 7.0 は、HTTP ヘッダー、サーバー変数、および負荷分散アルゴリズムに基づいて HTTP 要求をコンテンツ サーバーに転送するプロキシ ベースのルーティング モジュールです。一般的な ARR 展開を以下の図に示します。
ARR では、コンテンツ サーバーに対して高い可用性とスケーラビリティを提供していますが、展開全体の可用性とスケーラビリティは高くありません。これには、次の理由があります。
- ARR は単一障害点である。
- コンテンツ サーバーのスケーラビリティが、単一の ARR サーバーの最大容量によって制限されている。
上記の課題を克服するために、管理者はネットワーク負荷分散 (NLB) と組み合わせた複数の ARR サーバーの使用を検討することができます。ARR は、アクティブ/パッシブ モードで展開して、高可用性のみ実現できます。または、アクティブ/アクティブ モードで展開して、高い可用性とスケーラビリティの両方を実現できます。このホワイトペーパーでは、ARR と NLB を一緒に展開して、ARR のコア シナリオを有効にし、かつ、全体的に高い可用性とスケーラビリティを実現する方法について説明しています。NLB は、Windows Server 2008 のすべての SKU で使用できます。
Application Request Routing およびネットワーク負荷分散の使用
ARR は、IIS 7.0 上のモジュールとして構築され、第 7 層 (アプリケーション) でルーティングの決定を行うように設計されています。より正確には、ARR ではルーティングの決定を行うための受信 HTTP 要求ヘッダーとサーバー変数の検査を別の IIS 7.0 モジュールである URL 書き換え に依存しています。この設計を前提に、管理者はアプリケーション レベルの情報に基づき、インテリジェントなルーティング規則を作成できます。例を以下に示します。
- ホスト名 (HTTP_HOST): ホスト名に基づき、複数の異なるコンテンツ サーバーにトラフィックをルーティングします。
- 要求されたリソース (URL): ファイル拡張子に基づき、要求されたリソースが静的コンテンツ用か動的コンテンツ用かを判断し、その判断に応じて要求をルーティングします。
- クライアント情報 (HTTP_USER_AGENT): ブラウザーの種類とバージョンに基づき、要求を適切なコンテンツ サーバーにルーティングします。
- カスタム ヘッダー (アプリケーションで Cookie として設定されます): ユーザー設定やユーザー ID など、アプリケーションによって設定された Cookie 情報に基づき、トラフィックをルーティングします。
上記は、ほんの一例にすぎません。HTTP ヘッダーおよびサーバー変数の全一覧については、付録 A を参照してください。
NLB では、ルーティングの決定を第 3 層で行うため、アプリケーション特有の情報 (HTTP ヘッダーやサーバー変数など) を使用して、アプリケーション レベルに基づいたルーティングを行うことはできません。同じように、ARR 自体にはフォールト トレラント展開機能がなく、ARR 層での高可用性を実現するには、他の補完的なテクノロジやソリューションに依存する必要があります。NLB は、以下に示すように、ネットワーク スタックの別のレベルで実行され、ARR が展開される場所と同じサーバー上で有効になります。
シナリオ 1: HTTP ベースのルーティングおよび負荷分散
HTTP ベースのルーティングおよび負荷分散シナリオにより、3 層展開アーキテクチャが実現します。各階層の内容を以下に示します。
- 第 1 層 (Web): 静的コンテンツを処理し、残りの動的な要求を第 2 層サーバーにルーティングして負荷分散する 2 つの目的があります。
- 第 2 層 (アプリケーション): ビジネス ロジックに依存した動的コンテンツを処理します。
- 第 3 層 (データ): データを保存します。
3 層展開の図を以下に示します。
上記の例は、静的コンテンツと動的コンテンツを区別するルーティング規則を示していますが、別の一般的なシナリオでは、プレゼンテーションの要求と Web サービスの要求が区別されています。
オプション 1: アクティブ/パッシブ
アクティブ/パッシブ モードでは、一般的に ARR サーバーが 2 台あり、1 台のサーバーが要求を処理している間、もう 1 台のサーバーはフェールオーバー サーバーとしてスタンバイします。前述したように、この構成では単一障害点を削除して高可用性を実現しますが、コンテンツ サーバーの総体的な容量は、単一の ARR サーバーの最大容量によって制限されるので、スケールアウトされたソリューションではありません。
この手順では、2 台の ARR サーバーが同じように構成されているため、共有構成が使用されています。まず、両方のサーバーに ARR をインストールし、NLB クラスターを作成します。NLB クラスターは、クラスター ノードのいずれかに対してのみトラフィックを許可するように構成されています。これは、単一ホスト フィルタリング モードを使用して、クラスターのポートの規則を構成することで実現します。トラフィックを許可するノードは、NLB クラスター ノードのホストの優先順位を設定して決められます。詳細については、「NLB の構成」を参照してください。
ARR のホスト名アフィニティ機能を除き、2 台の ARR サーバー間で共有する必要があるランタイム状態情報はありません。そのため、このシナリオでは、ARR または NLB で特別な構成は必要ありません。ARR のサーバー アフィニティ機能を使用する場合でも、アフィニティ化状態情報は、要求ヘッダー内の Cookie を使用して、パッシブ サーバーから利用できます。
このシナリオは、ARR Version 1 リリースで完全にサポートされています。
ARR の構成
手順 1: 2 台の ARR サーバーで共有構成を有効にする
- このドキュメントの手順に従って、IIS 7.0 で共有構成をセットアップします。
手順 2: ARR を使用して、3 層展開アーキテクチャを構成する
このドキュメントの手順に従って、3 層展開アーキテクチャで ARR を構成します。
上記のドキュメントを簡単にまとめると、以下の方法について説明しています。
- ARR サーバーで静的コンテンツを使用できるようにする方法。
- ARR サーバーから直接処理されるように、静的コンテンツの URL 書き換え規則を作成する方法。
- アプリケーション サーバーに転送されるように、動的コンテンツの URL 書き換え規則を作成する方法。
NLB の構成
NLB の構成は、以下の手順に分かれています。
- すべての ARR サーバーに NLB 機能をインストールする。
- ARR 用の NLB クラスターを作成する。
- アクティブ/パッシブ展開用に NLB を構成する。
すべての ARR サーバーに NLB 機能をインストールする
サーバー マネージャー を開きます。
[機能] を展開します。
[機能の追加] をクリックします。
機能の追加ウィザードで、[ネットワーク負荷分散] を選択します。
[インストール] をクリックして、NLB 機能のインストールを確認します。
NLB 機能が正常にインストールされたことを確認します。
すべての ARR サーバーに対して、上記の手順を繰り返します。
ARR 用の NLB クラスターを作成する
ARR サーバーのすべてのインスタンスに NLB 機能がインストールされていることを確認します。
[スタート]、[すべてのプログラム]、[管理ツール] の順に移動し、[ネットワーク負荷分散マネージャ] を開きます。
[ネットワーク負荷分散クラスタ] を右クリックし、[新しいクラスタ] を選択します。
[新しいクラスタ] ダイアログ ボックスの [ホスト] テキスト ボックスに、ARR サーバーのいずれかのサーバー アドレスを入力します。複数のインターフェイスがある場合は、NLB クラスターを作成する対象のサーバー アドレスを入力します。
アクティブ/パッシブ モード (NLB の単一ホスト モード) では、優先順位によってフェールオーバーが実行される順序が決められます。既定では、優先順位が「1」に設定されているサーバーがアクティブなノードとなります。
クラスター IP (仮想 IP アドレス) が必要になります。[追加...] をクリックします。これは、クライアントが通信する対象の IP アドレスになります。
仮想 IP アドレスを入力して、[OK] をクリックします。
[次へ] をクリックします。
既定値を使用します。詳細については、付録を参照してください。
[完了] をクリックして、NLB クラスターの作成を完了します。
これで、NLB クラスターが作成され、追加のメンバーをクラスターに追加することができます。追加のメンバー サーバーすべてで、残りの手順に従います。[ネットワーク負荷分散マネージャ] で、新しく選択されたクラスターを右クリックし、[ホストをクラスタに追加] を選択します。
追加するメンバーのサーバー アドレスを入力します。複数のインターフェイスがある場合は、NLB クラスターで使用されるものを選択します。
優先順位は、クラスター内のメンバー サーバー間で、相互に排他的かつ一意に割り当てられます。アクティブ/パッシブ モード (NLB の単一ホスト モード) では、優先順位によってフェールオーバーの順序が決められます。
[完了] をクリックして、メンバー サーバーをクラスターに追加します。
[ネットワーク負荷分散マネージャ] は、次のようになります。
アクティブ/パッシブ展開用に NLB を構成する
アクティブ/パッシブ展開用に NLB を構成するには、[ネットワーク負荷分散マネージャ] で、クラスターを右クリックし、[クラスタのプロパティ] を選択します。[ポートの規則] タブをクリックし、[編集...] をクリックします。
[単一ホスト] を選択して、[OK] をクリックします。
これで、ARR を使用してアクティブ/パッシブ モードで機能するように NLB が正常に構成されました。
オプション 2: アクティブ/アクティブ
アクティブ/アクティブ モードでは、2 台以上の ARR サーバーを使用できます。高可用性のみを実現するアクティブ/パッシブ モードとは異なり、この構成では、高い可用性とスケーラビリティの両方が実現します。
前述したように、複数の ARR サーバーが同じように構成されているため、共有構成が使用されます。主な違いは、NLB の構成方法です。すべての ARR サーバーを同時に使用するために、NLB クラスター ポート規則が複数ホスト モードで構成されます。
アフィニティ機能が NLB で有効になっているかどうかに関係なく、ARR サーバー上で特別な構成は必要ありません。1 つ目の理由として、ARR サーバーでは、同じ方法で構成されるように単一の共有構成が使用されることが挙げられます。2 つ目の理由は、ARR では使用するサーバー アフィニティ情報を保存するためにクライアントの Cookie を使用するので、この情報は要求ごとに使用可能となり、ARR サーバー全体で共有できることです。NLB ではアフィニティをなしに設定すると負荷分散がより均等化されるので、なしに設定することをお勧めします。
このシナリオは、ARR Version 1 リリースで完全にサポートされています。
ARR の構成
アクティブ/アクティブの ARR の構成は、アクティブ/パッシブの場合と同じです。主な違いは、NLB の構成方法です。
手順 1: 2 台の ARR サーバーで共有構成を有効にする
- このドキュメントの手順に従って、IIS 7.0 で共有構成をセットアップします。
手順 2: ARR を使用して、3 層展開アーキテクチャを構成する
このドキュメントの手順に従って、3 層展開アーキテクチャで ARR を構成します。
上記のドキュメントを簡単にまとめると、以下の方法について説明しています。
- ARR サーバーで静的コンテンツを使用できるようにする方法。
- ARR サーバーから直接処理されるように、静的コンテンツの URL 書き換え規則を作成する方法。
- アプリケーション サーバーに転送されるように、動的コンテンツの URL 書き換え規則を作成する方法。
NLB の構成
NLB の構成は、以下の手順に分かれています。
- すべての ARR サーバーに NLB 機能をインストールする。
- ARR 用の NLB クラスターを作成する。
- アクティブ/アクティブ展開用に NLB を構成する。
すべての ARR サーバーに NLB 機能をインストールする: このセクションを参照してください。
ARR 用の NLB クラスターを作成する: このセクションを参照してください。
アクティブ/アクティブ展開用に NLB を構成する
アクティブ/アクティブ展開用に NLB を構成するには、[ネットワーク負荷分散マネージャ] で、クラスターを右クリックし、[クラスタのプロパティ] を選択します。[ポートの規則] タブをクリックし、[編集...] をクリックします。
[複数ホスト] を選択します。アフィニティ設定については、[なし] を選択します。前述したように、NLB ではアフィニティをなしに設定すると負荷分散がより均等化されるので、なしに設定することをお勧めします。
これで、ARR を使用してアクティブ/アクティブ モードで機能するように NLB が正常に構成されました。
シナリオ 2: ホスト名アフィニティを使用した共有ホスト
このシナリオでは、ARR のホスト名アフィニティ機能を使用して、共有ホスト展開を有効にします。これには次のメリットがあります。
- 従来の共有ホスト展開で必要とされていた手動による管理とメンテナンスを削減する。
- 既存のサーバー リソースを最大限に活用しながら、すべてのサーバー リソースが均等に使用されるようにする。
- 簡単に環境をスケールアウトできる。
- 追加の処理能力を売り込むためのビジネス機会を創出する。
共有ホストおよび ARR の詳細については、このドキュメントを参照してください。
ARR を使用した共有ホスト環境の図を以下に示します。
オプション 1: アクティブ/パッシブ
前述したように、アクティブ/パッシブ モードでは、一般的に ARR サーバーが 2 台あり、1 台のサーバーが要求を処理している間、もう 1 台のサーバーはフェールオーバー サーバーとしてスタンバイします。この構成では単一障害点を削除して高可用性を実現しますが、コンテンツ サーバーの総体的な容量は、単一の ARR サーバーの最大容量によって制限されるので、スケールアウトされたソリューションではありません。
この手順では、2 台の ARR サーバーが同じように構成されているため、共有構成が使用されています。NLB クラスターは、クラスター ノードのいずれかに対してのみトラフィックを許可するように構成されています。これは、単一ホスト フィルタリング モードを使用して、クラスター規則を構成することで実現します。トラフィックを許可するノードは、NLB クラスター ノードのホストの優先順位を設定して決められます。詳細については、「NLB の構成」を参照してください。
ARR のホスト名アフィニティ機能では、ホスト名に基づき、要求を特定のサーバー (RC 内のサーバー グループ) にアフィニティ化します。ホスト名とコンテンツ サーバー間のアフィニティ化されたマッピングのランタイム状態情報は、ARR サーバーのインスタンス内のメモリに保存されます。ARR Version 1 リリースでは、ARR は Microsoft External Cache Version 1 for IIS 7.0 を活用し、このランタイム状態を複数の ARR サーバー間で共有して維持します。このシナリオの詳細については、このドキュメントを参照してください。
このシナリオは、ARR Version 1 リリースで完全にサポートされています。
ARR の構成
Step 1: ホスト名アフィニティを使用して、共有ホスト用に ARR を構成する
- このドキュメントの手順に従って、共有ホスト用に ARR のホスト名アフィニティ機能を構成します。
手順 2: External Cache を有効にして構成する
- このドキュメントの手順に従って、External Cache を有効にして構成します。
NLB の構成
NLB の構成は、以下の手順に分かれています。
- NLB 機能をインストールする。
- ARR 用の NLB クラスターを作成する。
- アクティブ/パッシブ展開用に NLB を構成する。
NLB 機能をインストールする:このセクションを参照してください。
ARR 用の NLB クラスターを作成する: このセクションを参照してください。
アクティブ/パッシブ展開用に NLB を構成する: このセクションを参照してください。
オプション 2: アクティブ/アクティブ (ARR)
アクティブ/アクティブ モードでは、2 台以上の ARR サーバーを使用できます。高可用性のみを実現するアクティブ/パッシブ モードとは異なり、この構成では、高い可用性とスケーラビリティの両方が実現します。
複数の ARR サーバーが同じように構成されているため、共有構成が使用されます。すべての ARR サーバーを同時に使用するために、NLB クラスター ポート規則が複数ホスト モードで構成されます。
前述したように、ホスト名とコンテンツ サーバー間のアフィニティ化されたマッピングのランタイム状態情報は、ARR サーバーのインスタンス内のメモリに保存されます。複数の ARR サーバー間でこの情報を共有するために、Microsoft External Cache for IIS 7.0 が使用されます。External Cache の詳細については、このドキュメントを参照してください。
ARR の構成
アクティブ/アクティブの ARR の構成は、アクティブ/パッシブの場合と同じです。主な違いは、NLB の構成方法です。
Step 1: ホスト名アフィニティを使用して、共有ホスト用に ARR を構成する
- このドキュメントの手順に従って、共有ホスト用に ARR のホスト名アフィニティ機能を構成します。
手順 2: External Cache を有効にして構成する
- このドキュメントの手順に従って、External Cache を有効にして構成します。
NLB の構成
NLB の構成は、以下の手順に分かれています。
- NLB 機能をインストールする。
- ARR 用の NLB クラスターを作成する。
- アクティブ/アクティブ展開用に NLB を構成する。
NLB 機能をインストールする: このセクションを参照してください。
ARR 用の NLB クラスターを作成する: このセクションを参照してください。
アクティブ/アクティブ展開用に NLB を構成する: このセクションを参照してください。この ARR シナリオでは、NLB でアフィニティを使用しないことをお勧めします。
まとめ
このホワイトペーパーでは、主に 2 つの ARR シナリオについて検討し、複数の ARR サーバーを展開して、NLB を使用することにより、高い可用性とスケーラビリティを実現しました。
付録
付録 A: ルーティングの決定の規則作成に使用可能な HTTP ヘッダーとサーバー変数の全一覧
ALL_HTTP | ALL_RAW | APPL_MD_PATH |
APPL_PHYSICAL_PATH | CERT_COOKIE | CERT_FLAGS |
CERT_ISSUER | CERT_KEYSIZE | CERT_SECRETKEYSIZE |
CERT_SERIALNUMBER | CERT_SERVER_ISSUER | CERT_SERVER_SUBJECT |
CERT_SUBJECT | CONTENT_LENGTH | CONTENT_TYPE |
DOCUMENT_ROOT | GATEWAY_INTERFACE | HTTP_ACCEPT |
HTTP_ACCEPT_ENCODING | HTTP_ACCEPT_LANGUAGE | HTTP_CONNECTION |
HTTP_CONTENT_LENGTH | HTTP_HOST | HTTP_IF_MODIFIED_SINCE |
HTTP_IF_NONE_MATCH | HTTP_REFERER | HTTP_UA_CPU |
HTTP_USER_AGENT | HTTPS | HTTPS_KEYSIZE |
HTTPS_SECRETKEYSIZE | HTTPS_SERVER_ISSUER | HTTPS_SERVER_SUBJECT |
INSTANCE_ID | INSTANCE_META_PATH | LOCAL_ADDR |
PATH_INFO | PATH_TRANSLATED | QUERY_STRING |
REMOTE_ADDR | REMOTE_HOST | REMOTE_PORT |
REMOTE_USER | REQUEST_FILENAME | REQUEST_METHOD |
REQUEST_URI | SCRIPT_FILENAME | SCRIPT_NAME |
SERVER_ADDR | SERVER_NAME | SERVER_PORT |
SERVER_PORT_SECURE | SERVER_PROTOCOL | SERVER_SOFTWARE |
URL |
付録 B: NLB に関するその他のドキュメント
- NLB Server Core の概要:
- NLB および SSL:
- http://technet2.microsoft.com/windowsserver/en/library/b8afa015-543d-4129-ac34-f64d45f52c751033.mspx?mfr=true
- https://technet.microsoft.com/ja-jp/library/cc725767%28WS.10%29.aspx
- http://technet2.microsoft.com/WindowsServer/en/library/1fa923cd-2d0b-4270-8433-07d58b0f5d4b1033.mspx?mfr=true
- https://support.microsoft.com/?id=313299
- その他の NLB のリンク:
- https://technet.microsoft.com/en-us/library/cc782694.aspx
- https://technet.microsoft.com/ja-jp/library/cc778263.aspx
- https://support.microsoft.com/kb/323437
- http://technet2.microsoft.com/windowsserver2008/en/library/cf7a20f6-fd77-44be-8db1-6590e3b711bb1033.mspx
- https://support.microsoft.com/kb/890159/en-us
- https://blogs.msdn.com/clustering