高可用性とスケーラビリティの実現 - 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 の展開を示したものです。
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 の展開先と同じサーバーで有効となり、ネットワーク スタック上の異なるレベルで動作します。
シナリオ 1: HTTP ベースのルーティングと負荷分散
HTTP ベースのルーティングと負荷分散のシナリオでは、次のような 3 層展開アーキテクチャが可能になります。
- 第 1 層 (Web): 静的コンテンツを処理すると共に、それ以外の動的要求を第 2 層サーバーにルーティングして負荷分散するという 2 つの目的を果たします。
- 第 2 層 (アプリケーション): ビジネス ロジックを利用する動的コンテンツを処理します。
- 第 3 層 (データ): データを格納します。
この 3 層展開の図を次に示します。
上の例は、静的コンテンツと動的コンテンツを区別するルーティング規則を示していますが、プレゼンテーション要求と 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 の構成は、次の手順に分けられます。
- NLB の機能をすべての ARR サーバーにインストールします。
- ARR 用の NLB クラスターを作成します。
- アクティブ/パッシブ展開用に NLB を構成します。
NLB の機能をすべての ARR サーバーにインストールする
- サーバー マネージャーを開きます。
- [機能] を展開します。
- [機能の追加] をクリックします。
- 機能の追加ウィザードで、[ネットワーク負荷分散] を選択します。
- [インストール] をクリックして、NLB 機能のインストールを確定します。
- NLB 機能が正常にインストールされたことを確認します。
- すべての ARR サーバーで上記の手順を繰り返します。
- NLB が ARR サーバーのすべてのインスタンスにインストールされていることを確認します。
- [スタート] > [すべてのプログラム] > [管理ツール] に移動し、[ネットワーク負荷分散マネージャー] を開きます。
- [ネットワーク負荷分散クラスター] を右クリックし、[新しいクラスター] を選択します。
- [新しいクラスター] ダイアログ ボックスの [ホスト] ボックスに、いずれかの ARR サーバーのサーバー アドレスを入力します。 複数のインターフェイスがある場合は、NLB クラスターを作成するサーバー アドレスを入力します。
- アクティブ/パッシブ モード (NLB の単一ホスト モード) では、フェールオーバーの順序が優先順位によって決まります。 既定では、優先度 1 のサーバーがアクティブ ノードです。
- クラスターの IP (仮想 IP アドレス) が必要です。 [追加] をクリックします。クライアントは、この IP アドレスとの間で通信を行います。
- 仮想 IP アドレスを入力し、[OK] をクリックします。
- 次へ をクリックします。
- 既定の値を受け入れる。 詳細については、付録を参照してください。
- [完了] クリックして、NLB クラスターの作成を完了します。
- NLB クラスターが作成されたら、クラスターにメンバーを追加できます。 以降の手順は、追加したすべてのメンバー サーバーで行います。 ネットワーク負荷分散マネージャーで、新しく選択したクラスターを右クリックし、[ホストをクラスターに追加] を選択します。
- 追加するメンバーのサーバー アドレスを入力します。 複数のインターフェイスがある場合は、NLB クラスターで使用するインターフェイスを選択します。
- 優先順位の割り当ては相互排他的です。クラスター内のメンバー サーバー間で重複しないよう注意してください。 アクティブ/パッシブ モード (NLB の単一ホスト モード) では、フェールオーバーの順序が優先順位によって決まります。
- [完了] をクリックして、クラスターにメンバー サーバーを追加します。
- [Network Load Balancer Manager](ネットワーク ロード バランサー マネージャー) の外観は次のようになっています。
- アクティブ/パッシブ展開用に NLB を構成するには、[ネットワーク負荷分散マネージャー] でクラスターを右クリックし、[クラスターのプロパティ] を選択します。 [ポートの規則] タブをクリックします。クリックして 編集します。
- [単一ホスト] を選択し、[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 の構成は、次の手順に分けられます。
- NLB の機能をすべての ARR サーバーにインストールします。
- ARR 用の NLB クラスターを作成します。
- アクティブ/アクティブ展開用に 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 を構成するには、[ネットワーク負荷分散マネージャー] でクラスターを右クリックし、[クラスターのプロパティ] を選択します。 [ポートの規則] タブをクリックします。クリックして 編集します。
- [複数ホスト] を選択します。 アフィニティ設定で [なし] を選択します。 前述のように、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 の構成は、次の手順に分けられます。
- NLB 機能をインストールします。
- ARR 用の NLB クラスターを作成します。
- アクティブ/パッシブ展開用に 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 の構成は、次の手順に分けられます。
- NLB 機能をインストールします。
- ARR 用の NLB クラスターを作成します。
- アクティブ/アクティブ展開用に 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 |
NLB Server Core のインストラクション:
- NLB 機能のインストール:
https://download.microsoft.com/download/6/3/5/6350896f-1e08-440b-9f24-d50f5e9b2390/ServerCoredeepdive.ppt
- NLB 機能のインストール:
NLB と SSL:
その他の NLB リンク:
- https://technet.microsoft.com/library/cc782694.aspx
- https://technet.microsoft.com/library/cc778263.aspx
https://support.microsoft.com/kb/323437
https://support.microsoft.com/kb/890159
- https://blogs.msdn.com/clustering