Application Request Routing を使用した HTTP 負荷分散

公開日: 2008 年 7 月 2 日 (作業者: pharr (英語))

更新日: 2009 年 5 月 12 日 (作業者: pharr (英語))

概要

このトピックでは、HTTP 要求の負荷分散を実行して、高い可用性とスケーラビリティを実現するように、Application Request Routing を構成する手順について説明しています。また、このチュートリアルでは、Application Request Routing によるコンテンツ サーバーの健常性監視の方法、およびクライアントからコンテンツ サーバーへの要求のアフィニティ化の方法に関するコア機能についても、いくつか紹介しています。

目標

以下に示すように、Application Request Routing を使用して、複数のコンテンツ サーバー間で HTTP 要求の負荷分散を実行すること。

Ee886279.topo(ja-jp,TechNet.10).jpg

必要条件

このチュートリアルの必要条件は次のとおりです。

  • Windows 2008 (任意の SKU) 以降の IIS 7.0。
  • Microsoft Application Request Routing Version 1 および依存モジュール。
  • 運用中のサイトとアプリケーションが含まれているコンテンツ サーバー (少なくとも 2 台)。

Application Request Routing Version 1 をインストールしていない場合は、以下からダウンロードして入手できます。

Application Request Routing をインストールするには、このドキュメントに記載されている手順に従います。

もう 1 つの必要条件として、「 Application Request Routing サーバー グループの定義と構成 」に記載されている手順を使用し、サーバー ファームの定義と構成を済ませていることが必要です。

手順 1 – URL 書き換え規則を確認する

Application Request Routing サーバー グループの定義と構成 」に記載されている手順を使用して、サーバー ファームが作成されていることを前提に、簡単な負荷分散シナリオ用の URL 書き換え規則が既に作成されているものとします。

UI を使用して、URL 書き換え規則を確認するには

1.  IIS マネージャーを起動します。

2.  「Application Request Routing サーバー グループの定義と構成」で作成されたサーバー ファーム (myServerFarm) を選択します。

3.  以下のアイコンが表示されます。

Ee886279.arr icons(ja-jp,TechNet.10).jpg

4.  [ルーティング規則] をダブルクリックします。

5.  [URL 書き換えを使用して受信要求を検査する] チェック ボックスがオンになっていることを確認します。

Ee886279.routingrules(ja-jp,TechNet.10).jpg

6.  SSL オフロードは、既定で有効になっています。この機能を有効にすると、クライアントから ARR サーバーに HTTPS 要求が送信される場合でも ARR サーバーとアプリケーション サーバー間の通信がすべてクリア テキストで実行されます。ARR サーバーとアプリケーション サーバーが、信頼されたネットワーク内 (同じデータ センター内など) で展開される場合は、SSL オフロードを有効にしてもセキュリティが損なわれることはありません。また、この機能を有効にすると、アプリケーション サーバー上のサーバー リソースが要求および応答の暗号化と復号化にサイクルを費やずに済むので、サーバー リソースの最適化がさらに促進されます。

SSL オフロードを無効にするには、[SSL オフロードを有効にする] チェック ボックスをオフにして、[適用] をクリックします。

7.  ブラウザーを開き、ARR サーバーに複数の要求を送信します。

8.  要求の負荷分散がアプリケーション サーバー間で均等に実行されていることを確認するには、[myServerFarm] を選択し、[監視と管理] をダブルクリックします。

Ee886279.arr icons(ja-jp,TechNet.10).jpg

9.  ダッシュボード ビューで、要求が均等に分散されていることを確認します。

Ee886279.dashboard(ja-jp,TechNet.10).jpg

 

コマンド ラインを使用して、URL 書き換え規則を確認するには

1.  管理者権限で、コマンド プロンプトを開きます。

2.  %windir%\system32\inetsrv に移動します。

3.  URL 書き換え規則が正しく作成されていることを確認するには、「appcmd.exe list config -section:system.webServer/rewrite/globalRules」と入力します。次のような globalRules が返されます。

<system.webServer>
  <rewrite>
    <globalRules>
      <rule name="ARR_myServerFarm_loadbalance" patternSyntax="Wildcard" stopProcessing="true">
        <match url="*" />
        <conditions>
        </conditions>
        <action type="Rewrite" url="http://myServerFarm/{R:0}" />
      </rule>
    </globalRules>
  </rewrite>
</system.webServer> 

4.  SSL オフロードを無効にするには、最初に次の URL 書き換え規則をすべて削除します。

  • appcmd.exe clear config -section:system.webServer/rewrite/globalRules

     次に、以下のように、HTTPS トラフィックを転送する URL 書き換え規則を作成します。具体的にこの規則では、受信要求が HTTPS の場合、ARR は SSL を使用して要求を転送します。

  • appcmd.exe set config  -section:system.webServer/rewrite/globalRules /+"[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True']" /commit:apphost

  • appcmd.exe set config  -section:system.webServer/rewrite/globalRules /[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].match.url:"*"  /commit:apphost

  • appcmd.exe set config  -section:system.webServer/rewrite/globalRules /+"[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].conditions.[input='{HTTPS}',pattern='On']" /commit:apphost

  • appcmd.exe set config  -section:system.webServer/rewrite/globalRules /[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].action.type:"Rewrite" /[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].action.url:"https://myServerFarm/{R:0}"  /commit:apphost

      最後に、以下のように、HTTP トラフィックをアプリケーション サーバーにクリア テキストで転送する URL 書き換え規則を作成します。

  • appcmd.exe set config  -section:system.webServer/rewrite/globalRules /+"[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True']" /commit:apphost

  • appcmd.exe set config  -section:system.webServer/rewrite/globalRules /[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].match.url:"*"  /commit:apphost

  • appcmd.exe set config  -section:system.webServer/rewrite/globalRules /[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].action.type:"Rewrite" /[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].action.url:"http://myServerFarm/{R:0}"  /commit:apphost

5.  SSL オフロードを無効にした状態で、URL 書き換え規則が正しく作成されていることを確認するには、「appcmd.exe list config -section:system.webServer/rewrite/globalRules」と入力します。次のような globalRules が返されます。

<system.webServer>
  <rewrite>
    <globalRules>
      <rule name="ARR_myServerFarm_loadbalance_SSL" patternSyntax="Wildcard" stopProcessing="true">
        <match url="*" />
        <conditions>
          <add input="{HTTPS}" pattern="On" />
        </conditions>
        <action type="Rewrite" url="https://myServerFarm/{R:0}" />
      </rule>
      <rule name="ARR_myServerFarm_loadbalance" patternSyntax="Wildcard" stopProcessing="true">
        <match url="*" />
        <conditions>
        </conditions>
        <action type="Rewrite" url="http://myServerFarm/{R:0}" />
      </rule>
    </globalRules>
  </rewrite>
</system.webServer> 

手順 2 – 健常性チェックの監視を構成する

Application Request Routing では、次の 2 つの方法で、コンテンツ サーバーの健常性が監視されます。

  • 現状のトラフィックの監視
  • 明示的な URL テストの使用

Application Request Routing に対して要求が行われると、既定では、現状のトラフィック テストが自動的に実行されます。明示的な URL テストは、現状のトラフィック テストと組み合わせて使用できる追加のテストです。このセクションでは、明示的な URL テストの構成についてチュートリアルを行います。

UI を使用して、健常性チェックの監視を構成するには

1.   URL テストには、テストの対象となる特定の URL が必要です。この要件を満たすには、メモ帳を使用して、"I am healthy." という文が含まれる healthCheck.txt という名前のテキスト ファイルを作成します。

2.   healthCheck.txt ファイルをアプリケーション サーバーに置きます。

3.   ブラウザーでページを開き、healthCheck.txt が正しくレンダリングされていることを確認します。

4.  IIS マネージャーで、サーバー ファーム myServerFarm を選択すると、以下のアイコンが表示されます。

  Ee886279.arr icons(ja-jp,TechNet.10).jpg

5.  [健常性テスト] をダブルクリックします。

Ee886279.healthtest(ja-jp,TechNet.10).jpg

6.  [URL] 値に「http://(サーバー名または ARR サーバーの FQDN)/healthCheck.txt」と入力します。

7.  [応答の検索] 値に「healthy」と入力します。応答の検索は、応答の本文に想定される文字列が含まれていることを確認するオプションのテストです。この場合、healthCheck.txt には "I am healthy." が文中に含まれているので、応答の検索で "healthy" という単語が検索されます。

8.  [適用] をクリックして、変更を保存します。

9.  健常性チェックの監視機能を確認するには、いずれかのアプリケーション サーバー上の監視対象のサイトを停止します。[間隔 (秒)] 値が 30 秒に設定されているので、次回の健常性チェックまで 30 秒間待機します。

10.  30 秒間待機したら、ARR サーバーに複数の要求を送信します。

11. すべての要求が正常なサーバーに送信されていることを確認するには、[監視と管理] をダブルクリックし、F5 キーを押してダッシュボードを更新します。ランタイム統計はリセットされています。これは設計によるものです。必要に応じて、追加の要求を送信して、ダッシュボードを更新します。

Ee886279.dash-health(ja-jp,TechNet.10).jpg

12.  健常性の監視機能を使用して、正常でないサーバーが正常になったときに検出することもできます。この機能を確認するには、手順 9 で停止したサイトを起動します。ここでも、[間隔 (秒)] 値が 30 秒に設定されているので、次回の健常性チェックまで 30 秒間待機します。

13.  30 秒間待機したら、ARR サーバーに複数の要求を送信します。

14.   要求がサーバー間で均等に分散されていることを確認するには、IIS マネージャーでダッシュボードを更新します。ランタイム統計はリセットされています。これは設計によるものです。必要に応じて、追加の要求を送信して、ダッシュボードを更新します。

コマンド ラインを使用して、健常性チェックの監視を構成するには

1.  管理者権限で、コマンド プロンプトを開きます。

2.  %windir%\system32\inetsrv に移動します。

3.  URL を「http://(サーバー名または ARR サーバーの FQDN)/healthCheck.txt」に設定して、一致する文字列を "I am healthy." に指定するには、以下のコマンドを入力します。

  • appcmd.exe set config  -section:webFarms /[name='myServerFarm1'].applicationRequestRouting.healthCheck.url:"http://(サーバー名または ARR サーバーの FQDN)/healthCheck.txt " /[name='myServerFarm1'].applicationRequestRouting.healthCheck.responseMatch:"I am healthy."  /commit:apphost

手順 3 – クライアント アフィニティを構成する

Application Request Routing には、クライアント セッションの間、クライアントを Application Request Routing の背後にあるコンテンツ サーバーにマッピングするクライアント アフィニティ機能があります。この機能を有効にすると、負荷分散アルゴリズムはクライアントから送信される最初の要求に対してのみ適用されます。 これ以降、同じクライアントから送信される後続の要求はすべて、クライアント セッションの間、同じコンテンツ サーバーにルーティングされるようになります。この機能は、コンテンツ サーバーのアプリケーションがステートフルであり、セッションが集中管理されていないため、クライアントの要求を同じコンテンツ サーバーにルーティングする必要がある場合に役立ちます。

UI を使用して、クライアント アフィニティを構成するには

1.  IIS マネージャーを起動します。

2.  「Application Request Routing サーバー グループの定義と構成」で作成されたサーバー ファーム myServerFarm を選択します。

3.  以下のアイコンが表示されます。

Ee886279.arr icons(ja-jp,TechNet.10).jpg

4.  [サーバー アフィニティ] をダブルクリックします。

5.  クライアント アフィニティを有効にするには、[クライアント アフィニティ] チェック ボックスをオンにして、[適用] をクリックします。

Ee886279.affinity(ja-jp,TechNet.10).jpg

Application Request Routing では、Cookie を使用してクライアント アフィニティを有効にします。クライアント上で Cookie を設定するには、[Cookie 名] を使用します。つまり、クライアントは、クライアント アフィニティを正常に機能させるために Cookie を許可する必要があります。

6. クライアント アフィニティの機能を確認するには、ARR サーバーに複数の要求を送信します。IIS マネージャーで ([監視と管理]) ダッシュボードを更新します。クライアントがアフィニティ化される対象となるアプリケーション サーバーのいずれかに対してのみ、ランタイム統計が変更されていることを確認します。必要に応じて、追加の要求を送信して、ダッシュボードを更新する場合があります。

コマンド ラインを使用して、クライアント アフィニティを構成するには

1.  管理者権限で、コマンド プロンプトを開きます。

2.  %windir%\system32\inetsrv に移動します。

3.  クライアント アフィニティを有効にするには、以下のコマンドを入力します。

  • appcmd.exe set config  -section:webFarms /[name='myServerFarm1'].applicationRequestRouting.affinity.useCookie:"True"  /commit:apphost

手順 4 – 新しい接続を拒否する

サーバー ファーム環境からサーバーを削除する有効な方法は、新しい接続をサーバー上で拒否することです。Application Request Routing では、新しい接続を拒否するときに既存のセッションを継承するので、クライアント アフィニティ機能を運用している場合に適切な方法といえます。つまり、クライアントが、新しい接続を拒否しているサーバーに対してアフィニティ化されている場合、そのクライアントは引き続き同じサーバーにルーティングされるので、クライアントに影響が及ぶことはありません。ただし、新しいクライアントは、新しい接続を拒否しているサーバーにはルーティングされなくなります。

UI を使用して、新しい接続を拒否するには

1.  上記の手順 3 のセットアップを使用して、クライアントがアフィニティ化される対象となるサーバーを指定します。

2.  「Application Request Routing サーバー グループの定義と構成」で作成されたサーバー ファーム myServerFarm を選択します。

3.  以下のアイコンが表示されます。

Ee886279.arr icons(ja-jp,TechNet.10).jpg

4.  [監視と管理] をダブルクリックします。

5.  クライアントをアフィニティ化する対象となるサーバーを選択します。[操作] ウィンドウで、[新しい接続を拒否する] をクリックします。

6.  確認ダイアログ ボックスで、[はい] をクリックします。

Ee886279.click yes(ja-jp,TechNet.10).jpg

7. クライアントからの要求が引き続き、新しい接続を拒否しているアフィニティ化の対象となるサーバーにルーティングされていることを確認するには、ARR サーバーに複数の要求を送信します。IIS マネージャーで、ダッシュボードを更新します。クライアントがアフィニティ化される対象となるサーバーに対してのみ、ランタイム統計が変更されていることを確認します。必要に応じて、追加の要求を送信して、ダッシュボードを更新する場合があります。

8. 新しいクライアントが、新しい接続を拒否しているサーバーにルーティングされていないことを確認するには、ブラウザーを再起動して、Application Request Routing で設定した Cookie を削除します。

9. ARR サーバーに複数の要求を送信します。IIS マネージャーで、ダッシュボードを更新します。[使用可能] と表示されているサーバーに対してのみ、ランタイム統計が変更されていることを確認します。つまり、新しい接続を拒否しているサーバーのランタイム統計は変更されていないことを確認します。必要に応じて、追加の要求を送信して、ダッシュボードを更新する場合があります。

まとめ

これで、負荷を均等にスケールアウトして分散するように Application Request Routing のさまざまな設定が正常に構成されました。Application Request Routing を使用した高度なルーティング機能については、「Application Request Routing モジュールの使用」を参照してください。

関連コンテンツ

記事