オートスケーラーによる判断の理解


自動スケーリングでは、マネージド インスタンス グループ(MIG)に VM が自動的に追加(スケールアウト)または削除(スケールイン)されます。このドキュメントでは、オートスケーラーが MIG をスケーリングするタイミングの決定方法について説明します。

MIG に対するオートスケーラーを構成すると、オートスケーラーは継続的にグループをモニタリングして、グループの推奨サイズを、安定化期間のピーク負荷に対応するために必要な仮想マシン(VM)インスタンスの数に設定します。

推奨サイズには、自動スケーリング ポリシーで設定したインスタンスの最小数と最大数の制約があります。

自動スケーリング ポリシーにスケールインの制御が含まれている場合、それによって推奨サイズはさらに制約されます。

予測自動スケーリングを有効にすると、オートスケーラーが過去の CPU 使用率のパターンを使用して将来の負荷を予測し、その予測に基づいてグループの推奨サイズを設定します。

オートスケーラーの推奨サイズに対する MIG のレスポンスは、オートスケーラーの mode をどのように構成したかによって変わります。

  • ON。MIG はターゲット サイズを推奨サイズに設定し、Compute Engine が MIG をターゲット サイズに合わせて自動的にスケールアウトします。
  • ONLY_SCALE_OUT。MIG のターゲット サイズは、推奨サイズの増加に応じてのみ増加できます。
  • OFF。ターゲット サイズは推奨サイズの影響を受けません。ただし、推奨サイズは引き続き計算されます。

オートスケーラーの構成が削除された場合、推奨サイズは計算されなくなります。

目標と実際の使用率の指標のギャップ

指標ベースのシグナルで自動スケーリング ポリシーを使用すると、小規模なインスタンス グループでは、インスタンス グループの実際の使用率と目標の使用率が大きく離れていることがあります。これは、オートスケーラーが、使用率データの解釈時や、追加または削除するインスタンス数の判断時に、値を切り上げまたは切り捨てることによって常に慎重な動作をするためです。これにより、オートスケーラーがリソースを必要な数よりも少なく追加することや、必要以上に削除することを防止します。

たとえば、目標使用率を 0.7 に設定していて、アプリケーションがその目標使用率を超えている場合、オートスケーラーは使用率を 0.7 前後に減らすために 1.5 台の仮想マシン(VM)の追加が必要と判断したとします。VM インスタンスを 1.5 台追加することはできないため、オートスケーラーは切り上げて 2 台のインスタンスを追加します。これにより、平均 CPU 使用率が 0.7 未満に低下することがありますが、アプリのリソースは十分に確保されます。

同様に、VM インスタンスを 1.5 台削除することで使用率を 0.7 に近くまで上げられると判断した場合には、インスタンスは 1 台のみ削除されます。

より多くの VM インスタンスがある大規模なグループでは、使用率は多数のインスタンスで分配されるため、VM インスタンスの追加または削除によって、実際の使用率と目標使用率とのギャップは小さくなります。

別の自動スケーリング シグナルでスケジュール ベースの自動スケーリングを使用する場合、実際のスケジュールでは、使用率の要件よりも多くの VM が必要になることがあります。こうした状況では、自動スケーリング スケジュールでインスタンス グループの推奨サイズが決まるため、実際の使用率は目標使用率より低くなります。

リージョン MIG と不均一な VM 分散

ゾーンの障害や不均一に分散されたワークロードが原因で、リージョンのゾーン間でインスタンス数のバランスが崩れると、オートスケーラーは実際の使用率が平均よりも高いゾーンで、より多くのインスタンスを実行中の状態にします。Compute Engine はこの予防措置を取ることで、一部のゾーンに他のゾーンよりも高負荷がかかっているとしても、リージョン全体ならびに個々のゾーンすべてで高可用性を保証します。

スケールアウトの遅延

自動スケーリングを構成する際、VM の初期化にかかる時間を反映した初期化期間を指定します。オートスケーラーは、初期化中でないインスタンスの平均使用率が目標使用率を超えている場合にのみ、スケールアウトを推奨します。

インスタンスの初期化に要する時間よりも大幅に長い初期化期間を設定すると、オートスケーラーが適正な使用率データを無視して、グループに必要なサイズが過小評価される可能性があります。

スケールインの遅延

オートスケーラーはスケールインの目的で、直近の 10 分間、または設定した初期化期間のいずれか長い期間のピーク負荷に基づいて適切なターゲット サイズを計算します。この時間を安定化期間といいます。

安定化期間に使用量をモニタリングすると、オートスケーラーで以下が可能になります。

  • インスタンス グループから収集した使用状況情報が安定していることを確認できます。
  • オートスケーラーが連続して頻繁にインスタンスを追加または削除することを回避できます。
  • 安定化期間の負荷に小規模なグループサイズで対応できると判断した場合にのみ、インスタンスを削除できます。
  • アプリケーションの新しい VM の初期化に 10 分以上かかる場合、グループは安定化期間として初期化期間を使用します。 これにより、VM を削除するオートスケーラーの決定は、処理能力を回復するのにかかる時間を考慮したものになります。

この安定化期間は、スケールインの遅延のように見えることもありますが、実際には自動スケーリングの組み込み機能によるものです。安定化期間はまた、新しいインスタンスがマネージド インスタンス グループに追加された場合に、インスタンスは初期化期間を完了するか、削除対象になる前に少なくとも 10 分間実行されます。

グループをスケールインするかどうかの判断時には、新規インスタンスに対する初期化期間は無視されます。

遅延の原因となるコネクション ドレイン

グループが属するバックエンド サービスコネクション ドレインが有効になっている場合は、コネクション ドレインが有効のタイムアウトが経過してから VM インスタンスが削除されるまでに 60 秒ほどかかることがあります。

スケールインの制御

オートスケーラーのスケールインの制御を構成する際、スケールインの速度を設定します。オートスケーラーにより、構成された速度よりも速くスケールインされることはありません。

スケールインの制御のあるオートスケーラーとないオートスケーラー。

  1. 負荷が減少すると、オートスケーラーは(安定化期間)に観測されたピーク負荷を処理するために必要なレベルまでグループのサイズを調整します。これは、スケールインの制御の有無にかかわらず同じように動作します。
  2. スケールインの制御のないオートスケーラーは、直近で観測された負荷を処理するために必要なインスタンスのみを保持します。安定化期間後、オートスケーラーは不要なインスタンスをすべて一度に削除します。負荷が急激に低下すると、インスタンス グループのサイズが大幅に減少する場合があります。
  3. スケールインの制御のあるオートスケーラーは、構成された期間で削除できる VM インスタンスの数を制限します(この場合は 20 分間で 10 台の VM)。これにより、インスタンスの削除速度が低下します。
  4. 負荷が急増する場合、オートスケーラーは新しいインスタンスを追加することで負荷を処理します。しかし、初期化に時間がかかるため、新しい VM には負荷を処理するための準備ができていません。スケールインの制御がある場合、それまでのキャパシティが維持されるため、既存の VM でこのスパイクに対応できます。

スケールインの速度を制御するには、追跡時間枠内でのオートスケーラーの最大許容削減数を構成します。

  • 最大許容削減数maxScaledInReplicas: VM インスタンスの数または割合)。指定された追跡時間枠内においてワークロードで(グループのピークサイズから)削除できるインスタンスの数。このパラメータを使用して、グループをどれだけスケールインできるかを制限します。これにより、より多くのインスタンスがサービスを開始するまで、発生しうる負荷スパイクに引き続き対応できます。最大許容削減数が小さいほど、スケールインの速度は遅くなります。
  • 追跡時間枠timeWindowSec: 秒)一時的な負荷減少の後に負荷スパイクが発生する可能性が高く、最大許容削減数を超えてグループサイズをスケールインしたくない時間。このパラメータで、オートスケーラーが過去の負荷を処理するのに十分なピークサイズを決定する際の時間枠を定義します。オートスケーラーは、追跡時間枠で観測されたピークサイズから最大許容削減数を差し引いた値よりも小さいサイズには変更されません。追跡時間枠が長いほど、オートスケーラーは過去のピーク負荷を重視します。これにより、より慎重な安定したスケールインが可能になります。

スケールインの制御が設定されたオートスケーラーでは、スケールイン オペレーションが、追跡時間枠で観測されるピークサイズからの最大許容削減数に制限されます。オートスケーラーは次の手順を使用します。

  1. 追跡時間枠内で観測された過去のピークサイズを継続的にモニタリングします。
  2. 最大許容削減数を基に、制限付きのスケールイン サイズ(ピークサイズ: maxScaledInReplicas)を計算します。
  3. グループの推奨サイズを制限付きのスケールイン サイズに設定します。たとえば、オートスケーラーがインスタンス グループを 20 台の VM にサイズ変更しようとしても、スケールインの制限で許可されているサイズ変更が 40 台であった場合には、推奨サイズは 40 台に設定されます。

スケールインの制御が設定されている場合、オートスケーラーは、構成された追跡時間枠内のインスタンス グループのピークサイズを継続的にモニタリングし、直近の負荷に対応するのに十分なサイズを決定します。オートスケーラーは、観測されたピークサイズから測定された最大許容削減数を超えてスケールインしません。

スケールインの制御のあるオートスケーラー。

たとえば、上の図では、追跡時間枠が 30 分、VM の最大許容削減数が 20 台に構成されています。

  1. 負荷が減少すると、オートスケーラーによって 20 台の VM が削除されます。これは、スケールインの制御で構成されている最大許容削減数です。
  2. 負荷が増減すると、オートスケーラーは過去 30 分間の追跡時間枠を継続的にモニタリングし、直近の負荷を処理するのに十分なピークサイズを決定します。このピークサイズは、スケールインの制御の基準として使用され、スケールインの速度を制限します。過去 30 分間のピークサイズが 70 台の VM で、最大許容削減数が 20 台の VM に設定されている場合、オートスケーラーは VM を 50 台までスケールインできます。現在のサイズが 65 台の VM の場合、オートスケーラーは 15 台の VM のみを削除できます。
  3. 負荷が減少し続ける場合、オートスケーラーは VM インスタンスを削除し続けますが、スケールインの速度は、過去 30 分間に測定されたピーク インスタンス グループ サイズから最大 20 台の VM までに制限されます。

グループサイズの最大許容削減数の削除が一度に行われる可能性があるため、アプリケーションがその数のインスタンスを一度に失っても問題ないように最大許容削減数を構成する必要があります。最大許容削減数パラメータを使用して、アプリケーションが許容できる処理能力の削減量を指定します。

自動スケーリングで削除できる VM インスタンスの数を制限し、観測される追跡時間枠を増やすことで、負荷の急増や初期化時間の長期化が発生するアプリケーションで可用性が向上します。具体的には、インスタンス グループのサイズが負荷の大幅な減少に応じて一度に減少するのではなく、時間の経過とともに徐々に減少するようになります。スケールインの直後に負荷の急増が起こる場合でも、残りの VM 数で急増に対応し、許容範囲内に収められるはずです。また、急増に対応するために起動する VM の数も少なくなります。

スケールインの制御は、ゾーン MIG とリージョン MIG の両方の自動スケーリングの構成できます。どちらの場合も構成は同じです。どのようなグループサイズでも機能します。

スケールインの制御とオートスケーラーの安定化

スケールインの制御を構成しても、オートスケーラーの組み込み安定化メカニズムがオフになるわけではありません。オートスケーラーは常に、インスタンス グループのサイズを、安定化期間中に観測されたピーク負荷に対応するために必要なレベルに維持します。スケールインの制御を使用すると、インスタンス グループのサイズ変更速度を制御する別のメカニズムを追加できます。

オートスケーラーの組み込み:
安定化期間
スケールインの制御:
追跡時間枠
構成可能か。 構成不可 構成可能
モニタリング対象は何か。 直近 10 分間または初期化期間のいずれか長い方のピーク負荷をモニタリングします。 追跡時間枠で設定された直近の期間におけるインスタンス グループのピークサイズ
どのように役立つか。 インスタンス グループのサイズが、直近 10 分間または初期化期間のいずれか長い期間に観測されたピーク負荷を十分に満たせるようにする。 指定された時間枠で負荷が急増した場合に、ワークロードが許容できる数を超える VM インスタンス数のインスタンス グループのサイズ縮小が行われないようにする。

オートスケーラー モードによるスケールインの制御

MIG が自動スケーリングされていない場合に自動スケーリングを有効にする場合、ほぼ同じ内容ながら一部の異なるシナリオが 2 つ考えられます。これらは、自動スケーリングを初めて構成する場合と、自動スケーリングが構成されているが一時的に制限されているかオフになっている場合で異なります。

オートスケーラーの初回構成

自動スケーリングされていない MIG があり、自動スケーリングを初めて構成する場合、オートスケーラーは現在の MIG サイズを開始点として使用します。スケールインする前に、オートスケーラーは安定化期間に基づき、スケールインの制御を使用してスケールイン速度を制限します。

オートスケーラーの初回構成。

オートスケーラー モードの変更

自動スケーリング モードでは、自動スケーリング アクティビティを一時的にオフまたは制限できます。オートスケーラーの構成は維持され、オートスケーラーはオフまたは制限されている間もバックグラウンドで計算を継続します。オートスケーラーは、オフまたは制限モードのとき、バックグラウンド計算でスケールインの制御を考慮します。すべての自動スケーリング アクティビティは、自動スケーリングを再度オンにしたとき、または制限を解除したときに、最新の計算を使用して再開されます。

スケールインの制御のあるオートスケーラーの再開。

  1. オンになっているオートスケーラーは通常どおりに動作します(この場合はスケールインの制御を使用)。
  2. オートスケーラーをオフにしても、負荷に基づいて推奨インスタン グループのサイズが計算されます。オートスケーラーの計算では、引き続きスケールインの制御が考慮されます。ただし、オートスケーラーがオフの場合、オートスケーラーはサイズ計算を適用しません。インスタンス グループのサイズは、オートスケーラーが再びオンになるまで一定になります。
  3. オートスケーラーを再度オンにすると、以前に計算されたサイズがすぐに適用されます。これにより、適切なサイズにすばやくスケーリングできます。オートスケーラーを再度有効にすると、急激なスケールイン(この場合は、VM インスタンスの数が 80 台から 40 台)が発生する可能性がありますが、バックグラウンド計算はすでにスケールインの制御を考慮しているため、これは安全です。

予測自動スケーリング

仕組みなど、予測自動スケーリングの詳細については、予測に基づくスケーリングをご覧ください。

インスタンスの停止準備

スケールインする場合、オートスケーラーは削除する VM インスタンスの数を決定します。オートスケーラーは、次のようないくつかの要因に基づいて、削除する VM インスタンスの優先順位を決定します。

  • なんらかの理由で実行されていない VM。
  • 更新、再起動、置換などの破壊的変更が行われているか、スケジュールされている VM。
  • インスタンス テンプレートの目的のバージョンにまだ更新されていない VM。
  • 自動スケーリングのシグナルが最も低い VM。たとえば、CPU 使用率に基づいてスケーリングするように MIG を構成し、グループをスケールインする必要がある場合、オートスケーラーは CPU 使用率が最も低い VM の削除を試みます。

インスタンスを停止する前に、既存の接続の切断、アプリやアプリサーバーの正常なシャットダウン、ログのアップロードなど、特定のタスクを実行する必要があります。シャットダウン スクリプトを使用すると、それらのタスクを実行するようにインスタンスに指示できます。シャットダウン スクリプトは、停止リクエストの発行からインスタンスの実際の停止までの短い期間にベスト エフォート型で実行されます。この期間中に、Compute Engine はシャットダウン スクリプトを実行して、スクリプトで指定されたタスクを実行しようとします。

これは、マネージド インスタンス グループで負荷分散を使用している場合に特に役に立ちます。インスタンスが正常でない状態になった場合、そのインスタンスが正常でないことをロードバランサが認識するまでに時間がかかることがあるために、ロードバランサはそのインスタンスに新しいリクエストを送信し続けることがあります。シャットダウン スクリプトを使用すれば、そのインスタンスはシャットダウン時に正常でないことを報告できるため、ロードバランサはそのインスタンスへのトラフィックの送信を停止できます。負荷分散のヘルスチェックの詳細については、ヘルスチェックの概要をご覧ください。

シャットダウン スクリプトの詳細については、シャットダウン スクリプトをご覧ください。

インスタンスのシャットダウンについての詳細は、インスタンスの停止または削除に関するドキュメントをご覧ください。

自動スケーリング グラフとログのモニタリング

Compute Engine には複数のグラフとログがあり、これを使用してマネージド インスタンス グループの動作をいつでもモニタリングできます。

Google Cloud コンソールでグラフとログにアクセスできます。

  1. Google Cloud コンソールで、[インスタンス グループ] ページに移動します。

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

  2. 表示するマネージド インスタンス グループの名前をクリックします。
  3. マネージド インスタンス グループのページで、[モニタリング] タブを選択します。

モニタリングのグラフには、次の指標の変化が表示されます。

  • グループサイズ
  • オートスケーラーの使用率
  • CPU 使用率
  • ディスク I/O(バイト)
  • ディスク I/O(オペレーション)
  • ネットワークのバイト
  • ネットワークのパケット

各グラフのタイトルの横のツールチップには、表示されている指標に関するその他のコンテキストの詳細が示されています。

ページの下部にある [ログ] パネルには、マネージド インスタンス グループのイベントログの一覧が表示されます。ログを表示するには、展開矢印をクリックします。

すべてのグラフとログは単一の時間枠にバインドされています。この時間枠は、時間範囲セレクタを使用してカスタマイズできます。グラフをクリックしてドラッグすることで、特定のイベントを拡大し、選択した期間内のグラフとログを分析できます。

予測自動スケーリングのモニタリング

Compute Engine には、オートスケーラー予測をモニタリングするグラフが用意されています。このグラフを表示するには、最初のグラフで [グループサイズ] のタイトルをクリックし、[予測自動スケーリング] を選択します。

自動スケーリングが有効になっている場合は、オートスケーラー予測によるインスタンス グループのサイズの決定方法を確認できます。自動スケーリングが有効になっていない場合でも、オートスケーラー予測を確認して、グループサイズに関する意思決定の通知に使用できます。

このグラフの詳細は次のとおりです。

  • 青色の線は、マネージド インスタンス グループのインスタンス数を示します。
  • 緑色の線は、オートスケーラーによって予測されたインスタンスの数を示します。
    • 緑色の線が青色の線より下にある場合、使用可能容量が大きく、VM インスタンスが十分に活用されていない可能性があります。
    • 緑色の線が青色の線より上にある場合、残りの容量はほとんどなく、インスタンス グループにインスタンスを追加する必要があります。
  • 赤い点の横線は、インスタンス グループで許可されるインスタンスの最小数と最大数を示します。

ステータス メッセージの表示

オートスケーラーでスケーリングの問題が発生した場合、警告またはエラー メッセージが返されます。これらのステータス メッセージは、次の 2 つの方法のいずれかにより確認できます。

[インスタンス グループ] ページでステータス メッセージを表示する

ステータス メッセージは、Google Cloud Console の [インスタンス グループ] ページで直接確認できます。

  1. Google Cloud コンソールで、[インスタンス グループ] ページに移動します。

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

  2. 名前の前に注意アイコンが付いているインスタンス グループを探します。

    例:

    [インスタンス グループ] ページのステータス メッセージ。

  3. ステータス アイコンの上にポインタを置くと、ステータス メッセージの詳細が表示されます。

インスタンス グループの概要ページでステータス メッセージを表示する

特定のインスタンス グループの概要ページに直接移動することにより、関連するステータス メッセージを表示できます。

  1. Google Cloud コンソールで、[インスタンス グループ] ページに移動します。

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

  2. ステータス メッセージを表示するインスタンス グループをクリックします。
  3. インスタンス グループのページで、インスタンス グループ名の下にステータス メッセージを表示します。

よく返されるステータス メッセージ

オートスケーラーでスケーリングの問題が発生した場合、警告またはエラー メッセージが返されます。以下に、よく返されるメッセージとその意味を示します。

All instances in the instance group are unhealthy (not in RUNNING state). If this is an error, check the instances.
インスタンス グループ内のすべてのインスタンスが、RUNNING 以外の状態になっています。これが意図した状態である場合、このメッセージを無視してかまいません。意図している状態ではない場合、インスタンス グループのトラブルシューティングを行ってください。
The number of instances has reached the maxNumReplicas. The autoscaler cannot add more instances.
オートスケーラーを作成したときに、インスタンス グループが維持できるインスタンスの最大数を指定しています。オートスケーラーは現在、需要を満たすためにインスタンス グループのサイズのスケールアウトを試行していますが、maxNumReplicas に達しました。maxNumReplicas をより大きい数に更新するには、オートスケーラーの更新をご覧ください。
The monitoring metric that was specified does not exist or does not have the required labels. Check the metric.

Cloud Monitoring の指標を使用して自動スケーリングを行っていますが、指定した指標または必要なラベルが存在しないか、Compute Engine サービス エージェントにアクセスできません。

Quota for some resources is exceeded. Increase the quota or delete resources to free up more quota.

利用可能な割り当ての情報については、Google Cloud Console の割り当てページをご覧ください。

Autoscaling does not work with an HTTP/S load balancer configured for maxRate.

インスタンス グループが maxRate の構成を使用して負荷分散されていますが、オートスケーラーがこのモードをサポートしていません。構成を変更するか、自動スケーリングを無効にします。maxRate の詳細については、負荷分散のドキュメントの制限とガイドラインをご覧ください。

The autoscaler is configured to scale based on a load balancing signal but the instance group has not received any queries from the load balancer. Check that the load balancing configuration is working.

インスタンス グループは負荷分散されていますが、グループに受信クエリがありません。サービスがアイドル状態になっている可能性がありますが、その場合心配する必要はありません。ただし、このメッセージは構成ミスでも生じる可能性があります。たとえば、自動スケーリングされたインスタンス グループは、サポートされていない複数のロードバランサのターゲットになることがあります。ガイドラインの一覧については、負荷分散のドキュメントの制限とガイドラインをご覧ください。