負荷分散処理能力に基づくスケーリング

このドキュメントでは、外部 HTTP(S) ロードバランサの処理能力に基づいてマネージド インスタンス グループ(MIG)をスケーリングする方法について説明します。この方法では、グループが最大能力のうちの一定の割合(この値は構成可能)に達したことをロードバランサが示したときに、自動スケーリングによって VM インスタンスがグループに追加または削除されます。最大能力は、バックエンド インスタンス グループの、選択されている分散モードターゲット容量によって定義されます。

また、CPU 使用率またはモニタリング指標に基づいて MIG をスケーリングすることもできます。

始める前に

HTTP(S) 負荷分散処理能力に基づくスケーリング

Compute Engine ではインスタンス グループ内での負荷分散のサポートが提供されています。インスタンスの負荷に基づいてスケーリングするオートスケーラーをセットアップすることによって、自動スケーリングを負荷分散と組み合わせて使用できます。

外部 HTTP(S) ロードバランサは、その URL マップに従ってバックエンド サービスにリクエストを分散します。ロードバランサには 1 つまたは複数のバックエンド サービスを接続できます。それぞれのバックエンド サービスが、インスタンス グループまたはネットワーク エンドポイント グループ(NEG)バックエンドをサポートします。バックエンドがインスタンス グループである場合、外部 HTTP(S) ロードバランサでは UTILIZATIONRATE の 2 つの分散モードを使用できます。UTILIZATION では、インスタンス グループ内のインスタンスの平均バックエンド使用率の最大ターゲットを指定できます。RATE では、インスタンス単位またはグループ単位での 1 秒あたりのリクエスト数のターゲット数を指定する必要があります(グループ全体の最大レートを指定できるのは、ゾーン インスタンス グループのみです。リージョン マネージド インスタンス グループでは、グループ単位の最大レートを定義できません)。

分散モードとターゲット容量を指定することで、バックエンド VM が最大容量に達したと Google Cloud が判断する条件を定義します。Google Cloud は、容量が残っている正常な VM にトラフィックを送信しようとします。すべての VM がすでに容量に達すると、ターゲット使用率またはレートの超過が発生します。

外部 HTTP(S) ロードバランサのインスタンス グループ バックエンドにオートスケーラーを接続すると、オートスケーラーはマネージド インスタンス グループをスケーリングして負荷分散の処理能力の割合を維持します。

たとえば、マネージド インスタンス グループの負荷分散処理能力が、インスタンスあたり 100 RPS であると仮定します。HTTP(S) 負荷分散ポリシーを使用するオートスケーラーを作成し、0.8 つまり 80% のターゲット使用率レベルを維持するように設定している場合、オートスケーラーは、マネージド インスタンス グループからインスタンスを追加または削除して、80% の処理能力つまりインスタンスあたり 80 RPS を維持します。

次の図は、オートスケーラーとマネージド インスタンス グループおよびバックエンド サービスとのやり取りを示しています。

オートスケーラー、マネージド インスタンス グループ、負荷分散バックエンド サービスの間の関係
オートスケーラーは、バックエンド サービスで定義されている、マネージド インスタンス グループの処理能力を監視し、ターゲット使用率に基づいてスケーリングします。この例では、処理能力は maxRatePerInstance の値で測定されています。

適用可能な負荷分散構成

負荷分散処理能力は 3 つのうちのいずれかを設定できます。バックエンドを最初に作成する際に、最大バックエンド使用率、インスタンスごとの 1 秒あたりの最大リクエスト数、グループ全体での 1 秒あたりの最大リクエスト数から選択できます。最大バックエンド使用率秒 / インスタンスあたりの最大リクエスト数の値は、インスタンスの追加または削除によって制御できるため、オートスケーラーではこれらの設定のみを使用できます。たとえば、あるバックエンドがインスタンスにつき毎秒 10 個のリクエストを処理するように設定し、その能力の 80% を維持するようにオートスケーラーを構成している場合、インスタンス / 秒あたりのリクエスト数が変化するとオートスケーラーはインスタンスを追加または削除できます。

グループあたりの最大リクエスト数の設定はインスタンス グループ内のインスタンス数とは無関係であるため、オートスケーラーではこの設定を使用できません。ロードバランサは、グループ内のインスタンス数に関係なく、グループあたりの最大数のリクエストをそのインスタンス グループに送信し続けます。

たとえば、グループあたり 1 秒あたりの最大 100 個のリクエスト数を処理するようにバックエンドを設定している場合、そのグループのインスタンス数が 2 であっても 100 であっても、ロードバランサはそのグループに 1 秒あたり 100 個のリクエストを送信します。この値は調整できないため、オートスケーラーでは、グループごとに 1 秒あたりの最大リクエスト数を使用する負荷分散構成を使用できません。

負荷分散処理能力に基づく自動スケーリングの有効化

Console


  1. Cloud Console の [インスタンス グループ] ページに移動します。

    [インスタンス グループ] ページに移動

  2. インスタンス グループがある場合は、それを選択して [グループを編集] をクリックします。インスタンス グループがない場合は、[インスタンス グループを作成] をクリックします。
  3. [自動スケーリング] で [オン] を選択します。
  4. [自動スケーリングの基準] で [HTTP 負荷分散の使用率] を選択します。
  5. [ターゲットの負荷分散使用率] に入力します。この値は割合として扱われます。たとえば、HTTP 負荷分散使用率 60% を指定するには「60」と入力します。
  6. このインスタンス グループに配置するインスタンスの最大数を指定します。最小数やクールダウン期間も設定できます。クールダウン期間とは、仮想マシンが起動した後、オートスケーラーが仮想マシンの情報収集を開始するまでに待機する秒数です。インスタンスの初期化中に収集されたデータは自動スケーリングでの使用には適さないため、この期間を設定することによってインスタンスの初期化の時間を確保できます。クールダウン期間のデフォルト値は 60 秒です。
  7. 変更を保存します。

gcloud


処理能力に基づいてスケーリングするオートスケーラーを有効にするには、set-autoscaling サブコマンドを使用します。たとえば次のコマンドでは、対象のマネージド インスタンス グループが処理能力の 60% を維持するようにスケーリングするオートスケーラーが作成されます。オートスケーラーを作成する場合は、--target-load-balancing-utilization パラメータだけではなく、--max-num-replicas パラメータも必要です。

gcloud compute instance-groups managed set-autoscaling example-managed-instance-group \
    --max-num-replicas 20 \
    --target-load-balancing-utilization 0.6 \
    --cool-down-period 90

必要に応じて、--cool-down-period フラグを使用できます。これは、新しいインスタンスが開始された後、オートスケーラーが、その新しいインスタンスからのデータを算入するまでの秒数をオートスケーラーに指示します。インスタンスの初期化中に収集された使用率データは信頼性が低く、自動スケーリングには不適切であるため、このクールダウン期間を設定することによってインスタンスの初期化の時間を確保できます。クールダウン期間が経過すると、オートスケーラーはインスタンスの使用率データの収集を開始し、そのグループでスケーリングの必要があるかどうかを判断します。クールダウン期間のデフォルト値は 60 秒です。

describe サブコマンドを使用して、オートスケーラーが正常に作成されたことを確認できます。

gcloud compute instance-groups managed describe example-managed-instance-group

利用可能な gcloud コマンドとフラグの一覧については、gcloud リファレンスをご覧ください。

API


注: 自動スケーリングはマネージド インスタンス グループの機能ですが、個別の API リソースです。自動スケーリング用の API リクエストを作成するときは、その点に注意してください。

API で、autoscalers.insert メソッドに対する POST リクエストを行います。

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/autoscalers/

リクエスト本文には name フィールド、target フィールド、autoscalingPolicy フィールドを含める必要があります。autoscalingPolicyloadBalancingUtilization を定義する必要があります。

必要に応じて、coolDownPeriodSec フィールドを使用できます。これは、新しいインスタンスが開始された後、オートスケーラーが、その新しいインスタンスからのデータを算入するまでの秒数をオートスケーラーに指示します。インスタンスの初期化中に収集された使用率データは信頼性が低く、自動スケーリングには不適切であるため、このクールダウン期間を設定することによってインスタンスの初期化の時間を確保できます。クールダウン期間が経過すると、オートスケーラーはインスタンスの使用率データの収集を開始し、そのグループでスケーリングの必要があるかどうかを判断します。クールダウン期間のデフォルト値は 60 秒です。

{

 "name": "example-autoscaler",
 "target": "zones/us-central1-f/instanceGroupManagers/example-managed-instance-group",
 "autoscalingPolicy": {
    "maxNumReplicas": 20,
    "loadBalancingUtilization": {
       "utilizationTarget": 0.8
     },
    "coolDownPeriodSec": 90
  }
}

負荷分散処理能力に基づく自動スケーリングの有効化の詳細については、チュートリアルの Compute Engine でウェブサービスのグローバルな自動スケーリングを行うを完了してください。

他のタイプのロードバランサのスケーリング

他のタイプの Google Cloud ロードバランサのバックエンドとして使用されるマネージド インスタンス グループを自動的にスケーリングするには、別のオートスケーラー ポリシーを使用します。