Azure で負荷分散サービスを使用する
はじめに
Microsoft Azure では、ネットワーク トラフィックの分散や負荷分散の方法を管理するための複数のサービスを利用できます。 これらのサービスは、ニーズに応じて、個別に使用できるほか、それらのメソッドを組み合わせて最適なソリューションをビルドすることができます。
このチュートリアルでは、最初に顧客のユース ケースを定義し、Azure の負荷分散ポートフォリオであるTraffic Manager、Application Gateway、Load Balancer を使用したシナリオの作成方法を説明します。 その後、地理的に冗長性を持たせ、トラフィックを VM に分散し、さまざまな種類のリクエストを管理できるデプロイを作成する手順を詳しく説明します。
概念レベルでは、これらの各サービスは、負荷分散の階層において個別の役割を果たします。
Traffic Manager には、グローバルな DNS グローバル負荷分散機能が備わっています。 これは受信 DNS 要求を調べ、ユーザーが選択したルーティング ポリシーに従って、正常なエンドポイントを使用して応答できます。 ルーティング方法のオプションは次のとおりです。
- 待機時間の点で最も近いエンドポイントに要求元を送信するパフォーマンスのルーティング。
- すべてのトラフィックを 1 つのエンドポイントに送信し、その他のエンドポイントはすべてバックアップとする優先順位によるルーティング。
- 各エンドポイントに割り当てた重み付けに基づいてトラフィックを分散する、重み付けラウンド ロビンによるルーティング。
- ユーザーの地理的な場所に基づいてアプリケーション エンドポイントにトラフィックを分散する地理ベースのルーティング。
- ユーザーのサブネット (IP アドレス範囲) に基づいてアプリケーション エンドポイントにトラフィックを分散するサブネット ベースのルーティング。
- 1 回の DNS 応答で複数のアプリケーション エンドポイントの IP アドレスを送信できる複数値ルーティング。
クライアントは、Traffic Manager によって返されたエンドポイントに直接接続します。 Azure Traffic Manager は、エンドポイントに異常が発生したことを検出すると、クライアントを別の正常なインスタンスに誘導します。 サービスについて詳しくは、Azure Traffic Manager のドキュメントをご覧ください。
Application Gateway は、アプリケーション配信コントローラー (ADC) をサービスとして提供することで、さまざまなレイヤー 7 負荷分散機能をアプリケーションで利用できるようにします。 これにより、顧客は CPU 集中型の TLS 終端を Application Gateway にオフロードすることによって Web ファームの生産性を最適化できます。 着信トラフィックのラウンド ロビン分散、Cookie ベースのセッション アフィニティ、URL パス ベースのルーティング、単一の Application Gateway の背後で複数の Web サイトをホストする機能など、その他のレイヤー 7 ルーティング機能も用意されています。 Application Gateway は、インターネット接続ゲートウェイ、または内部的にのみ使用されるゲートウェイのいずれかとして構成できるほか、この両方を組み合わせて使用することも可能です。 Application Gateway は Azure によって完全に管理され、非常にスケーラブルで、高い可用性を備えています。 管理しやすいように診断機能とログ機能が豊富に用意されています。
ロード バランサーは、Azure SDN スタックの重要な構成要素であり、すべての UDP と TCP プロトコル向けの高パフォーマンス、低待機時間のレイヤー 4 負荷分散サービスを備えています。 受信接続と送信接続を管理します。 負荷分散されるパブリックおよび内部のエンドポイントを構成したり、TCP を使用して受信接続をバックエンド プールの送信先にマッピングする規則や、サービスの可用性を管理するための HTTP の正常性プローブ オプションを定義したりできます。
シナリオ
このシナリオの例では、イメージと動的に表示される Web ページの 2 種類のコンテンツを提供する簡単な Web サイトを使用します。 Web サイトには地理的な冗長性が必要であり、最も近い場所にいる (待機時間が最短の) ユーザーにサービスを提供する必要があります。 アプリケーション開発者は、/images/* のパターンに一致する URL を、Web ファームの残りではなく、VM の専用プールから提供することに決めました。
さらに、動的コンテンツを提供する既定の VM プールは、高可用性クラスターでホストされているバックエンドのデータベースと通信する必要があります。 デプロイ全体は Azure Resource Manager を通じて設定されます。
Traffic Manager、Application Gateway、Load Balancer を使うと、この Web サイトで次のような設計の目標を達成できます。
- 複数の地理的な冗長性:1 つのリージョンがダウンしたときに、Traffic Manager によって、最も近いリージョンにトラフィックがシームレスにルーティングされます。アプリケーション所有者による操作は必要ありません。
- 待機時間の短縮:顧客は Traffic Manager によって最寄りのリージョンに自動的に誘導されるため、Web ページのコンテンツを要求したときの待機時間が短縮されます。
- 独立したスケーラビリティ:Web アプリケーションのワークロードはコンテンツの種類によって分けられるため、アプリケーション所有者は、要求ワークロードを互いに影響を与えることなく拡張できます。 Application Gateway では、指定した規則とアプリケーションの正常性に基づいて、適切なプールにトラフィックをルーティングできます。
- 内部負荷分散:Load Balancer が高可用性クラスターの前に配置されているため、データベースのアクティブで正常なエンドポイントのみがアプリケーションに公開されます。 さらに、データベース管理者は、フロントエンド アプリケーションから独立してアクティブとパッシブのレプリカをクラスター全体に分散させることによって、ワークロードを最適化できます。 ロード バランサーは接続を高可用性クラスターに提供し、正常なデータベースのみが接続要求を受け取るようにします。
次の図は、このシナリオのアーキテクチャを示します。
注意
この例は、Azure が提供する多数の負荷分散サービスの 1 つの例に過ぎません。 Traffic Manager、Application Gateway、ロード バランサーは、負荷分散のニーズに合わせて組み合わせて使用できます。 たとえば、TLS オフロードまたはレイヤー 7 の処理が必要ない場合は、Application Gateway の代わりに Load Balancer を使用できます。
負荷分散スタックの設定
手順 1:Traffic Manager プロファイルの作成
Azure Portal で、 [リソースの作成]>[ネットワーク]>[Traffic Manager プロファイル]>[作成] の順にクリックします。
次の基本情報を入力します。
- Name:Traffic Manager プロファイルに DNS プレフィックス名を指定します。
- ルーティング方法:トラフィック ルーティング方法のポリシーを選択します。 この方法の詳細については、「Traffic Manager のトラフィック ルーティング方法について」をご覧ください。
- サブスクリプション:プロファイルが含まれるサブスクリプションを選択します。
- [リソース グループ] :プロファイルが含まれるリソース グループを選択します。 新しいリソース グループまたは既存の リソース グループを選択できます。
- リソース グループの場所:Traffic Manager サービスは、1 つの場所に固定されず、グローバルです。 ただし、Traffic Manager プロファイルに関連付けられたメタデータが存在するグループのリージョンを指定する必要があります。 この場所は、プロファイルの実行時の可用性については影響ありません。
[作成] をクリックすると、Traffic Manager プロファイルが生成されます。
手順 2:Application Gateway を作成する
Azure Portal の左側のウィンドウで、 [リソースの作成]>[ネットワーク]>[Application Gateway] の順にクリックします。
Application Gateway に関する次の基本情報を入力します。
- Name:アプリケーション ゲートウェイの名前。
- SKU サイズ:Application Gateway のサイズ。S、M、L のオプションを使用できます。
- インスタンス数:インスタンスの数。2 ~ 10 の値。
- [リソース グループ] :Application Gateway を保持するリソース グループ。 既存のリソース グループまたは新しいリソース グループを使用できます。
- [場所] :Application Gateway のリージョン。リソース グループと同じ場所にします。 仮想ネットワークとパブリック IP はゲートウェイと同じ場所に存在する必要があるため、この場所は重要です。
[OK] をクリックします。
Application Gateway の仮想ネットワーク、サブネット、フロントエンド IP、およびリスナーの構成を定義します。 このシナリオでは、フロント エンド IP アドレスは [パブリック] に設定されているため、後で Traffic Manager プロファイルにエンドポイントとして追加できます。
Note
HTTPS を使う場合は、[リスナー] タブの [プロトコル] で [HTTPS] を選びます。既定のオプションは HTTP です。 SSL 証明書を作成して割り当てる必要もあります。 詳しくは、SSL に関する Application Gateway のチュートリアルをご覧ください。
Application Gateway の URL ルーティングを構成する
バックエンド プールを選択するときは、パスベースの規則で構成される Application Gateway では、ラウンド ロビン分散だけでなく、要求 URL のパスのパターンを使用します。 このシナリオでは、"/images/*" 含む URL を画像サーバー プールに転送するための、パス ベースのルールを追加します。 アプリケーション ゲートウェイ用のパス ベースの URL ルーティングの構成について詳しくは、アプリケーション ゲートウェイのパスベース ルールの作成に関する記事をご覧ください。
リソース グループから、前のセクションで作成した Application Gateway のインスタンスに移動します。
[設定] で [バックエンド プール] を選択し、 [追加] を選択して Web 層のバックエンド プールに関連付ける VM を追加します。
バックエンド プールの名前と、プールに存在するすべてのマシンの IP アドレスを入力します。 このシナリオでは、仮想マシンの 2 つのバックエンド サーバー プールを接続します。
Application Gateway の [設定] で、 [Rules (規則)] を選択し、 [パス ベース] ボタンをクリックして規則を追加します。
次の情報を入力して規則を構成します。
基本設定:
- Name:ポータルでアクセス可能な規則のフレンドリ名です。
- リスナー: 規則で使用するリスナーです。
- 既定のバックエンド プール:既定の規則で使用するバック エンド プールです。
- 既定の HTTP 設定:既定の規則で使用する HTTP 設定です。
パス ベースの規則:
- Name:パスベースの規則のフレンドリ名です。
- パス:トラフィックの転送に使用するパスの規則です。
- バックエンド プール:この規則で使用するバックエンド プールです。
- HTTP 設定:この規則で使用する HTTP 設定です。
重要
パス:有効なパスはスラッシュ "/" で始める必要があります。 ワイルドカード "*" は末尾にのみ使用できます。 有効な例としては、/xyz、/xyz*、または /xyz/* があります。
手順 3:Traffic Manager のエンドポイントに Application Gateway を追加する
このシナリオでは、Traffic Manager を、別のリージョンにある Application Gateway (前の手順で構成したもの) に接続します。 Application Gateway の構成は終わっているため、次の手順では Traffic Manager プロファイルに Application Gateway を接続します。
Traffic Manager プロファイルを開きます。 そのためには、リソース グループを検索するか、 [すべてのリソース] で Traffic Manager プロファイルの名前を検索します。
左側のウィンドウで [エンドポイント] を選択し、 [追加] をクリックしてエンドポイントを追加します。
次の情報を入力してエンドポイントを作成します。
- [種類] :負荷分散するエンドポイントの種類を選択します。 このシナリオでは、前に構成した Application Gateway インスタンスにそれを接続するため、[Azure エンドポイント] を選びます。
- Name:エンドポイントの名前を入力します。
- ターゲット リソースの種類: [パブリック IP アドレス] を選択し、 [ターゲット リソース] で、前に構成した Application Gateway のパブリック IP を選択します。
これで、Traffic Manager プロファイルの DNS を使ってそれにアクセスして、セットアップをテストできます (この例では、
TrafficManagerScenario.trafficmanager.net
)。 要求の再送信や、異なるリージョンに作成した VM の起動または VM と Web サーバーの停止を行うことができます。 Traffic Manager プロファイルを異なる設定に変更してテストすることもできます。
手順 4:ロード バランサーの作成
このシナリオでは、ロード バランサーは Web 層から高可用性クラスター内のデータベースに接続を分散します。
高可用性データベース クラスターが SQL Server Always On を使っている場合は、詳細な手順の「1 つ以上の Always On 可用性グループ リスナーの構成」をご覧ください。
内部ロード バランサーの構成方法について詳しくは、「Azure Portal での内部ロード バランサーの作成」をご覧ください。
- Azure Portal の左側のウィンドウで、 [リソースの作成]>[ネットワーク]>[ロード バランサー] の順にクリックします。
- ロード バランサーの名前を選択します。
- [タイプ] を [内部] に設定し、適切な仮想ネットワークと、ロード バランサーが入るサブネットを選択します。
- [IP アドレスの割り当て ] で、 [動的] または [静的] を選択します。
- [リソース グループ] で、ロード バランサーのリソース グループを選択します。
- [場所] で、ロード バランサーの該当するリージョンを選択します。
- [作成] をクリックして、ロード バランサーを生成します。
バックエンド データベース層をロード バランサーに接続する
リソース グループから、前の手順で作成したロード バランサーを見つけます。
[設定] で、 [バックエンド プール] 、 [追加] の順にクリックし、バックエンド プールを追加します。
バックエンド プールの名前を入力します。
個々のマシンまたは可用性セットをバック エンド プールに追加します。
プローブを構成する
ロード バランサーの [設定] で、 [プローブ] を選択して [追加] をクリックし、プローブを追加します。
プローブの名前を入力します。
プローブの [プロトコル] を選択します。 データベースの場合は、HTTP プローブではなく TCP プローブを使用する場合が多くなります。 ロード バランサー プローブについて詳しくは、ロード バランサー プローブの説明に関する記事をご覧ください。
プローブにアクセスするときに使用するデータベースの [ポート] を入力します。
[間隔] で、アプリケーションをプローブする頻度を指定します。
[異常しきい値] に、バックエンドの VM が異常とみなされるまでの、プローブの連続失敗回数を指定します。
[OK] をクリックして、プローブを作成します。
負荷分散規則を構成する
- ロード バランサーの [設定] で [負荷分散規則] を選択し、 [追加] をクリックして、規則を作成します。
- 負荷分散規則の名前を入力します。
- ロード バランサーの [フロントエンド IP アドレス] 、 [プロトコル] 、 [ポート] を選択します。
- [バックエンド ポート] で、バックエンド プールで使用するポートを指定します。
- [バックエンド プール] を選択し、上述の手順で作成した、規則を適用する [プローブ] を選択します。
- [セッション永続化] で、セッションを永続化する方法を選択します。
- [アイドル タイムアウト] で、アイドル タイムアウトまでの時間を分単位で指定します。
- [Floating IP] で、 [無効] または [有効] を選択します。
- [OK] をクリックして規則を作成します。
手順 5:Web 層の VM をロード バランサーに接続する
これで、Web 層の VM で実行されるアプリケーションの IP アドレスとロード バランサーのフロントエンド ポートを構成でき、データベースに接続できるようになりました。 この構成は、これらの VM で実行されるアプリケーション専用のものです。 接続先 IP アドレスとポートの構成については、アプリケーションのドキュメントをご覧ください。 フロントエンドの IP アドレスを見つけるには、Azure Portal で、 [ロード バランサーの設定] のフロントエンド IP プールに移動します。