コネクション ドレインとは、仮想マシン(VM)インスタンスがインスタンス グループから削除されたときや、エンドポイントが範囲内のゾーンにあるネットワーク エンドポイント グループ(NEG)から削除されたときに、既存の進行中リクエストを完了するための時間を確保するプロセスです。
このページの情報は、インスタンス グループと、範囲内のゾーンの次のタイプの 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 秒遅れます。
コネクション ドレインの仕様の一覧は次のとおりです。
コネクション ドレインは、次のロードバランサに属するバックエンド サービスで利用できます。
- グローバル外部アプリケーション ロードバランサ
- リージョン外部アプリケーション ロードバランサ
- 従来のアプリケーション ロードバランサ
- 外部プロキシ ネットワーク ロードバランサ
- リージョン内部プロキシ ネットワーク ロードバランサ
- クロスリージョン内部プロキシ ネットワーク ロードバランサ
- リージョン内部アプリケーション ロードバランサ
- クロスリージョン内部アプリケーション ロードバランサ
- 内部パススルー ネットワーク ロードバランサ
- バックエンド サービスベースの外部パススルー ネットワーク ロードバランサ
内部パススルー ネットワーク ロードバランサと外部パススルー ネットワーク ロードバランサの両方が、TCP、UDP(プレビュー)、および TCP 以外のその他のプロトコルのコネクション ドレインをサポートしています。
コネクション ドレインは、Cloud Service Mesh のデプロイメントに含まれるバックエンド サービスでも使用できます。
コネクション ドレインのタイムアウトが設定されており、インスタンスがインスタンス グループから削除されるか、エンドポイントがゾーン NEG から削除された場合、Google Cloud ロードバランサと Cloud Service Mesh は次のように動作します。
削除されたインスタンスやエンドポイントに新しい接続は送信されません。
削除されたインスタンスまたはエンドポイントへの既存の接続をサポートするアクティブなセッションは、コネクション ドレインに構成したタイムアウトが経過するまで維持されます。タイムアウト期間が終了すると、Google Cloud は削除されたインスタンスまたはエンドポイントの既存の接続を終了します。
コネクション ドレインのタイムアウトを設定しない場合、またはコネクション ドレインのタイムアウトがゼロ(0)に設定されている場合、Google Cloud は削除されたインスタンスまたはエンドポイント上の既存の接続をできるだけ早く終了します。
接続プールを使用している場合、以前に確立した接続を使用する新しいリクエストが、ドレインされている VM でまだ受信され、それらの VM が最終的に削除された際に接続エラーの原因になることがあります。
コネクション ドレインを有効にするには、次の手順を完了します。
コンソール
ロードバランサの更新
- Google Cloud コンソールの [ロード バランシング] ページに移動します。
[ロード バランシング] に移動 - ロードバランサの [編集] をクリックするか、ロードバランサを新たに作成します。
- [バックエンドの構成] をクリックします。
- バックエンド サービスの最後にある「高度な構成」をクリックします。
- [コネクション ドレインのタイムアウト] フィールドに、
0
~3600
の値を入力します。0
を設定すると、コネクション ドレインが無効になります。
Cloud Service Mesh を更新する
- Google Cloud コンソールの [Cloud Service Mesh] ページに移動します。
Cloud Service Mesh に移動する - サービスの名前をクリックします。
- サービスの最後にある「高度な構成」をクリックします。
- [コネクション ドレインのタイムアウト] フィールドに、
0
~3600
の値を入力します。0
を設定すると、コネクション ドレインが無効になります。 - [保存] をクリックします。
gcloud
--connection-draining-timeout
フラグを使用して、新規または既存のバックエンド サービスでコネクション ドレインを有効にします。次の例は、コネクション ドレインのタイムアウト時間を変更する方法を示しています。
既存のグローバル ロードバランサまたはクロスリージョン ロードバランサの場合:
gcloud compute backend-services update BACKEND_SERVICE \ --global \ --connection-draining-timeout=CONNECTION_TIMEOUT_SECS
既存のリージョン ロードバランサの場合:
gcloud compute backend-services update BACKEND_SERVICE \ --region=REGION \ --connection-draining-timeout=CONNECTION_TIMEOUT_SECS
プレースホルダを有効な値に置き換えます。
- BACKEND_SERVICE: 更新するバックエンド サービス。
- REGION: 更新するバックエンド サービスのリージョン(該当する場合)
CONNECTION_TIMEOUT_SECS: インスタンスまたはエンドポイントへの既存の接続を終了させるまで待機する秒数(
0
~3600
秒)。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 に適用されます。
次のステップ
バックエンド サービスの全般的な情報については、バックエンド サービスの概要をご覧ください。