Network Load Balancer の概要

NLB は、OSI モデルの第 4 層で機能する。毎秒数百万のリクエストを処理できる。ロードバランサーは、接続リクエストを受信すると、デフォルトルールのターゲットグループからターゲットを選択する。リスナー構成で指定されたポート上の選択したターゲットへの TCP 接続を開こうとする。

ロードバランサー用のアベイラビリティーゾーンを有効にすると、ELB はアベイラビリティーゾーンにロードバランサーノードを作成する。デフォルトでは、各ロードバランサーノードは、アベイラビリティーゾーン内の登録済みターゲット間でのみトラフィックを分散する。クロスゾーン負荷分散を有効にすると、各ロードバランサーノードは、有効なすべてのアベイラビリティーゾーンの登録済みターゲットにトラフィックを分散する。

アプリケーションの耐障害性を向上させる目的で、複数のアベイラビリティーゾーンをロードバランサーに対して有効にすることができる。各ターゲットグループで、有効にした各アベイラビリティーゾーンに 1 つ以上のターゲットが必要。たとえば、1 つ以上のターゲットグループで 1 つのアベイラビリティーゾーン内に正常なターゲットがない場合、DNS から該当するサブネットの IP アドレスを削除するが、他のアベイラビリティーゾーンのロードバランサーノードは、引き続きトラフィックをルーティングできる。クライアントが有効期限 (TTL) を守らず、DNS から削除された後でリクエストを IP アドレスに送信すると、そのリクエストは失敗する。

ルーティング

  • TCP トラフィック
    • プロトコル、送信元 IP アドレス、送信元ポート、宛先 IP アドレス、宛先ポート、および TCP シーケンス番号に基づいて、フローハッシュアルゴリズムを使用してターゲットを選択する。
    • クライアントからの TCP 接続のソースポートとシーケンス番号は異なり、別のターゲットにルーティングできる。各 TCP 接続は、接続中は単一のターゲットにルーティングされる。
  • UDP トラフィック
    • プロトコル、送信元 IP アドレス、送信元ポート、宛先 IP アドレス、および宛先ポートに基づいて、フローハッシュアルゴリズムを使用してターゲットを選択する。
    • UDP フローは送信元と宛先が同じであるため、その存続期間を通じて一貫して単一のターゲットにルーティングされる。異なる UDP フローは異なる送信元 IP アドレスとポートを持つため、それらは異なるターゲットにルーティングできる。

ELB は、有効にした各アベイラビリティーゾーンにネットワークインターフェイスを作成する。アベイラビリティーゾーンの各ロードバランサーノードは、このネットワークインターフェイスを使用して静的 IP アドレスを取得する。インターネット向けのロードバランサーを作成する場合は、必要に応じて 1 つの Elastic IP アドレスをサブネットごとに関連付けることができる。

ターゲットグループを作成するときは、そのターゲットの種類を指定する。ターゲットの種類は、ターゲットの登録方法を決定する。たとえば、インスタンス ID、IP アドレス、または ALB を登録できる。ターゲットをインスタンス ID で登録すると、クライアントの送信元 IP アドレスが保持され、アプリケーションに提供される。ターゲットを IP アドレスで登録する場合、送信元 IP アドレスはロードーバランサノードのプライベート IP アドレスとなる。 ターゲットを ALB として登録すると、クライアントの送信元 IP アドレスが保持され、アプリケーションに提供される。

アプリケーションへのリクエストの流れを中断することなく、ニーズの変化に応じてロードバランサーに対してターゲットの追加と削除を行うことができる。ELB はアプリケーションへのトラフィックが時間の経過とともに変化するのに応じてロードバランサーをスケーリングする。

登録済みのインスタンスのヘルス状態をモニタリングするために使用されるヘルスチェックを設定することで、ロードバランサーは正常なターゲットにのみリクエストを送信できる。

CLB からの移行のメリット

Classic Load Balancer の代わりに NLB を使用すると、次の利点がある。

  • 揮発性のワークロードを処理し、毎秒数百万のリクエストに対応できる能力。
  • ロードバランサーの静的 IP アドレスのサポート。 ロードバランサーで有効になっているサブネットごとに 1 つの Elastic IP アドレスを割り当てることもできる。
  • ロードバランサーの VPC 外のターゲットを含め、IP アドレスによるターゲットの登録をサポート。
  • 1 つの EC2 インスタンス上での複数のアプリケーションへのルーティングリクエストのサポート。複数のポートを使用して、各インスタンスまたは IP アドレスを同じターゲットグループに登録できる。
  • コンテナ化されたアプリケーションのサポート。Amazon Elastic Container Service (Amazon ECS) は、タスクをスケジュールするときに未使用のポートを選択し、そのポートを使用するターゲットグループにタスクを登録できる。これにより、クラスターを効率的に使用することができる。
  • 各サービスの個別のヘルスステータスのモニタリングのサポート。ヘルスチェックがターゲットグループレベルで定義され、多数の Amazon CloudWatch メトリクスがターゲットグループレベルで報告される。ターゲットグループを Auto Scaling グループにアタッチすることで、各サービスをオンデマンドで動的にスケールすることができる。

NLB のコンポーネント

ロードバランサー

クライアントにとって単一の通信先として機能する。クライアントはロードバランサーにリクエストを送信し、ロードバランサーは 1 つ以上のアベイラビリティーゾーンにあるターゲット (EC2 インスタンスなど) にそれらのリクエストを送信する。

ロードバランサーを設定するには、ターゲットグループを作成し、ターゲットグループにターゲットを登録する。有効な各アベイラビリティーゾーンに少なくとも 1 つの登録済みターゲットがあるようにする場合、ロードバランサーが最も効果的である。さらに、リスナーを作成してクライアントからの接続リクエストがないかチェックし、リクエストをクライアントからターゲットグループ内のターゲットにルーティングする。

NLB は VPC ピアリング、 AWSマネージド VPN、AWS Direct Connect、およびサードパーティーの VPN ソリューションを経由した接続をサポートする。

IP アドレスタイプ

  • ipv4
  • dualstack

DNS 名

name-id.elb.region.amazonaws.com

リスナー

  • プロトコル: TCP、TLS、UDP、TCP_UDP
  • ポート: 1 ~ 65535

ターゲットグループ

各ターゲットグループは、1 つ以上の登録されているターゲットにリクエストをルーティングするために使用される。リスナーを作成するときは、デフォルトアクションのターゲットグループを指定する。トラフィックは、リスナー規則で指定されたターゲットグループに転送される。さまざまなタイプのリクエストに応じて別のターゲットグループを作成できる。

ロードバランサーのヘルスチェック設定は、ターゲットグループ単位で定義する。各ターゲットグループはデフォルトのヘルスチェック設定を使用する。ただし、ターゲットグループを作成したときや、後で変更したときに上書きした場合を除く。リスナーのルールでターゲットグループを指定すると、ロードバランサーは、ロードバランサーで有効なアベイラビリティーゾーンにある、ターゲットグループに登録されたすべてのターゲットの状態を継続的にモニタリングする。ロードバランサーは、正常な登録済みターゲットにリクエストをルーティングする。

ルーティング設定

  • プロトコル: TCP、TLS、UDP、TCP_UDP
  • ポート: 1 ~ 65535

ターゲットタイプ

  • instance
  • ip
    • パブリックにルーティング可能な IP アドレスは指定できない。
  • alb

クライアント IP の保存

NLB は、リクエストをバックエンドターゲットにルーティングするときに、クライアントのソース IP アドレスを保持できる。クライアント IP の保存を無効にした場合、NLB のプライベート IP アドレスは、すべての受信トラフィックのクライアント IP となる。

デフォルトでは、UDP プロトコルと TCP_UDP プロトコルを使用するインスタンスおよび IP タイプのターゲットグループに対して、クライアント IP の保存が有効になっています (無効にすることはできない)。ただし、preserve_client_ip.enabled ターゲットグループ属性を使用して、TCP および TLS ターゲットグループのクライアント IP の保存を有効または無効にできる。

  • デフォルト設定
    • インスタンスタイプのターゲットグループ: 有効
    • IP タイプのターゲットグループ (UDP、TCP_UDP): 有効
    • IP タイプのターゲットグループ (TCP、TLS): 無効

クライアント IP の保存が有効な場合、ターゲットで確認されたソケットの再利用に関連する TCP/IP 接続の制限が発生することがある。これらの接続制限が発生する可能性があるのは、クライアント、またはクライアントの前面にある NAT デバイスが、複数のロードバランサーノードに同時に接続する際に、同じ送信元 IP アドレスと送信元ポートを使用する場合。ロードバランサーがこれらの接続を同じターゲットにルーティングする場合、接続は同じ送信元ソケットからの接続のようにターゲットに表示され、それにより接続エラーが発生する。

Proxy Protocol

NLB は、プロキシプロトコルバージョン 2 を使用して、送信元と送信先などの追加の接続情報を送信する。Proxy Protocol バージョン 2 は、Proxy Protocol ヘッダーのバイナリエンコードを提供する。ロードバランサーは TCP データにプロキシプロトコルヘッダーを付加する。既存のデータは破棄または上書きされません。これには、ネットワークパスのクライアントまたは他のプロキシ、ロードバランサー、またはサーバーによって送信されたプロキシプロトコルヘッダーが含まれる。したがって、複数のプロキシプロトコルヘッダーを受け取ることができる。また、NLB の外部のターゲットへの別のネットワークパスが存在する場合、最初のプロキシプロトコルヘッダーは、NLB からのものでない可能性がある。

IP アドレスでターゲットを指定すると、アプリケーションに提供される送信元 IP アドレスは、ターゲットグループのプロトコルに応じて次のように異なる。

  • TCP および TLS
    • 送信元 IP アドレスは、ロードバランサーノードのプライベート IP アドレスです。クライアントの IP アドレスが必要な場合は、Proxy Protocol を有効にし、Proxy Protocol ヘッダーからクライアント IP アドレスを取得する。
  • UDP および TCP_UDP
    • 送信元 IP アドレスは、クライアントの IP アドレスです。

スティッキーセッション

  • スティッキーセッションを使用すると、接続とフローの分散が不均一になり、ターゲットの可用性に影響する場合がある。たとえば、同じ NAT デバイスの背後にあるすべてのクライアントの送信元 IP アドレスは同じ。したがって、これらのクライアントからのすべてのトラフィックは、同じターゲットにルーティングされる。
  • いずれかのターゲットのヘルス状態が変更されたり、ターゲットグループに対してターゲットを登録または登録解除したりすると、ロードバランサーによってターゲットグループのスティッキーセッションがリセットされる場合がある。
  • スティッキーセッションは、TLS リスナーおよび TLS ターゲットグループではサポートされない。