コネクション ドレインの有効化

コネクション ドレインとは、VM がインスタンス グループから除外されたときや、エンドポイントがゾーン NEG から削除されたときに、既存の進行中リクエストを完了するための時間を確保するプロセスです。

コネクション ドレインを有効にするには、バックエンド サービスでコネクション ドレイン タイムアウトを設定します。タイムアウト時間は 0~3,600 秒に設定してください。

指定されたタイムアウト時間の間、除外された VM に対する既存のリクエストに、完了するまでの時間が与えられます。ロードバランサは、削除された VM に新しいリクエストを送信しません。タイムアウト時間に達すると、VM に対する残りの接続がすべて閉じます。

次の操作を行うとコネクション ドレインが開始されます。

指定したタイムアウト時間が経過してからインスタンスが終了するまで、最大で 60 秒かかることがあります。

同じインスタンス グループや NEG を共有する複数のバックエンド サービスでコネクション ドレインを有効にした場合は、最大のタイムアウト時間が使用されます。たとえば、同じインスタンス グループまたはゾーン NEG が 2 つのバックエンド サービスのバックエンドであり、一方のバックエンド サービスのコネクション ドレイン タイムアウトが 100 秒で、もう一方のバックエンド サービスのコネクション ドレイン タイムアウトが 200 秒であるとします。Google Cloud は有効なコネクション ドレインのタイムアウトとして 200 秒を使用しているため、Google Cloud が既存の接続を終了させるまで既存の接続は 200 秒間存続できます。バックエンドがマネージド インスタンス グループの場合、インスタンスを削除するオペレーションは少なくとも 200 秒遅れます。

仕様

  • コネクション ドレインは、次のロードバランサに属するバックエンド サービスで利用できます。

  • コネクション ドレインのタイムアウトが設定され、インスタンスがインスタンス グループから削除されるか、エンドポイントがゾーン NEG から削除されると、Google Cloud ロードバランサは次のように動作します。

    • 削除されたインスタンスやエンドポイントに新しい接続は送信されません。

    • 削除されたインスタンスまたはエンドポイントへの既存の接続をサポートするアクティブな TCP セッションは、コネクション ドレインのタイムアウトが経過するまで維持されます。

    • コネクション ドレインのタイムアウトを設定しない場合、Google Cloud は削除されたインスタンスまたはエンドポイントの既存の接続をできるだけ早く終了します。コネクション ドレインのタイムアウトをゼロ(0)に設定した場合も同じ結果になります。

コネクション ドレインの有効化

Console

  1. Google Cloud Console の [負荷分散] ページに移動します。
    [負荷分散] ページに移動
  2. ロードバランサの [編集] をクリックするか、ロードバランサを新たに作成します。
  3. [バックエンドの設定] をクリックします。
  4. バックエンド サービスの最後にある [詳細設定] をクリックします。
  5. [コネクション ドレインのタイムアウト] フィールドに、03600 の値を入力します。0 を設定すると、コネクション ドレインが無効になります。

gcloud

--connection-draining-timeout フラグを使用して、新規または既存のバックエンド サービスでコネクション ドレインを有効にします。次の例は、コネクション ドレインのタイムアウト時間を変更する方法を示しています。

  • 既存の外部 HTTP(S) ロードバランサ、SSL プロキシ ロードバランサ、TCP プロキシ ロードバランサの場合:

    gcloud compute backend-services update BACKEND_SERVICE \
        --global \
        --connection-draining-timeout=CONNECTION_TIMEOUT_SECS
    
  • 既存の内部 TCP / UDP ロードバランサまたは内部 HTTP(S) ロードバランサの場合:

    gcloud compute backend-services update BACKEND_SERVICE \
        --region=REGION \
        --connection-draining-timeout=CONNECTION_TIMEOUT_SECS
    

プレースホルダを有効な値に置き換えます。

  • BACKEND_SERVICE: ロードバランサのバックエンド サービス。
  • CONNECTION_TIMEOUT_SECS: インスタンスまたはエンドポイントへの既存の接続が終了するまでの秒数(03600 秒)。0 を設定すると、コネクション ドレインが無効になります。コネクション ドレインのタイムアウトは、バックエンド サービスのすべてのバックエンドに適用されます。

    gcloud compute backend-services edit コマンドを使用して、既存のバックエンド サービスを更新することもできます。

API

インスタンスやエンドポイントを作成または更新するときに API でコネクション ドレインを有効にするには、それぞれの API URI に、リクエスト本文に connectionDraining フィールドを含めたリクエストを送信します。次の例は、既存のバックエンド サービスを編集してこの属性を設定する方法を示しています。その他の必須属性については、各ロードバランサのドキュメントをご覧ください。

外部 HTTP(S) ロードバランサ、SSL プロキシ ロードバランサ、TCP プロキシ ロードバランサの場合:

PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices

内部 TCP / UDP ロードバランサと内部 HTTP(S) ロードバランサの場合:

PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/region/REGION/backendServices

{
   "name": "BACKEND_SERVICE",
   "connectionDraining": {
     "drainingTimeoutSec": CONNECTION_TIMEOUT_SECS
   }
}

ここで

  • PROJECT_ID は、ロードバランサが属するプロジェクト ID です。
  • BACKEND_SERVICE は、ロードバランサによって使用されるバックエンド サービスです。
  • CONNECTION_TIMEOUT_SECS は、インスタンスまたはエンドポイントがインスタンス グループまたは NEG から削除されるまでの秒数で、0~3600 秒です。このタイムアウト時間は、そのバックエンド サービスに含まれるすべてのインスタンス グループまたは NEG に適用されます。

次のステップ

バックエンド サービスの全般的な情報については、バックエンド サービスの概要をご覧ください。