接続ドレインの有効化

接続ドレインとは、VM がインスタンス グループから除外されたときに、既存の進行中リクエストに完了までの時間が確実に与えられるようにするプロセスです。

接続ドレインを有効にするには、バックエンド サービスで接続ドレイン タイムアウトを設定します。タイムアウト時間は 1~3600 秒に設定してください。

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

インスタンス グループに VM を追加または削除すると、コネクション ドレインが開始されます。

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

同じインスタンス グループを共有する複数のバックエンド サービスで、接続ドレインを有効にした場合は、最大のタイムアウト時間が使用されます。たとえば、バックエンド サービス A では接続タイムアウトが 100 秒に設定され、バックエンド サービス B では接続タイムアウトが 200 秒に設定されている場合、システムは 200 秒間待ってから共有インスタンス グループ内のインスタンスを終了します。

制限事項

接続ドレインの有効化

Console

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

gcloud

--connection-draining-timeout フラグを使用して、新規または既存のバックエンド サービスでコネクション ドレインを有効にします。たとえば、バックエンド サービスを更新するときに、リクエストによってこのフラグが提供されます。

gcloud compute backend-services update [BACKEND_SERVICE] \
    --connection-draining-timeout [CONNECTION_TIMEOUT_SECS]

ここで

  • [BACKEND_SERVICE] は、このリクエストのバックエンド サービスです。
  • [CONNECTION_TIMEOUT_SECS] は、インスタンスが終了されるまでの待ち時間で、03600 秒です。0 に設定すると接続ドレインが無効になります。このタイムアウト時間は、そのバックエンド サービスに含まれるすべてのインスタンス グループに適用されます。

backend-services edit サブコマンドを使用してインスタンスを更新する場合は、リソース本文の一部として connectionDraining を追加します。

# You can edit the resource below. Lines beginning with "#" are
# ignored.
#
# If you introduce a syntactic error, you will be given the
# opportunity to edit the file again. You can abort by closing this
# file without saving it.
#
# At the bottom of this file, you will find an example resource.
#
# Only fields that can be modified are shown. The original resource
# with all of its fields is reproduced in the comment section at the
# bottom of this document.

description: ''
healthChecks:
- https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/healthChecks/[HEALTH_CHECK]
port: 80
portName: [PORT_NAME]
protocol: [PROTOCOL]
timeoutSec: 30
connectionDraining:
  drainingTimeoutSec: [CONNECTION_TIMEOUT_SEC]

API

インスタンスを作成または更新するときに API でコネクション ドレインを有効にするには、それぞれの API URI にリクエストを行い、リクエスト本文に connectionDraining フィールドを含めます。たとえば、新しいバックエンド サービスを作成するには、次の URI に POST リクエストを行います。

HTTP(S) 負荷分散または SSL プロキシ負荷分散の場合:

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices

内部負荷分散の場合:

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/region/[REGION]/backendServices

{  "healthChecks": [
     "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/healthChecks/[HEALTH_CHECK_NAME]"
    ],
   "name": "[BACKEND_SERVICE]",
   "port": 80,
   "portName": "[PORT_NAME]",
   "protocol": "[PROTOCOL]",
   "timeoutSec": 30,
   "connectionDraining": {
     "drainingTimeoutSec": [CONNECTION_TIMEOUT_SECS]
   }
}

ここで

  • [PROJECT_ID] はこのリクエストのプロジェクト ID です。
  • [BACKEND_SERVICE] は、このリクエストのバックエンド サービスです。
  • [CONNECTION_TIMEOUT_SECS] は、インスタンスがインスタンス グループから除外されるまでの待ち時間で、1~3600 秒(両端を含む)です。このタイムアウト時間は、そのバックエンド サービスに含まれるすべてのインスタンス グループに適用されます。

次のステップ

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