コネクション ドレインを有効にする

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

このページの情報は、インスタンス グループと、範囲内のゾーンの次のタイプの NEG にのみ適用されます。

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

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

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

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

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

コネクション ドレインの仕様の一覧は次のとおりです。

コネクション ドレインを有効にするには、次の手順を完了します。

コンソール

ロードバランサの更新

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

Cloud Service Mesh を更新する

  1. Google Cloud コンソールの [Cloud Service Mesh] ページに移動します。
    Cloud Service Mesh に移動する
  2. サービスの名前をクリックします。
  3. サービスの最後にある「高度な構成」をクリックします。
  4. [コネクション ドレインのタイムアウト] フィールドに、03600 の値を入力します。0 を設定すると、コネクション ドレインが無効になります。
  5. [保存] をクリックします。

gcloud

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

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

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

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

API

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

既存のグローバル ロードバランサまたはクロスリージョン ロードバランサの場合:

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

既存のリージョン ロードバランサの場合:

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

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

ここで

  • PROJECT_ID は、ロードバランサまたは Cloud Service Mesh のデプロイメントを含むプロジェクト ID です。
  • BACKEND_SERVICE は、ロードバランサまたは Cloud Service Mesh のデプロイで使用されるバックエンド サービスです。
  • CONNECTION_TIMEOUT_SECS は、インスタンス グループまたは NEG からインスタンスを削除させるまで待機する秒数(0~3,600 秒)です。このタイムアウト時間は、バックエンド サービスによって参照されるすべてのインスタンス グループまたは NEG に適用されます。

次のステップ

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