IIS チーム別
概要
このトピックでは、高可用性とスケーラビリティを実現するために HTTP 要求を負荷分散するようにアプリケーション要求ルーティングを構成する手順について説明します。 また、このチュートリアルでは、アプリケーション要求ルーティングがコンテンツ サーバーの正常性を監視し、クライアントからコンテンツ サーバーへの要求をアフィニティ化する方法に関するいくつかの主要な機能についても説明します。
ゴール
次に示すように、アプリケーション要求ルーティングを使用して複数のコンテンツ サーバー間で HTTP 要求を負荷分散するには:
前提条件
このチュートリアルでは、次の前提条件が必要です。
- Windows 2008 (任意の SKU) 以降の IIS 7.0 以降。
- Microsoft アプリケーション要求ルーティング バージョン 1 と依存モジュール。
- 作業サイトとアプリケーションを持つ 2 つ以上のコンテンツ サーバー。
このドキュメントで説明されている手順に従って、アプリケーション要求ルーティングをインストールします。
もう 1 つの前提条件は、「 アプリケーション要求ルーティング (ARR) サーバー グループの定義と構成」で説明されている手順を使用して、リーダーがサーバー ファームを定義および構成していることです。
手順 1 - URL 書き換え規則を確認する
「 アプリケーション要求ルーティング (ARR) サーバー グループの定義と構成」で説明されている手順を使用してサーバー ファームが作成されている場合は、単純な負荷分散シナリオ用の URL 書き換え規則が既に作成されています。
UI を使用して URL 書き換えルールを確認するには:
- IIS マネージャーを起動します。
- アプリケーション要求ルーティング (ARR) サーバー グループの定義と構成で作成されたサーバー ファーム myServerFarm を選択します。
- 次のアイコンが表示されます。
- [ ルーティング規則] をダブルクリックします。
- [ URL 書き換えを使用して受信要求を検査する ] チェック ボックスがオンになっていることを確認します。
- SSL オフロードは既定で有効になっています。 この機能を有効にすると、クライアントから ARR サーバーへの HTTPS 要求であっても、ARR サーバーとアプリケーション サーバー間のすべての通信がクリア テキストで行われます。 ARR サーバーとアプリケーション サーバーの両方が、同じデータセンター内などの信頼されたネットワーク内に展開されている場合、SSL オフロードを有効にしてもセキュリティは犠牲になりません。 また、この機能を有効にすると、要求と応答の暗号化と復号化にサイクルを費やす必要がないため、アプリケーション サーバー上のサーバー リソースをさらに最大化するのに役立ちます。
SSL オフロードを無効にするには、[ SSL オフロードを有効にする ] チェック ボックスをオフにして、[ 適用] をクリックします。 - ブラウザーを開き、ARR サーバーにいくつかの要求を送信します。
- 要求がアプリケーション サーバー間で均等に負荷分散されていることを確認するには、 myServerFarm を選択します。
[監視と管理] をダブルクリックします。
- ダッシュボード ビューで、要求が均等に分散されていることを確認します。
コマンド ラインを使用して URL 書き換え規則を確認するには:
管理者特権でコマンド プロンプトを開きます。
%windir%\system32\inetsrvに移動します。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>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:apphostSSL オフロードを無効にして 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 - ヘルスチェック監視の設定を行う
アプリケーション要求ルーティングは、次の 2 つの方法でコンテンツ サーバーの正常性を監視します。
- ライブ トラフィック経由
- 明示的な URL テストを使用する
ライブ トラフィック テストは、アプリケーション要求ルーティングに対して要求が行われると、既定で自動的に実行されます。 明示的な URL テストは、ライブ トラフィック テストで使用できる追加のテストです。 このセクションでは、明示的な URL テストを構成する手順について説明します。
UI を使用して正常性チェックの監視を構成するには:
- URL テストには、テストする特定の URL が必要です。 この要件を満たすために、メモ帳を使用して、"I am healthy" という文を含む healthCheck.txt という名前のテキスト ファイルを作成します。
- healthCheck.txt ファイルをアプリケーション サーバーに配置します。
- ブラウザーでページを開いて 、healthCheck.txt が正しくレンダリングされていることを確認します。
- IIS マネージャーで、サーバー ファーム myServerFarm を選択します。 次のアイコンが表示されます。
- [ 正常性テスト] をダブルクリックします。
-
http://(server name or FQDN of ARR server)/healthCheck.txt値として「」と入力します。 - 応答の一致値として正常と入力します。 応答の一致は、応答の本文に予期される文字列が含まれていることを確認するためのオプションのテストです。 この場合、 healthCheck.txt には "I am healthy." という文が含まれるため、応答の一致は "正常" という単語を検索します。
- [ 適用 ] をクリックして変更を保存します。
- 正常性チェック監視の機能を確認するには、いずれかのアプリケーション サーバーで監視対象サイトを停止します。 Interval (seconds) 値は 30 秒に設定されているため、次の正常性チェックを 30 秒間待ちます。
- 30 秒間待機した後、複数の要求を ARR サーバーに送信します。
- すべての要求が正常なサーバーに送信されることを確認するには、[ 監視と管理] をダブルクリックし、F5 キーを使用してダッシュボードを更新します。 ランタイム統計がリセットされていることに注意してください。 これは仕様によるものです。 必要に応じて、追加の要求を送信し、ダッシュボードを更新することができます。
- 正常性の監視は、異常なサーバーが正常になったときを検出するためにも使用されます。 この機能を確認するには、手順 9 で停止したサイトを開始します。 繰り返しになりますが、 間隔 (秒) の値は 30 秒に設定されているため、次の正常性チェックを 30 秒間待ちます。
- 30 秒間待機した後、複数の要求を ARR サーバーに送信します。
- 要求がサーバー間で均等に分散されていることを確認するには、IIS マネージャーでダッシュボードを更新します。 ランタイム統計がリセットされていることに注意してください。 これは仕様によるものです。 必要に応じて、追加の要求を送信し、ダッシュボードを更新することができます。
コマンド ラインを使用して正常性チェックの監視を構成するには:
管理者特権でコマンド プロンプトを開きます。
%windir%\system32\inetsrvに移動します。http://(server name or FQDN of ARR server)/healthCheck.txtに "I am healthy." を一致する文字列として設定するには、次のように入力します。appcmd.exe set config -section:webFarms /[name='myServerFarm1'].applicationRequestRouting.healthCheck.url:"http://(server name or FQDN of ARR server)/healthCheck.txt " /[name='myServerFarm1'].applicationRequestRouting.healthCheck.responseMatch:"I am healthy." /commit:apphost
手順 3 - クライアント アフィニティを構成する
アプリケーション要求ルーティングは、クライアント セッションの間、アプリケーション要求ルーティングの背後にあるコンテンツ サーバーにクライアントをマップするクライアント アフィニティ機能を提供します。 この機能を有効にすると、負荷分散アルゴリズムはクライアントからの最初の要求にのみ適用されます。 その時点から、同じクライアントからの後続のすべての要求は、クライアント セッションの間、同じコンテンツ サーバーにルーティングされます。 この機能は、セッション管理が一元化されていないために、コンテンツ サーバー上のアプリケーションがステートフルであり、クライアントの要求を同じコンテンツ サーバーにルーティングする必要がある場合に便利です。
UI を使用してクライアント アフィニティを構成するには:
- IIS マネージャーを起動します。
- アプリケーション要求ルーティング (ARR) サーバー グループの定義と構成で作成されたサーバー ファーム myServerFarm を選択します。
- 次のアイコンが表示されます。
- [サーバー アフィニティ] をダブルクリックします。
- クライアント アフィニティを有効にするには、[ クライアント アフィニティ ] チェック ボックスをオンにし、[ 適用] をクリックします。
アプリケーション要求ルーティングでは、Cookie を使用してクライアント アフィニティを有効にします。 Cookie 名は、クライアントで Cookie を設定するために使用されます。 つまり、クライアントアフィニティが正常に機能するためには、クライアントがクッキーを受け入れる必要があります。 - クライアント アフィニティの機能を確認するには、ARR サーバーにいくつかの要求を送信します。 IIS マネージャー (監視と管理) でダッシュボードを更新します。 クライアントが紐付けられている 1 つのアプリケーションサーバーについてのみランタイム統計が変更されていることを確認します。 必要に応じて、追加の要求を送信し、ダッシュボードを更新することができます。
コマンド ラインを使用してクライアント アフィニティを構成するには:
管理者特権でコマンド プロンプトを開きます。
%windir%\system32\inetsrvに移動します。クライアント アフィニティを有効にするには、次のように入力します。
appcmd.exe set config -section:webFarms /[name='myServerFarm1'].applicationRequestRouting.affinity.useCookie:"True" /commit:apphost
手順 4 - 新しい接続を禁止する
サーバーで新しい接続を禁止することは、サーバーファーム環境からサーバーを取り出す適切な方法です。 クライアント アフィニティ機能が使用されている場合は、新しい接続を禁止するときにアプリケーション要求ルーティングで既存のセッションが優先されるため、意味があります。 つまり、クライアントが新しい接続を禁止しているサーバーとアフィニティが設定されている場合、クライアントは引き続き同じサーバーにルーティングされるため、クライアントに影響はありません。 ただし、新しい接続を許可していないサーバーに新しいクライアントはルーティングされません。
UI を使用して新しい接続を禁止するには:
- ステップ3のセットアップを使用して、クライアントと結びついているサーバーを特定します。
- アプリケーション要求ルーティング (ARR) サーバー グループの定義と構成で作成されたサーバー ファーム myServerFarm を選択します。
- 次のアイコンが表示されます。
- [監視と管理] をダブルクリックします。
- クライアントが指定されているサーバーを選択します。 [操作] ウィンドウで、[新しい接続を許可しない] をクリックします。
- 確認ダイアログ ボックスで、[ はい] をクリックします。
- クライアントからの要求がアフィニティサーバーにルーティングされ続け、新しい接続が許可されていないことを確認するには、ARR サーバーに複数の要求を送信します。 IIS マネージャーでダッシュボードを更新します。 ランタイム統計が、クライアントがアフィニティ化されているサーバーに対してのみ変更されていることを確認します。 必要に応じて、追加の要求を送信し、ダッシュボードを更新することができます。
- 新しい接続を禁止しているサーバーに新しいクライアントがルーティングされていないことを確認するには、ブラウザーを閉じて再起動することで、アプリケーション要求ルーティングによって設定された Cookie を削除します。
- ARR サーバーに複数の要求を送信します。 IIS マネージャーでダッシュボードを更新します。 ランタイム統計が、使用可能なサーバーに対してのみ変更されていることを確認 します。 具体的には、新しい接続を許可していないサーバーのランタイム統計が変更されていないことを確認します。 必要に応じて、追加の要求を送信し、ダッシュボードを更新することができます。
まとめ
これで、スケールアウトして負荷を均等に分散するように、アプリケーション要求ルーティングの設定が多数正常に構成されました。 アプリケーション要求ルーティングを使用したより高度なルーティング機能については、「 アプリケーション要求ルーティングの使用」を参照してください。