ステートフル マネージド インスタンス グループ

ステートフル マネージド インスタンス グループ(ステートフル MIG)を使用すると、高可用性のステートフル ワークロードを VM インスタンスにデプロイできます。ステートフル ワークロードには、データベースなどのステートフルなデータや構成を使用したアプリケーション、従来のモノリシック アプリケーション、チェックポインティングを使用して長時間実行されるバッチ計算が含まれます。

ステートフル MIG を使用すると、自動修復(失敗したワークロードの自動復元)とマルチゾーン デプロイにより、こうしたステーフル アプリケーションの稼働率と復元性を高めることができます。さらに、更新のロールアウトを制御してステートフル インスタンスの更新を簡素化することも可能です。

ステートフル マネージド インスタンス グループは、VM を再起動、再作成、自動修復、更新する際に、各インスタンスの固有の状態(インスタンス名、アタッチされた永続ディスク、メタデータなど)を維持します。

このページでは、ステートフル MIG を使用する場合と、その仕組みの概要を説明します。詳細については、ステートフル MIG の仕組みをご覧ください。

ステートフル MIG を設定する方法については、ステートフル MIG の構成をご覧ください。

ステートフル ワークロードとステートレス ワークロードの違い

マネージド インスタンス グループを使用して、ステートフル ワークロードとステートレス ワークロードの両方をサポートできます。ステートフル ワークロードとステートレス ワークロードの主な違いは、ステートフル ワークロードは個々の VM の状態(データベース シャード、アプリの構成など)を VM のディスク上に維持するのに対し、ウェブ フロントエンドなどのステートレス ワークロードは個々の VM で状態を維持しないという点にあります。

ステートフル ワークロードの VM は、カスタムビルドされたマシンのように扱います。個々のマシンそれぞれについて、VM の ID(名前)、メタデータ、データを考慮します。ステートフル ワークロードの水平スケーリングは容易ではありません。スケーリングするには、データのレプリケーション、データシャードの作成または削除、あるいはアプリケーションの構成全体の変更が必要になるためです。ステートフル ワークロードのマシンを再作成または更新する場合は、その VM に固有の状態を維持する必要があります。ステートフル アプリケーションの例としては、Cassandra、ElasticSearch、mongoDB、mySQL、PostgreSQL、Kafka などがあります。

ステートレス ワークロードの VM を相互に交換可能なものとして扱い、ワークロードを処理するために使用できる VM の数だけを考慮します。特定の VM を他の VM と区別して扱うことはありません。VM を追加または削除するだけで、簡単にステートレス ワークロードを水平スケーリングできます。アプリケーションを更新するときは、マシンを削除し、別の名前、メタデータ、ディスクを使用した新しいマシンで置き換えます。ステートレス VM が削除または再作成されると、マシン上のすべてのデータが失われます。つまり、ディスクは完全に削除されるか、ゼロから再作成されます。ウェブ フロントエンドは、ステートレス アプリケーションの一例です。

ステートフル MIGステートレス MIG
ワークロード ステートフル ワークロードで、VM の再作成オペレーションの際にディスクやメタデータが維持されます。 可用性とスケーラビリティに優れたステートレス ワークロードで、水平スケーリング、自動修復、自動更新、VM の再作成が行われる際にディスクがゼロから再作成されます。
MIG の機能
  • 自動修復
  • 特定のインスタンスの更新の制御
  • マルチゾーン デプロイ
  • 自動修復
  • 自動ローリング アップデート
  • マルチゾーン デプロイ
  • 自動スケーリング
維持可能なアイテム
  • インスタンス名
  • 永続ディスク(インスタンス テンプレートで定義されていないディスクのサポートを含む)
  • インスタンス固有のメタデータ
インスタンス名

いずれの MIG も、カスタム インスタンス名と維持可能なインスタンス名をサポートします。

ステートフル MIG を使用する状況

ステートフル アプリケーションやクラスタを Compute Engine にデプロイし、自動修復またはマルチゾーン デプロイで可用性を向上させる必要がある場合は、ステートフル マネージド インスタンス グループ(ステートフル MIG)の使用を検討してください。また、更新ロールアウトのオーケストレーションを行い、インスタンスの中断の許容レベルを制御することで、ステートフル インスタンスの更新を簡略化することもできます。

ステートフル MIG は、次のようなステートフルなデータや構成を使用するアプリケーションを対象としています。

  • データベース(例: Cassandra、ElasticSearch、mongoDB、ZooKeeper)。ステートフル MIG の使用を決定する前に、VM に対処する必要をなくしてアプリケーションに注力できるよう、Cloud SQL で利用可能な MySQL や PostgreSQL などのフルマネージド サービスを使用することを検討してください。
  • データ処理アプリケーション(例: Kafka、Flink)。ステートフル MIG の使用を決定する前に、VM に対処する必要をなくしてアプリケーションに注力できるよう、DataflowDataproc などのフルマネージド サービスを使用することを検討してください。
  • 他のステートフル アプリケーション(例: TeamCity、Jenkins、Bamboo、カスタム ステートフル ワークロード)。
  • 従来のモノリシック アプリケーション。これらのアプリケーションは、ブートディスクまたは追加の永続ディスクにアプリケーションの状態を保存するか、特定の VM インスタンス名やメタデータキー値といったステートフル構成を使用します。
  • チェックポインティングを使用したバッチ ワークロード。この構成では、ワークロードまたは VM の障害やインスタンスのプリエンプションを想定し、長時間実行される計算の結果をチェックポイントごとに維持できます。ステートフル MIG では、障害が発生したマシンを再作成する際に、そのマシンのデータディスクを維持できるため、最後のチェックポイントから計算を続行できます。

ゾーン障害に対する復元力を高めるには、アプリケーション レベルで複数のインスタンスにデータを複製する必要があります。ElasticSearch や Cassandra はこのような機能をサポートしています。リージョン MIG を使用すると、冗長レプリカを複数のゾーンにデプロイし、アプリケーションのデータ レプリケーション機能を利用することで、ゾーン障害に対するアプリケーションの復元力を高めることができます。ゾーンに障害が発生した場合、残りのゾーンで使用可能なレプリカからデータが提供されます。

制限事項を確認して、ステートフル MIG が要件を満たしていることを確認します。

MIG をステートフルにする要素

ステートフル構成が作成されている MIG は、ステートフルとみなされます。

MIG の作成時にステートフル構成を作成できます。または、グループ作成後にステートフル構成を追加することで、ステートレスからステートフルに変換するという方法もあります。

ステートフル構成を作成するには、空でないステートフル ポリシーや、インスタンスごとの空でない構成を 1 つ以上設定します。

  • ステートフル ポリシーでは、MIG 内のすべてのインスタンスについて維持するアイテムを定義します。
  • インスタンスごとの構成では、特定の VM インスタンスについて維持するアイテムを定義します。

この構成は、ユーザーまたは MIG によって適用された後に有効になります。

  • MIG は、新しいインスタンスと既存のインスタンスに自動的にステートフル ポリシー構成を適用します。
  • インスタンスごとの構成を作成または更新するときに、新しい構成を手動で適用するか、自動的に適用するかを選択できます。

ステートフル構成(ステートフル ポリシーやインスタンスごとの構成)が適用されたかどうかを確認するには、マネージド インスタンスごとに維持されている状態を検査します。

MIG のステートフル構成またはサイズに対する以降の変更(たとえば、MIG のサイズを縮小したり、MIG からインスタンスを削除または破棄したりするなどの変更)は、インスタンスについて維持される状態に影響します。

ステートフル構成

ステートフル マネージド インスタンス グループ(MIG)は、ユーザーが設定したインスタンス テンプレートステートフル ポリシーインスタンスごとの構成の組み合わせからインスタンスの構成を取得します。イスタンス テンプレート、ステートフル ポリシー、インスタンスごとの構成をグループに適用すると、MIG は VM インスタンスを作成、再作成、自動修復、または自動更新する際に、その構成を使用します。

ステートフル ポリシー

ステートフル ポリシーでは、マネージド インスタンス グループのすべてのインスタンスに共通のステートフル アイテムを定義します。ステートフル ポリシーに含める各アイテムは、MIG のインスタンス テンプレートで定義されている必要があります。

ステートフル ポリシーには次の変更を加えることができます。

  • ステートフル ポリシーにディスクを追加して、ディスクがステートフルになるように構成します。
  • ステートフル ポリシーからディスクを削除して、ディスクがステートレスになるように構成します。

インスタンスごとの構成

インスタンスごとの構成では、特定のマネージド インスタンスに固有のステートフル アイテム(インスタンス固有のメタデータの Key-Value ペアなど)を定義します。これらのアイテムは、MIG のインスタンス テンプレートで定義されている必要はありません。

MIG に含まれる特定のインスタンスについて、インスタンスごとの構成に次の変更を加えることができます。

  • インスタンス テンプレートで定義されているディスクを構成して、インスタンスに対しステートフルにする(インスタンスごとの構成にディスクを追加して)、またはステートレスにする(インスタンスごとの構成からディスクを削除して)。
  • インスタンス テンプレートで定義されていない既存のディスクを構成して、ディスクをインスタンスにアタッチしてステートフルにする(インスタンスごとの構成にディスクを追加して)、またはディスクをインスタンスから接続解除する(インスタンスごとの構成からディスクを削除して)。
  • インスタンスに固有のステートフル メタデータの Key-Value ペアを追加または削除する。

ステートフル構成の例

ステートフル構成の例を次に示します。

インスタンス テンプレート + ステートフル ポリシー + インスタンスごとの構成 = マネージド インスタンス構成。

この図の内容は次のとおりです。

  • インスタンス テンプレートは、MIG に含まれるすべての VM インスタンスに共通の構成を定義しています。
  • ステートフル ポリシーは、インスタンス テンプレートで定義されていて、MIG の各 VM インスタンス用に個別に作成されてアタッチされる、デバイス名 data-disk のディスクに共通のステートフル構成を定義しています。
  • インスタンスごとの構成は、node-1 という名前の特定の VM インスタンスのステートフル構成を定義しています。既存のディスク my-legacy-1node-1 インスタンスにアタッチし、ステートフルとして扱います。また、node-1 インスタンスについて、1 つのメタデータ Key-Value ペア node-id:xyz273 を個別に維持することも指定しています。

この構成例の場合、MIG は node-1 VM を作成する際に次の処理を行います。

  1. インスタンス テンプレートに従って、n2-standard-2 マシンタイプを使用します。
  2. インスタンス テンプレートに従い、Debian GPU / Linux イメージを使用し、自動生成されたディスク名 boot-node-1 とデバイス名 boot-disk のディスクとしてブートディスクを作成してアタッチします。boot-node-1 ブートディスクはステートフル ポリシーでもインスタンスごとの構成でも構成されていないため、MIG はこのディスクをステートレスとして扱います。
  3. インスタンス テンプレートに従い、カスタム イメージを使用し、自動生成されたディスク名 data-disk-1 とデバイス名 data-disk のディスクとして追加のディスクを作成してアタッチします。このデバイス名はステートフル ポリシーで指定されているため、MIIG はこの追加の data-disk-1 ディスクをステートフルとして扱います。
  4. インスタンスごとの構成に従い、ディスク名 my-legacy-1 の既存のディスクを、ディスクのデバイス名として legacy-disk を使用してアタッチします。このデバイス名はインスタンスごとの構成で指定されているため、MIG はこの追加の my-legacy-1 ディスクをステートフルとして扱います。
  5. インスタンス テンプレートに含まれる 2 つのメタデータ Key-Value ペア(app:example-stateful-appversion:1.0)と、インスタンスごとの構成に含まれる 1 つのメタデータ Key-Value ペア(node-id:xyz273)の合計 3 つを設定します。node-id:xyz273 はインスタンスごとの構成で指定されているため、MIG はこの Key-Value ペアをステートフルとして扱います。

MIG は node-1 VM を再作成する際に、同じ構成が引き続き有効であると想定して、ステートレス アイテムを再作成し、ステートフル アイテムを維持します。

  1. 元のイメージからブートディスクを再作成します。

    最初に boot-node-1 を削除してから、インスタンス テンプレートで指定されている Debian GNU / Linux イメージを使用してブートディスクを再作成します。

  2. 追加のディスク data-disk-1my-legacy-1 を保持します。

    VM を削除する前にこれらの追加ディスクを切断し、VM が再作成された後、VM にアタッチします。

  3. 個々のメタデータの Key-Value ペア node-id:xyz273 を保持します。

    VM の再作成後にメタデータを設定します。インスタンス テンプレートで指定された共通の Key-Value ペア(app:example-stateful-appversion:1.0)も設定します。

次のステップ