Azure Load Balancer のしくみ

完了

Azure Load Balancer は、OSI モデルのトランスポート層で動作します。 このレイヤー 4 の機能により、トラフィックの特定のプロパティに基づいてトラフィックを管理できます。 プロパティには、送信元と宛先のアドレス、TCP または UDP プロトコルの種類、ポート番号などがあります。

Load Balancer には、アプリケーションの高可用性とパフォーマンスを確保するために連動するいくつかの要素があります。

  • フロントエンド IP
  • 負荷分散規則
  • バックエンド プール
  • 正常性プローブ
  • 受信 NAT のルール
  • 高可用性ポート
  • アウトバウンド規則

フロントエンド IP

フロントエンド IP アドレスは、クライアントが Web アプリケーションに接続するために使うアドレスです。 フロントエンド IP アドレスは、パブリックまたはプライベート IP アドレスにすることができます。 Azure Load Balancer では複数のフロントエンド IP を持つことができます。 パブリックとプライベートのどちらの IP アドレスを選択するかによって、作成されるロード バランサーの種類が決まります。

  • パブリック IP アドレス: パブリック ロード バランサー: パブリック ロード バランサーは、受信トラフィックのパブリック IP とポートを、VM のプライベート IP とポートにマップします。 負荷分散規則を適用することで、特定の種類のトラフィックを複数の VM やサービスに分散できます。 たとえば、複数の Web サーバー間で Web 要求のトラフィックの負荷を分散できます。 ロード バランサーでは、VM のプライベート IP とポートの応答トラフィックをロード バランサーのパブリック IP とポートにマップします。 次に、要求元のクライアントに応答を戻します。

  • プライベート IP アドレス: 内部ロード バランサー: 内部ロード バランサーは、仮想ネットワーク内にあるリソースにトラフィックを分散します。 負荷分散の対象となる、仮想ネットワークのフロントエンド IP アドレスは、Azure によってアクセスが制限されます。 フロントエンド IP アドレスと仮想ネットワークは、インターネット エンドポイントに直接公開されることはありません。 社内の基幹業務アプリケーションは Azure で実行され、Azure 内から、あるいは VPN または ExpressRoute 接続を介してオンプレミス リソースからアクセスされます。

    Diagram that depicts how public and internal load balancers work in Azure Load Balancer.

ロード バランサー規則

ロード バランサー規則では、バックエンド プールに対するトラフィックの分散方法が定義されます。 この規則によって、特定のフロントエンド IP とポートの組み合わせが、一連のバックエンド IP アドレスとポートの組み合わせにマップされます。

Diagram that depicts how load balancer rules work in Azure Load Balancer.

トラフィックは、次の要素から作成される 5 タプルのハッシュを使用して管理されます。

  • 接続元 IP: 要求元クライアントの IP アドレス。
  • 接続元ポート: 要求元クライアントのポート。
  • 宛先 IP: 要求の宛先 IP アドレス。
  • 接続先ポート: 要求の宛先ポート。
  • プロトコルの種類:指定されたプロトコルの種類 (TCP または UDP)。
  • セッション アフィニティ:同じプール ノードで常にクライアントのトラフィックが処理されるようにします。

Load Balancer を使用すれば、複数のポート、複数の IP アドレス、またはその両方のサービスの負荷を分散できます。 各フロントエンド IP に対して異なる負荷分散規則を構成できます。 複数フロントエンドの構成は、IaaS VM でのみサポートされます。

Load Balancer は、OSI モデルのレイヤー 4 (トランスポート層) で動作するため、内部トラフィックのコンテンツに基づいて異なる規則を適用することはできません。 そのレイヤー 7 (アプリケーション層) のプロパティに基づいてトラフィックを管理する必要がある場合は、Azure Application Gateway のようなソリューションをデプロイする必要があります。

バックエンド プール

バックエンド プールは、受信要求に応答する仮想マシン スケール セット内の VM またはインスタンスのグループです。 コスト効果に優れた方法でスケーリングして大量の受信トラフィックに対処するために、コンピューティングのガイドラインでは通常、バックエンド プールにさらにインスタンスを追加することが推奨されます。

Load Balancer では、インスタンスをスケールアップまたはダウンするときに、変更された数のインスタンスに負荷を再配分するための自動再構成を実装します。 たとえば、2 つ以上の VM インスタンスをバックエンド プールに追加した場合、Load Balancer は、既に構成されている負荷分散規則に基づいて、それらのインスタンスへのトラフィックの分散を開始するために自身を再構成します。

正常性プローブ

正常性プローブは、バックエンド プール内のインスタンスの正常性状態を判断するために使用されます。 この正常性プローブによって、インスタンスが正常で、トラフィックを受信できるかどうかが判断されます。 正常性プローブには、異常しきい値を定義できます。 プローブで応答できない場合、ロード バランサーは異常なインスタンスへの新しい接続の送信を停止します。 プローブの失敗は、既存の接続には影響しません。 接続は以下の時点まで継続します。

  • アプリケーションがフローを終了する。
  • アイドル タイムアウトが発生する。
  • VM がシャットダウンする。

Load Balancer を使用すれば、エンドポイントにさまざまな種類の正常性プローブ (TCP、HTTP、HTTPS) を構成できます。

  • TCP カスタム プローブ: このプローブは、定義済みプローブ ポートへの正常な TCP セッションの確立に依存します。 VM 上に指定されたリスナーが存在すれば、このプローブは成功します。 接続が拒否されると、プローブは失敗します。 [ポート]、[間隔]、および [異常しきい値] を指定できます。
  • HTTP または HTTPS カスタム プローブ: ロード バランサーは定期的にエンドポイントをプローブします (既定では 15 秒ごと)。 既定値で 31 秒のタイムアウト期間内に、インスタンスが HTTP 200 で応答した場合は正常です。 HTTP 200 以外のすべての状態で、このプローブは失敗します。 ポート ([ポート])、バックエンドから正常性状態を要求するための URI ([URI])、プローブ試行間の時間 ([間隔])、およびインスタンスが異常と見なされるのに発生する必要がある失敗の数 ([異常しきい値]) を指定できます。

セッション永続化

既定では、Load Balancer により、ネットワーク トラフィックが複数の VM インスタンスに均等に分散されます。 これは、トランスポート セッション内でのみ持続性を提供します。 セッションの永続化によって、クライアントからのトラフィックの処理方法が指定されます。 既定の動作 (なし) は、すべての正常な VM でクライアントからの連続する要求を処理できるということです。

セッション永続化は、セッション アフィニティ、ソース IP アフィニティ、またはクライアント IP アフィニティとも呼ばれます。 この分散モードでは 2 タプル (ソース IP と接続先 IP) または 3 タプル (ソース IP、接続先 IP、プロトコルの種類) のハッシュを使用して、バックエンド インスタンスにルーティングします。 セッション永続化を使用する場合、同じクライアントからの接続は、バックエンド プール内の同じバックエンド インスタンスに送信されます。 次のセッション永続化オプションのいずれかを構成できます。

  • なし (既定値): すべての正常な VM で要求を処理できることを指定します。
  • クライアント IP (2 タプル):同じクライアント IP アドレスからの連続する要求が、同じバックエンド インスタンスで処理できることを指定します。
  • クライアント IP とプロトコル (3 タプル):クライアント IP アドレスとプロトコルの同じ組み合わせからの連続する要求が、同じバックエンド インスタンスで処理できることを指定します。

この動作は、次のセクションで説明されているいずれかのオプションを構成することで変更できます。

高可用性ポート

protocol - all and port - 0 で構成されたロード バランサー規則は、''高可用性 (HA) ポート規則'' と呼ばれます。 この規則では、内部 Standard Load Balancer のすべてのポートに到着するすべての TCP および UDP フローを単一の規則によって負荷分散できます。

負荷分散の決定は、フローごとに行われます。 このアクションは、次の 5 組の接続に基づいています。

  • 送信元 IP アドレス
  • 送信元ポート
  • 宛先 IP アドレス
  • 宛先ポート
  • プロトコル

HA ポート負荷分散規則は、仮想ネットワーク内のネットワーク仮想アプライアンス (NVA) の高可用性と拡張性など、重要なシナリオで役に立ちます。 この機能は、数多くのポートを負荷分散する必要がある場合に役立つことがあります。

Diagram that shows how high availability ports work in Azure Load Balancer.

受信 NAT のルール

負荷分散規則は、ネットワーク アドレス変換 (NAT) 規則と組み合わせて使用できます。 たとえば、ロード バランサーのパブリック アドレスから特定の VM の TCP 3389 への NAT を使用することができます。 この規則の組み合わせにより、Azure の外部からのリモート デスクトップ アクセスが可能になります。

Diagram that shows how inbound NAT rules work in Azure Load Balancer.

アウトバウンド規則

バックエンド プールによって識別されるすべての VM またはインスタンスを対象とする送信元ネットワーク アドレス変換 (SNAT) は、アウトバウンド規則によって構成されます。 この規則により、バックエンド内のインスタンスがインターネットやその他のパブリック エンドポイントと通信 (送信) できるようになります。

Diagram that shows how outbound rules work in Azure Load Balancer.