ネットワーク負荷分散の設定

ネットワーク負荷分散では、アドレス、ポート、プロトコル タイプなどの受信 IP プロトコル データに基づいてシステムの負荷を分散できます。

ネットワーク負荷分散には、ターゲット プールに振り向ける転送ルールが使用されます。このターゲット プールには、負荷分散に使用できるインスタンスのリストが指定されているほか、これらのインスタンスで実行する必要のあるヘルスチェックのタイプが定義されています。詳細については、ネットワーク負荷分散の例をご覧ください。

ネットワーク負荷分散は、プロキシを使用しないリージョンのロードバランサです。これにより、UDP トラフィックを負荷分散できます。また、SSL プロキシTCP プロキシのロードバランサがサポートしていないポートで TCP と SSL トラフィックを負荷分散できます。

ネットワーク ロードバランサは、パススルーのロードバランサです。クライアントからの接続のプロキシを行いません。

他のタイプのロードバランサについては、負荷分散のメインページをご覧ください。

負荷分散アルゴリズム

デフォルトでは、トラフィックをインスタンスに配布するにはセッション アフィニティを NONE に設定します。Google Compute Engine は送信元 IP のハッシュとタグ、送信先 IP とポート、プロトコルに基づいてインスタンスを選択します。これは、受信 TCP 接続がインスタンスにまたがって広がり、新たな接続ごとに別のインスタンスに移動する可能性があることを意味します。接続が閉じられるまで、接続のすべてのパケットは同じインスタンスに振り向けられます。確立済みの接続は分散時に考慮されません。

セッション アフィニティの設定に関係なく、接続が閉じられるまで、接続のすべてのパケットは選択されたインスタンスに振り分けられ、新たな受信接続に関する負荷分散の決定には影響しません。この結果、長寿命な TCP 接続が使用されている場合のバックエンド間に不均衡が発生する可能性があります。

同じインスタンスに移動するためにクライアントからの複数の接続が必要な場合、別のセッション アフィニティの設定を選択できます。詳しくは、ターゲット プールに関するドキュメントの sessionAffinity をご覧ください。

ターゲット プール

ターゲット プールのリソースは、転送ルールから受信トラフィックを受け取る必要のあるインスタンスのグループを定義します。転送ルールがターゲット プールにトラフィックを振り分けるときに、Google Compute Engine は送信元 IP、ポート、宛先 IP、ポートのハッシュに基づき、これらのターゲット プールからインスタンスを選択します。トラフィックがインスタンスに配布される仕組みの詳細については、負荷分散アルゴリズムをご覧ください。

ターゲット プールは、TCP と UDP トラフィックを処理する転送ルールと組み合わせた場合のみ使用できます。その他のすべてのプロトコルには、ターゲット インスタンスを作成する必要があります。ターゲット プールを転送ルールと組み合わせて使用するには、その前にターゲット プールを新たに作成する必要があります。各プロジェクトには、最大 50 個のターゲット プールを設定できます。

ターゲット プールに単一の仮想マシン インスタンスを含めるようにする場合、プロトコル転送機能の使用を検討する必要があります。

ネットワーク負荷分散は Compute Engine Autoscaler をサポートします。この機能により、ユーザーが CPU の使用率に基づいて、ターゲット プール内のインスタンス グループに対して自動スケーリングを実行できます。詳しくは、CPU の使用率に基づくスケーリングをご覧ください。

詳しくは、ターゲット プールとその設定方法をご覧ください。

転送ルール

転送ルールはターゲット プールおよびターゲット インスタンスと連携して機能し、負荷分散機能とプロトコル転送機能をサポートします。負荷分散とプロトコル転送を使用するには、トラフィックを特定のターゲット プール(負荷分散の場合)またはターゲット インスタンス(プロトコル転送の場合)に振り向ける転送ルールを作成する必要があります。転送ルールを設定することなく、これらの機能を使用することはできません。

転送ルールのリソースは転送ルールのコレクションに含まれています。各転送ルールでは、特定の IP アドレス、プロトコル、およびポート範囲(オプション)と、単一のターゲット プールまたはターゲット インスタンスが照合されます。トラフィックが転送ルールから提供される外部 IP アドレスに送信されると、転送ルールによって、対応するターゲット プールまたはターゲット インスタンスにそのトラフィックが振り向けられます。プロジェクトごとに、最大 50 個の転送ルール オブジェクトを作成できます。

詳しくは、転送ルールとその設定方法をご覧ください。

Google Cloud Platform(GCP)Virtual Private Cloud(VPC)ネットワークに到達する前に断片化する可能性のある UDP パケットの負荷を分散する場合は、負荷分散および断片化された UDP パケットをご覧ください。

ヘルスチェック

ヘルスチェックを行うと、稼働中で接続の受信準備ができたインスタンスに対してのみ、Compute Engine が新しい接続を転送するようになります。Compute Engine は指定された頻度で各インスタンスにヘルスチェック リクエストを送信します。あるインスタンスでヘルスチェック失敗が許容回数を超えると、そのインスタンスは新しいトラフィックの受信対象とみなされなくなります。接続が終了されるか、インスタンスが終了されるまで、そのインスタンスは既存の接続でパケットを受信し続けます。これにより、TCP 接続が突然切断されることなく、インスタンスを正常にシャットダウンすることができます。

ヘルスチェックでは異常なインスタンスへのクエリが継続的に行われ、チェックの適合が指定された回数を超えると、インスタンスがプールに戻されます。

ネットワーク負荷分散は、インスタンスの正常性の判定のため、従来のHTTP ヘルスチェックに従います。ご利用のサービスが HTTP を使用していなくても、ヘルスチェック システムが照会できるインスタンスごとに、少なくとも基本的なウェブサーバーを実行する必要があります。

ファイアウォール ルールとネットワーク負荷分散

HTTP ヘルスチェックのプローブは、IP 範囲 209.85.152.0/22209.85.204.0/2235.191.0.0/16 から送信されます。そのため、これらの範囲から送信されたトラフィックがポート 80 のインスタンスに到達することを許可するファイアウォール ルールを作成する必要があります。

ネットワーク負荷分散はパススルー ロードバランサです。これは、クライアントの送信元 IP アドレスからのトラフィックを許可するようにファイアウォール ルールを作成する必要があるということです。サービスがインターネットに公開されているのであれば、すべての IP 範囲からのトラフィックを許可するのが最も簡単です。特定の送信元 IP のみを許可するようアクセスを制限したい場合は、その制限を強制するようにファイアウォール ルールを設定できますが、その場合でもヘルスチェック IP 範囲からのアクセスは許可するように設定する必要があります。

セッション アフィニティ

ターゲット プールsessionAffinity パラメータをご覧ください。

負荷分散および断片化された UDP パケット

UDP パケットの負荷を分散している場合は、以下の点に注意してください。

  1. 断片化されていないパケットは、すべての設定で通常通り処理されます。
  2. UDP パケットは、GCP に到達する前に断片化する可能性があります。介在するネットワークは、すべてのフラグメントが到達してから転送するため遅延を引き起こすか、フラグメントをドロップすることがあります。GCP はすべてのフラグメントの到着を待たず、個々のフラグメントを到達と同時に転送します。
  3. UDP フラグメントには、最初のフラグメントを除き、ポート番号が含まれていないため、次の 2 つの状況で問題が発生します。

    • ターゲット プールのセッション アフィニティNONE(5 タプル アフィニティ)に設定されていると、ロードバランサでは 5 タプルハッシュを計算できないため、後続のフラグメントがドロップされることがある。
    • 負荷が分散された 1 つの IP アドレスに複数の UDP 転送ルールが設定されていると、後続のフラグメントが間違った転送ルールに到達することがある。

断片化された UDP パケットを処理する可能性がある場合は、次の手順を行います。

  • セッション アフィニティを CLIENT_IP_PROTO または CLIENT_IP に設定します。NONE (5 タプルハッシュ)は使用しません。CLIENT_IP_PROTOCLIENT_IP はハッシュに宛先ポートを使用しないため、最初のフラグメントのハッシュと同じ後続のフラグメントのハッシュを計算できます。
  • 負荷が分散された IP アドレスごとに、UDP 転送ルールを 1 つだけ使用します。これで、すべてのフラグメントが同じ転送ルールに渡されるようになります。

これらの設定により、同じパケットからの UDP フラグメントが同じインスタンスに転送されて再構成されます。

使ってみる

ネットワーク負荷分散ガイドでは、負荷分散ソリューションを簡単に設定し、Apache インスタンス全体でトラフィックを分散する方法について説明しています。このシナリオ以外にも、他の種類のトラフィックの処理や複雑な設定を行うこともできます。

使ってみる

外出先でもリソースをモニタリング

Google Cloud Console アプリを入手して、プロジェクトの管理にお役立てください。

フィードバックを送信...

Compute Engine ドキュメント