コネクション ドレインとは、VM がインスタンス グループから除外されたときや、エンドポイントがゾーン NEG から削除されたときに、既存の進行中リクエストを完了するための時間を確保するプロセスです。
コネクション ドレインを有効にするには、バックエンド サービスでコネクション ドレイン タイムアウトを設定します。タイムアウト時間は 0 秒以上、3,600 秒以下に設定してください。
指定されたタイムアウト時間の間、除外された VM またはエンドポイントに対する既存のリクエストに、完了するまでの時間が与えられます。ロードバランサは、削除された VM に新しいリクエストを送信しません。タイムアウト時間に達すると、VM に対する残りの接続がすべて閉じます。
次の操作を行うとコネクション ドレインが開始されます。
- 手動でインスタンス グループから VM を削除した場合。
resize()
、deleteInstances()
、recreateInstances()
、またはabandonInstances()
呼び出しを実行して、マネージド インスタンス グループからインスタンスを削除した場合。- Google Cloud が自動スケーリングの一環としてインスタンスを削除した場合。
- Managed Instance Group Updater を使用してマネージド インスタンス グループへの更新を実行した場合。
- 手動でゾーン NEG からエンドポイントを削除した場合。
指定したタイムアウト時間が経過してからインスタンスが終了するまで、最大で 60 秒かかることがあります。
同じインスタンス グループや NEG を共有する複数のバックエンド サービスでコネクション ドレインを有効にした場合は、最大のタイムアウト時間が使用されます。たとえば、同じインスタンス グループまたはゾーン NEG が 2 つのバックエンド サービスのバックエンドであり、一方のバックエンド サービスのコネクション ドレイン タイムアウトが 100 秒で、もう一方のバックエンド サービスのコネクション ドレイン タイムアウトが 200 秒であるとします。Google Cloud は有効なコネクション ドレインのタイムアウトとして 200 秒を使用しているため、Google Cloud が既存の接続を終了させるまで既存の接続は 200 秒間存続できます。バックエンドがマネージド インスタンス グループの場合、インスタンスを削除するオペレーションは少なくとも 200 秒遅れます。
仕様
コネクション ドレインは、次のロードバランサに属するバックエンド サービスで利用できます。
コネクション ドレインは、Traffic Director のデプロイに含まれるバックエンド サービスでも使用できます。
コネクション ドレインのタイムアウトが設定されており、インスタンスがインスタンス グループから削除されるか、エンドポイントがゾーン NEG から削除された場合、Google Cloud ロードバランサと Traffic Director は次のように動作します。
削除されたインスタンスやエンドポイントに新しい接続は送信されません。
削除されたインスタンスまたはエンドポイントへの既存の接続をサポートするアクティブな TCP セッションは、コネクション ドレインに構成したタイムアウトが経過するまで維持されます。タイムアウト期間が終了すると、Google Cloud は削除されたインスタンスまたはエンドポイントの既存の接続を終了します。
コネクション ドレインのタイムアウトを設定しない場合、またはコネクション ドレインのタイムアウトがゼロ(0)に設定されている場合、Google Cloud は削除されたインスタンスまたはエンドポイント上の既存の接続をできるだけ早く終了します。
コネクション ドレインの有効化
Console
ロードバランサの更新
- Google Cloud Console の [負荷分散] ページに移動します。
[負荷分散] に移動 - ロードバランサの [編集] をクリックするか、ロードバランサを新たに作成します。
- [バックエンドの設定] をクリックします。
- バックエンド サービスの最後にある [詳細設定] をクリックします。
- [コネクション ドレインのタイムアウト] フィールドに、
0
~3600
の値を入力します。0
を設定すると、コネクション ドレインが無効になります。
Traffic Director の更新
- Cloud Console の [Traffic Director] ページに移動します。
[Traffic Director] に移動 - サービスの名前をクリックします。
- サービスの最後にある [詳細構成] をクリックします。
- [コネクション ドレインのタイムアウト] フィールドに、
0
~3600
の値を入力します。0
を設定すると、コネクション ドレインが無効になります。 - [保存] をクリックします。
gcloud
--connection-draining-timeout
フラグを使用して、新規または既存のバックエンド サービスでコネクション ドレインを有効にします。次の例は、コネクション ドレインのタイムアウト時間を変更する方法を示しています。
既存の外部 HTTP(S) ロードバランサ、SSL プロキシ ロードバランサ、TCP プロキシ ロードバランサ、または Traffic Director のデプロイの場合:
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: インスタンスまたはエンドポイントへの既存の接続が終了するまで待機する秒数(
0
~3600
秒)。0
を設定すると、コネクション ドレインが無効になります。コネクション ドレインのタイムアウトは、バックエンド サービスのすべてのバックエンドに適用されます。gcloud compute backend-services edit
コマンドを使用して、既存のバックエンド サービスを更新することもできます。
API
インスタンスやエンドポイントを作成または更新するときに API でコネクション ドレインを有効にするには、それぞれの API URI に、リクエスト本文に connectionDraining
フィールドを含めたリクエストを送信します。次の例は、既存のバックエンド サービスを編集してこの属性を設定する方法を示しています。その他の必須属性については、各ロードバランサのドキュメントをご覧ください。
外部 HTTP(S) ロードバランサ、SSL プロキシ ロードバランサ、TCP プロキシ ロードバランサ、Traffic Director の場合:
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
は、ロードバランサまたは Traffic Director のデプロイを含むプロジェクト ID です。BACKEND_SERVICE
は、ロードバランサまたは Traffic Director のデプロイで使用されるバックエンド サービスです。CONNECTION_TIMEOUT_SECS
は、インスタンス グループまたは NEG からインスタンスが削除されるまで待機する秒数(0~3,600 秒)です。このタイムアウト時間は、バックエンド サービスによって参照されるすべてのインスタンス グループまたは NEG に適用されます。
次のステップ
バックエンド サービスの全般的な情報については、バックエンド サービスの概要をご覧ください。