次の方法で共有


高可用性とスケーラビリティの実現 - ARR と NLB

作成者: Won Yoo

高可用性とスケーラビリティの実現:
IIS 7.0 以降の Microsoft アプリケーション要求ルーティング処理 (ARR) とネットワーク負荷分散 (NLB)。

Microsoft Corporation
作成者: Ahmed Bisht、Won Yoo
公開日: 2008 年 11 月 13 日

要約

このドキュメントでは、アプリケーション要求ルーティング処理 (ARR) とネットワーク負荷分散 (NLB) を組み合わせて高可用性とスケーラビリティを実現する規範的なガイダンスを紹介します。

概要

IIS 7.0 以降用 Microsoft アプリケーション要求ルーティング処理 (ARR) は、HTTP ヘッダー、サーバー変数、および負荷分散アルゴリズムに基づいて、コンテンツ サーバーに要求を転送するプロキシ ベースのルーティング処理モジュールです。 次の図は、一般的な ARR の展開を示したものです。

A R R 転送 H T T P 要求を示す図。

ARR はコンテンツ サーバーの高可用性とスケーラビリティを提供しますが、全体的な展開環境の可用性とスケーラビリティは高くありません。次の理由が挙げられます。

  • ARR が単一障害点になります。
  • コンテンツ サーバーのスケーラビリティは、1 台の ARR サーバーの最大容量が上限となります。

これらの課題を克服するために、管理者は複数の ARR サーバーをネットワーク負荷分散 (NLB) と組み合わせて使用することを検討できます。 ARR は、アクティブ/パッシブ モードで展開して高可用性のみを実現することも、アクティブ/アクティブ モードで展開して高可用性とスケーラビリティの両方を実現することもできます。 このホワイトペーパーでは、ARR と NLB を一緒に展開して、ARR のコア シナリオを実現しながら、全体的な高可用性とスケーラビリティを実現する方法について説明します。 NLB は、Windows Server 2008 のすべての SKU で使用できます。

アプリケーション要求ルーティング処理とネットワーク負荷分散の使用

ARR は IIS 上のモジュールとして構築され、レイヤー 7 (アプリケーション) でルーティングの決定を行うように設計されています。 もっと正確に言えば、ARR は別の IIS モジュール (URL 書き換え) を利用し、受信 HTTP 要求のヘッダーとサーバー変数を検査することでルーティングの決定を行います。 この設計を踏まえ、管理者は、次のようなアプリケーション レベルの情報に基づいてインテリジェントなルーティング規則を記述できます。

  • ホスト名 (HTTP_HOST): ホスト名に基づいて異なるコンテンツ サーバーにトラフィックをルーティングします。
  • 要求されたリソース (URL): ファイル拡張子に基づいて、要求されたリソースが静的コンテンツ用か動的コンテンツ用かを判断し、それに応じて要求をルーティングします。
  • クライアント情報 (HTTP_USER_AGENT): ブラウザーの種類とバージョンに基づいて、要求を適切なコンテンツ サーバーにルーティングします。
  • カスタム ヘッダー (アプリケーションが Cookie として設定): ユーザー設定やユーザー ID など、アプリケーションによって設定された Cookie 情報に基づいてトラフィックをルーティングします。

上記は例の一部に過ぎません。 HTTP ヘッダーとサーバー変数の完全な一覧については、「付録 A」を参照してください。

NLB は、ルーティングの決定をレイヤー 3 で行うため、HTTP ヘッダーやサーバー変数など、アプリケーション固有の情報を使用して、アプリケーション レベルのルーティングを行うことはできません。 加えて、ARR 自体はフォールト トレラントな展開機能を備えていません。ARR 層の高可用性を実現するためには、他の補完的なテクノロジやソリューションを利用する必要があります。 NLB は、ARR の展開先と同じサーバーで有効となり、ネットワーク スタック上の異なるレベルで動作します。

A R 1 と 2 とコンテンツ サーバー間の接続を示すディグラム。

シナリオ 1: HTTP ベースのルーティングと負荷分散

HTTP ベースのルーティングと負荷分散のシナリオでは、次のような 3 層展開アーキテクチャが可能になります。

  • 第 1 層 (Web): 静的コンテンツを処理すると共に、それ以外の動的要求を第 2 層サーバーにルーティングして負荷分散するという 2 つの目的を果たします。
  • 第 2 層 (アプリケーション): ビジネス ロジックを利用する動的コンテンツを処理します。
  • 第 3 層 (データ): データを格納します。

この 3 層展開の図を次に示します。

A R R と各層のコンテンツ サーバー間のコンテンツ フローを示す図。

上の例は、静的コンテンツと動的コンテンツを区別するルーティング規則を示していますが、プレゼンテーション要求と Web サービス要求を区別するシナリオも一般的です。

オプション 1: アクティブ/パッシブ

アクティブ/パッシブ モードでは、通常、2 台の ARR サーバーがあり、一方のサーバーが要求を処理し、もう一方のサーバーはフェールオーバー サーバーとして待機します。 前述のように、この構成は単一障害点をなくすことで高可用性を実現しますが、コンテンツ サーバーの集計容量は 1 台の ARR サーバーの最大容量が上限となるため、スケールアウト ソリューションではありません。

このセットアップでは、2 台の ARR サーバーが同じ方法で構成されるため、共有構成が使用されます。 まず、両方のサーバーに ARR をインストールしてから、NLB クラスターを作成します。 NLB クラスターは、クラスター ノード内のいずれか 1 台のみ、トラフィックを受け入れるように構成されます。 これは、単一ホスト フィルタリング モードでクラスター ポート規則を構成することによって実現されます。 トラフィックを受け入れるノードは、NLB クラスター ノードのホストの優先順位設定によって決まります。 詳細については、「NLB 構成」を参照してください。

ARR のホスト名アフィニティ機能を除き、2 台の ARR サーバー間で共有する必要があるランタイム状態情報はありません。 そのため、このシナリオでは、ARR または NLB に特別な構成は必要ありません。 ARR でサーバー アフィニティ機能を使用する場合でも、アフィニタイズされた状態情報は、要求ヘッダーの Cookie を介してパッシブ サーバーから利用できるようになります。

このシナリオは、ARR バージョン 1 リリースで完全にサポートされます。

ARR 構成

手順 1: 2 台の ARR サーバーで共有構成を有効にする。

  • こちらのドキュメントの手順に従って、IIS に共有構成を設定します。

手順 2: ARR を使用して 3 層展開アーキテクチャを構成する。

  • こちらのドキュメントの手順に従って、3 層展開アーキテクチャで ARR を構成します。

  • 前述のドキュメントでは、次の内容が簡単に説明されています。

    • ARR サーバーで静的コンテンツを公開する方法。
    • 静的コンテンツが ARR サーバーから直接提供されるように URL 書き換え規則を記述する方法。
    • 動的コンテンツがアプリケーション サーバーに転送されるように URL 書き換えルールを記述する方法。

NLB 構成

NLB の構成は、次の手順に分けられます。

  1. NLB の機能をすべての ARR サーバーにインストールします。
  2. ARR 用の NLB クラスターを作成します。
  3. アクティブ/パッシブ展開用に NLB を構成します。

NLB の機能をすべての ARR サーバーにインストールする

  1. サーバー マネージャーを開きます。
    メイン ウィンドウに詳細が表示されている [サーバー マネージャー] ウィンドウのスクリーンショット。
  2. [機能] を展開します。
  3. [機能の追加] をクリックします。
  4. 機能の追加ウィザードで、[ネットワーク負荷分散] を選択します。
    メイン ウィンドウに機能が表示されている [機能の追加ウィザード] ウィンドウのスクリーンショット。
  5. [インストール] をクリックして、NLB 機能のインストールを確定します。
    メイン ウィンドウの [インストールの選択の確認] を示す [機能の追加ウィザード] ウィンドウのスクリーンショット。
  6. NLB 機能が正常にインストールされたことを確認します。
    メイン ウィンドウの [インストール結果] ページを示す [機能の追加ウィザード] ウィンドウのスクリーンショット。
  7. すべての ARR サーバーで上記の手順を繰り返します。

ARR 用の NLB クラスターを作成する

  1. NLB が ARR サーバーのすべてのインスタンスにインストールされていることを確認します。
  2. [スタート] > [すべてのプログラム] > [管理ツール] に移動し、[ネットワーク負荷分散マネージャー] を開きます。
    ネットワーク負荷分散クラスターが強調表示されている [ネットワーク負荷分散マネージャー] ウィンドウのスクリーンショット。
  3. [ネットワーク負荷分散クラスター] を右クリックし、[新しいクラスター] を選択します。
    [新しいクラスター] ダイアログのスクリーンショット。
  4. [新しいクラスター] ダイアログ ボックスの [ホスト] ボックスに、いずれかの ARR サーバーのサーバー アドレスを入力します。 複数のインターフェイスがある場合は、NLB クラスターを作成するサーバー アドレスを入力します。
    ホスト入力ボックスに I P アドレスが表示されている [新しいクラスター] ダイアログのスクリーンショット。
  5. アクティブ/パッシブ モード (NLB の単一ホスト モード) では、フェールオーバーの順序が優先順位によって決まります。 既定では、優先度 1 のサーバーがアクティブ ノードです。
    既定の設定を含む [新しいクラスター ホスト パラメーター] ダイアログのスクリーンショット。
  6. クラスターの IP (仮想 IP アドレス) が必要です。 [追加] をクリックします。クライアントは、この IP アドレスとの間で通信を行います。
    [新しいクラスター クラスター I P アドレス] ダイアログのスクリーンショット。
  7. 仮想 IP アドレスを入力し、[OK] をクリックします。
    [I P アドレスの追加] ダイアログのスクリーンショット
  8. 次へ をクリックします。
    I P アドレスとサブネット マスクを示す [Cluster I P Addresses]\(クラスター I P アドレス\) ダイアログのスクリーンショット。
  9. 既定の値を受け入れる。 詳細については、付録を参照してください。
    既定のパラメーターを示す [クラスター パラメーター] ダイアログのスクリーンショット。
  10. [完了] クリックして、NLB クラスターの作成を完了します。
    [ポート規則] ダイアログのスクリーンショット
  11. NLB クラスターが作成されたら、クラスターにメンバーを追加できます。 以降の手順は、追加したすべてのメンバー サーバーで行います。 ネットワーク負荷分散マネージャーで、新しく選択したクラスターを右クリックし、[ホストをクラスターに追加] を選択します。
    [クラスターへのホストの追加] ダイアログのスクリーンショット。
  12. 追加するメンバーのサーバー アドレスを入力します。 複数のインターフェイスがある場合は、NLB クラスターで使用するインターフェイスを選択します。
    [接続] ダイアログのスクリーンショット。ホスト入力ボックスに I P アドレスがあります。
  13. 優先順位の割り当ては相互排他的です。クラスター内のメンバー サーバー間で重複しないよう注意してください。 アクティブ/パッシブ モード (NLB の単一ホスト モード) では、フェールオーバーの順序が優先順位によって決まります。
    [ホスト パラメーター] ダイアログのスクリーンショット。優先度は 2 に設定されます。
  14. [完了] をクリックして、クラスターにメンバー サーバーを追加します。
    [ポート規則] ダイアログのスクリーンショット。[完了] ボタンが選択されています。
  15. [Network Load Balancer Manager](ネットワーク ロード バランサー マネージャー) の外観は次のようになっています。
    [ネットワーク負荷分散マネージャー] ウィンドウのスクリーンショット。

アクティブ/パッシブ展開用に NLB を構成する

  1. アクティブ/パッシブ展開用に NLB を構成するには、[ネットワーク負荷分散マネージャー] でクラスターを右クリックし、[クラスターのプロパティ] を選択します。 [ポートの規則] タブをクリックします。クリックして 編集します。
    [ポート ルール] タブが選択されている [プロパティ] ダイアログのスクリーンショット。
  2. [単一ホスト] を選択し、[OK] をクリックします。
    [ポート 規則の追加/編集] ダイアログのスクリーンショット。[フィルタリング モード] セクションで単一ホストが選択されています。

NLB が ARR と連携し、アクティブ/パッシブ モードで動作するように正しく構成されました。

オプション 2: アクティブ/アクティブ

アクティブ/アクティブ モードでは、2 台以上の ARR サーバーを使用できます。 この構成は、高可用性のみを実現するアクティブ/パッシブ モードとは異なり、高可用性とスケーラビリティの両方を実現します。

前述のように、複数の ARR サーバーが同じ方法で構成されるため、共有構成が使用されます。 主な違いは、NLB の構成方法です。 すべての ARR サーバーを同時に利用するために、NLB クラスター ポート規則は複数ホスト モードで構成します。

アフィニティ機能が NLB で有効になっているかどうかにかかわらず、ARR サーバーに特別な構成は必要ありません。 まず、複数の ARR サーバーを同じように構成するために、1 つの共有構成が使用されます。 また、ARR は各自でサーバーのアフィニティ情報を使用できるよう、それをクライアントの Cookie を使用して保存します。そのため、この情報は要求ごとに提供されることとなり、複数の ARR サーバー間で横断的に使用できるようになります。 NLB では、アフィニティを "なし" に設定することが推奨されます。その方が負荷が均等に分散されるためです。

このシナリオは、ARR バージョン 1 リリースで完全にサポートされます。

ARR 構成

アクティブ/アクティブの ARR 構成は、アクティブ/パッシブの場合と同じです。 主な違いは、NLB の構成方法です。

手順 1: 2 台の ARR サーバーで共有構成を有効にする。

  • こちらのドキュメントの手順に従って、IIS に共有構成を設定します。

手順 2: ARR を使用して 3 層展開アーキテクチャを構成する。

  • こちらのドキュメントの手順に従って、3 層展開アーキテクチャで ARR を構成します。

  • 前述のドキュメントでは、次の内容が簡単に説明されています。

    • ARR サーバーで静的コンテンツを公開する方法。
    • 静的コンテンツが ARR サーバーから直接提供されるように URL 書き換え規則を記述する方法。
    • 動的コンテンツがアプリケーション サーバーに転送されるように URL 書き換えルールを記述する方法。

NLB 構成

NLB の構成は、次の手順に分けられます。

  1. NLB の機能をすべての ARR サーバーにインストールします。
  2. ARR 用の NLB クラスターを作成します。
  3. アクティブ/アクティブ展開用に NLB を構成する。

すべての ARR サーバーに NLB 機能をインストールする: [こちら](achieving-high-availability-and-scalability-arr-and-nlb.md#install NLB)のドキュメントを参照してください。

ARR 用の NLB クラスターを作成する: [こちら](achieving-high-availability-and-scalability-arr-and-nlb.md#create nlb)のドキュメントを参照してください。

アクティブ/アクティブ展開用に NLB を構成する。

  1. アクティブ/アクティブ展開用に NLB を構成するには、[ネットワーク負荷分散マネージャー] でクラスターを右クリックし、[クラスターのプロパティ] を選択します。 [ポートの規則] タブをクリックします。クリックして 編集します。
    [プロパティ] ダイアログのスクリーンショット。
  2. [複数ホスト] を選択します。 アフィニティ設定で [なし] を選択します。 前述のように、NLB ではアフィニティを使用しないことをお勧めします。その方が負荷分散で高い効果が得られます。
    [ポート 規則の追加/編集] ダイアログのスクリーンショット。[フィルタリング モード] セクションで複数のホストが選択されています。

NLB が ARR と連携し、アクティブ/アクティブ モードで動作するように正しく構成されました。

シナリオ 2: ホスト名アフィニティを使用した共有ホスティング

このシナリオでは、ARR のホスト名アフィニティ機能を利用して、共有ホスティング展開を有効にします。これによって次のことが可能となります。

  • 従来の共有ホスティング展開に伴う手動での管理とメンテナンスの手間が軽減します。
  • すべてのサーバー リソースを均等に利用しながら、既存のサーバー リソースを最大限に活かすことができます。
  • 環境を簡単にスケールアウトできます。
  • 追加容量を販売するビジネス機会が得られます。

共有ホスティングと ARR の詳細については、こちらのドキュメントを参照してください。

次の図は、ARR を使用した共有ホスティング環境の例です。

要求と応答のフローを示す図。

オプション 1: アクティブ/パッシブ

前述のように、アクティブ/パッシブ モードでは、通常、2 台の ARR サーバーがあり、一方のサーバーが要求を処理し、もう一方のサーバーはフェールオーバー サーバーとして待機します。 この構成は単一障害点をなくすことで高可用性を実現しますが、コンテンツ サーバーの集計容量は 1 台の ARR サーバーの最大容量が上限となるため、スケールアウト ソリューションではありません。

このセットアップでは、2 台の ARR サーバーが同じ方法で構成されるため、共有構成が使用されます。 NLB クラスターは、クラスター ノード内のいずれか 1 台のみ、トラフィックを受け入れるように構成されます。 これは、単一ホスト フィルタリング モードでクラスターの規則を構成することによって実現されます。 トラフィックを受け入れるノードは、NLB クラスター ノードのホストの優先順位設定によって決まります。 詳細については、「NLB 構成」を参照してください。

ARR のホスト名アフィニティ機能は、ホスト名に基づいて特定のサーバー (または RC 内のサーバーのグループ) に対する要求をアフィニタイズします。 ホスト名とコンテンツ サーバー間のアフィニティ マッピングを示すランタイム状態情報は、ARR サーバーのインスタンス内のメモリに格納されます。 ARR バージョン 1 リリースでは、複数の ARR サーバー間でこのランタイム状態を共有し、維持するために、Microsoft External Cache Version 1 for IIS が利用されます。 このシナリオの詳細は、こちらのドキュメントでご覧いただけます。

このシナリオは、ARR バージョン 1 リリースで完全にサポートされます。

ARR 構成

手順 1: ホスト名アフィニティを使用した共有ホスティング用に ARR を構成する

  • こちらのドキュメントの手順に従って、共有ホスティング用に ARR のホスト名アフィニティ機能を構成します。

手順 2: External Cache を有効にして構成する。

  • こちらのドキュメントの手順に従って、External Cache を有効にして構成します。

NLB 構成

NLB の構成は、次の手順に分けられます。

  1. NLB 機能をインストールします。
  2. ARR 用の NLB クラスターを作成します。
  3. アクティブ/パッシブ展開用に NLB を構成します。

NLB 機能をインストールする: [こちら](achieving-high-availability-and-scalability-arr-and-nlb.md#Install NLB features)のドキュメントを参照してください。

ARR 用の NLB クラスターを作成する: [こちら](achieving-high-availability-and-scalability-arr-and-nlb.md#Create NLB cluster for ARR)のドキュメントを参照してください。

アクティブ/パッシブ展開用に NLB を構成する: [こちら](achieving-high-availability-and-scalability-arr-and-nlb.md#Configure NLB for active/passive)のドキュメントを参照してください。

オプション 2: アクティブ/アクティブ (ARR)

アクティブ/アクティブ モードでは、2 台以上の ARR サーバーを使用できます。 この構成は、高可用性のみを実現するアクティブ/パッシブ モードとは異なり、高可用性とスケーラビリティの両方を実現します。 複数の ARR サーバーが同じ方法で構成されるため、共有構成が使用されます。 すべての ARR サーバーを同時に利用するために、NLB は複数ホスト モードで構成します。 前述のように、ホスト名とコンテンツ サーバー間のアフィニティ マッピングを示すランタイム状態情報は、ARR サーバーのインスタンス内のメモリに格納されます。 この情報を複数の ARR サーバー間で共有するために、Microsoft External Cache for IIS が使用されます。 External Cache の詳細については、このドキュメントを参照してください。

ARR 構成

アクティブ/アクティブの ARR 構成は、アクティブ/パッシブの場合と同じです。 主な違いは、NLB の構成方法です。

手順 1: ホスト名アフィニティを使用した共有ホスティング用に ARR を構成する

  • こちらのドキュメントの手順に従って、共有ホスティング用に ARR のホスト名アフィニティ機能を構成します。

手順 2: External Cache を有効にして構成する。

  • こちらのドキュメントの手順に従って、External Cache を有効にして構成します。

NLB 構成

NLB の構成は、次の手順に分けられます。

  1. NLB 機能をインストールします。
  2. ARR 用の NLB クラスターを作成します。
  3. アクティブ/アクティブ展開用に NLB を構成する。

NLB 機能をインストールする: [こちら](achieving-high-availability-and-scalability-arr-and-nlb.md#Install NLB features)のドキュメントを参照してください。

ARR 用の NLB クラスターを作成する: [こちら](achieving-high-availability-and-scalability-arr-and-nlb.md#Create NLB cluster for ARR)のドキュメントを参照してください。

アクティブ/アクティブ展開用に NLB を構成する: [こちら](achieving-high-availability-and-scalability-arr-and-nlb.md#Configure NLB for active/active)のドキュメントを参照してください。 この ARR シナリオでは、NLB のアフィニティを使用しないことをお勧めします。

まとめ

このホワイト ペーパーでは、複数の ARR サーバーを展開し、NLB を使用して高可用性とスケーラビリティを実現する、主に 2 つの ARR シナリオを見てきました。

付録

付録 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 ドキュメント