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

最も単純な自動スケーリングの形式は、仮想マシン(VM)インスタンスのグループの CPU 使用率に基づいてスケーリングすることです。インスタンスのグループの HTTP(S) 負荷分散処理能力に基づいてスケーリングすることもできます。

このドキュメントではその両方の選択肢について説明しています。

始める前に

CPU 使用率に基づくスケーリング

マネージド インスタンス グループ(MIG)の平均 CPU 使用率に基づいて自動スケーリングできます(MIG)。このポリシーを使用すると、グループ内のインスタンスの CPU 使用率を収集して、スケーリングが必要かどうかを判断するようにオートスケーラーに指示されます。オートスケーラーが維持するターゲット CPU 使用率を設定することにより、オートスケーラーはそのレベルを維持するように動作します。

オートスケーラーでは、ターゲット CPU 使用率レベルは、インスタンス グループ内のすべての vCPU の経時的な平均使用量の比率として扱われます。vCPU 全体の平均使用率がターゲット使用率を超えている場合、オートスケーラーは仮想マシンを追加します。たとえば、ターゲット使用率を 0.75 に設定すると、インスタンス グループ内のすべての vCPU の平均使用率を 75% に維持するようにオートスケーラーに指示されます。

CPU 使用率に基づく自動スケーリングの有効化

CPU 使用率に基づく自動スケーリングの有効化の詳細については、チュートリアルのスケーラビリティの高いアプリケーションでの自動スケーリングの使用を完了してください。

Console


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

gcloud


set-autoscaling サブコマンドを使用して、マネージド インスタンス グループに対する自動スケーリングを有効にします。たとえば次のコマンドでは、目標の CPU 使用率が 75% のオートスケーラーを作成しています。オートスケーラーを作成するときは、--target-cpu-utilization パラメータだけでなく --max-num-replicas パラメータも必要です。

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

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

instance-groups managed describe サブコマンドを使用して、自動スケーリングが正常に有効化されていることを確認できます。このサブコマンドでは、該当するマネージド インスタンス グループと、そのインスタンス グループに対するすべての自動スケーリング機能に関する情報が出力されます。

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

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

API


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

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

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

リクエストの本文には nametargetautoscalingPolicy フィールドを含める必要があります。autoscalingPolicy では cpuUtilizationmaxNumReplicas を定義する必要があります。

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

{
 "name": "example-autoscaler",
 "target": "https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instanceGroupManagers/example-managed-instance-group",
 "autoscalingPolicy": {
    "maxNumReplicas": 10,
    "cpuUtilization": {
       "utilizationTarget": 0.8
     },
    "coolDownPeriodSec": 90
  }
}

オートスケーラーでの高い CPU 使用率の処理方法

CPU 使用率が高い期間中に使用率が 100% に近づくと、オートスケーラーはそのグループがすでに過負荷状態である可能性があると予測します。そのような場合、オートスケーラーは仮想マシンの数を最大で 50% 増やします。

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

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

HTTP(S) ロードバランサバックエンド サービスに負荷を分散し、バックエンド サービスがインスタンス グループ間にトラフィックを分配します。バックエンド サービス内で、そのバックエンド サービスに関連付けられているインスタンス グループの負荷分散処理能力を、最大 CPU 使用率、1 秒あたりの最大リクエスト数(RPS)、またはそのグループの 1 秒あたりの最大リクエスト数として定義できます。あるインスタンス グループがその処理能力に達すると、バックエンド サービスは別のインスタンス グループにトラフィックの送信を開始します。

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

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

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

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

適用可能な負荷分散構成

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

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

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

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

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

Console


  1. Google Cloud Platform 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://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/autoscalers/

リクエストの本文には nametargetautoscalingPolicy フィールドを含める必要があります。autoscalingPolicy では loadBalancingUtilization を定義する必要があります。

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

{

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

ネットワーク負荷分散に基づくスケーリング

ネットワーク ロードバランサでは、TCP や UDP などの下位レベルのプロトコルを使用して負荷が分散されます。ネットワーク負荷分散によって、HTTP(S) に基づかない SMTP などのトラフィックを分散できます。

CPU 使用率やカスタム指標を使用して、ネットワーク ロードバランサのターゲット プールの一部であるマネージド インスタンス グループをスケーリングできます。詳しくは、CPU 使用率に基づくスケーリングまたは Stackdriver Monitoring の指標に基づくスケーリングをご覧ください。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Compute Engine ドキュメント