復元性に優れたシステムの設計


このドキュメントでは、Compute Engine で復元性に優れたシステムを設計するためのベスト プラクティスについて説明します。一般的なアドバイスを提供し、インスタンスのダウンタイムを軽減して、仮想マシン(VM)インスタンスが思いがけない障害を被ったときに備えるために役立つ Compute Engine のいくつかの機能を取り上げます。

復元性に優れたシステムとは、サービスを中断することなく、またはサービスを使用しているユーザーのエクスペリエンスに影響を及ぼすことなく、一定量の障害や中断に耐えられるシステムです。Compute Engine には、このような中断を防ぐためにあらゆる努力が施されていますが、特定のイベントは予測できないため、これらのイベントに備えておくことをおすすめします。

エラーのタイプ

場合により、システムやハードウェアの障害が原因で、1 つ以上のインスタンスが失われることがあります。以下に、軽減できる障害シナリオをいくつか示します。

  • 単一 VM の予期しない障害

    単一 VM の予期しないエラーは、ハードウェアやシステムのエラーが原因で発生することがあります。データを保存するために永続ディスク起動スクリプトを使用して、VM の再起動後にソフトウェアを再度有効にすることで、影響を軽減できます。

  • 単一 VM の予期しない再起動

    場合により、単一 VM の予期しない障害と再起動が発生することがあります。単一 VM の予期しない障害とは異なり、Compute Engine は障害発生後に VM を自動的に再起動します。このような障害が発生した場合は、データのバックアップをとり、永続ディスクを使用するとともに、起動スクリプトによってソフトウェアを迅速に再構成すると影響を軽減できます。

  • ゾーンまたはリージョンのエラー

    ゾーンとリージョンのエラーは発生頻度の低いエラーですが、発生した場合、特定のゾーンまたはリージョンにあるすべての VM がアクセス不能となったり、エラーで終了したりする可能性があります。このような事象を緩和するためには、複数のリージョンとゾーンにわたる展開を行い、ロード バランシングを実装します。また、データをバックアップするか、複数のゾーンに永続ディスクを複製する必要があります。

復元性に優れたシステムの設計のヒント

VM の障害を軽減するには、障害、ネットワーク中断、予期しない災害に対する復元性に優れたアプリケーションを設計します。復元性に優れたシステムは、アクセスできない VM から稼働中の VM へのトラフィックのリダイレクトや、再起動時のタスクを自動化など、障害に適切に対処します。

ここでは、エラーに対して復元性に優れたシステムを設計するのに役立つ一般的なヒントを示します。

ライブ マイグレーションを使用する

Google では、そのインフラストラクチャについて定期的にメンテナンスを実施しています。最新のソフトウェアを使用してシステムにパッチを適用し、ルーチンテストと予防的メンテナンスを実行して、全体としてインフラストラクチャが可能な限り安全で高速かつ効率的に機能していることを確認します。Compute Engine では、このインフラストラクチャ メンテナンスが VM に対してデフォルトで透過的となるように、ライブ マイグレーションを採用しています。

ライブ マイグレーションは、メンテナンス作業が実施されるシステムから稼働中の VM を移動するテクノロジーです。Compute Engine ではこの操作が自動的に行われます。

ライブ マイグレーション中は、VM で一時的にパフォーマンスの低下が発生することがあります。一定かつ最大のパフォーマンスが必要な VM の場合は、その代わりに、メンテナンス イベントに関係のないホストで VM を停止して再起動する構成を使用できます。このオプションは、アプリケーション全体が VM の障害や再起動も処理するように構築された場合に適しています。

ライブ マイグレーションを使用するように VM を構成する方法、またはマイグレーションではなく再起動するよう構成する方法については、インスタンスのスケジューリングの設定オプションをご覧ください。

VM を分散する

いずれかの VM を含むゾーンまたはリージョンが機能しなくなった場合に、アクセス先となる代替の VM が確保されるように、複数のリージョンまたはゾーンに VM を作成します。同じゾーンまたはリージョンですべての VM をホストすると、そのゾーンまたはリージョンがアクセス不能となった場合に、どの VM にもアクセスできなくなります。

ゾーン固有の内部 DNS 名を使用する

Compute Engine 内部ネットワーク上の VM のアドレス指定に内部 DNS 名または VM 名を使用する場合は、ゾーン DNS 名を使用します。内部 DNS サーバーはすべてのゾーンに分散して配置されているため、他のロケーションで障害が発生していても、ゾーン DNS 名であれば確実に解決できます。VM の内部完全修飾ドメイン名(FQDN)の形式は次のとおりです。

  • ゾーン DNS を使用する VM: [INSTANCE_NAME].[ZONE].c.[PROJECT_ID].internal
  • グローバル DNS を使用する VM: [INSTANCE_NAME].c.[PROJECT_ID].internal

ここで

  • [INSTANCE_NAME] は、VM の名前です。
  • [ZONE] は、VM が配置されるゾーンです。
  • [PROJECT_ID] は、VM が属するプロジェクトです。

VM がゾーン DNS 名とグローバル DNS 名のどちらを使用しているか確認するには、VM インスタンス用の内部 DNS 名の特定をご覧ください。

プロジェクトでグローバル DNS 名を使用している場合は、ゾーン DNS 名と検索パスに応じてアプリケーションを準備できます。詳細については、ゾーン DNS 名に移行するをご覧ください。

VM のグループを作成する

マネージド インスタンス グループを使用して VM の同種のグループを作成し、1 つの VM が異常になった場合に、ロードバランサが複数の VM にトラフィックを誘導できるようにします。

マネージド インスタンス グループ(MIG)には、自動スケーリング自動修復などの機能もあります。自動スケーリングは、特定のシグナルに基づいて、VM の数を増減することで、トラフィックの急増に対応できます。自動修復ではヘルスチェックを行い、必要に応じて異常な VM を自動的に再作成します。

MIG はリージョンに対しても使用できるため、単一のリージョン内の複数のゾーンに分散される VM のグループを作成できます。詳細については、リージョン MIG の作成と管理をご覧ください。

ロード バランシングを使用する

Google Cloud にはロード バランシング サービスが用意されているため、トラフィックの多い期間をサポートして VM を過負荷にしないようにします。Cloud Load Balancing を使用すると、次のことができます。

  • リージョン MIG を使用して、複数のゾーン内の VM にアプリケーションをデプロイします。その後、リージョン内のすべてのゾーンにあるすべての VM 間でトラフィックを分散するように転送ルールを構成できます。各転送ルールでは、特定の外部 IP アドレスを使用してアプリケーションへの 1 つのエントリ ポイントを定義できます。

  • グローバルなロード バランシングを使用して、複数のリージョンに VM をデプロイします。HTTP(S) ロード バランシングを使用すると、クライアント側の一番近いロケーションでトラフィックを Google Cloud システムに送信できます。クロスリージョン ロード バランシングにより、特定のリージョンがアクセス不能となった場合にトラフィックが別のリージョンに自動的に転送されるように、冗長性が確保されます。これにより、引き続き同じ外部 IP アドレスを使用してサービスにアクセスできます。

  • 自動スケーリングを使用して、負荷の増減に基づいて MIG から VM を自動的に追加または削除します。

さらに、Cloud Load Balancing は VM のヘルスチェックを備えており、VM の障害の検出と処理をサポートします。

起動スクリプトとシャットダウン スクリプトを使用する

Compute Engine には、VM が起動またはシャットダウンすると実行される起動スクリプトとシャットダウン スクリプトが用意されています。起動スクリプトとシャットダウン スクリプトは、ソフトウェアのインストール、アップデートの実行、バックアップの作成、データのロギングなどのタスクを自動化できます。

起動スクリプトとシャットダウン スクリプトはいずれも、VM をブートストラップまたは完全シャットダウンするための効率的で有益な方法です。カスタム イメージを使用して VM を構成する代わりに、起動スクリプトを使用して VM を構成することには利点があります。

起動スクリプトは、障害により VM が再起動するたびに実行され、ソフトウェアと更新のインストールに使用できます。起動スクリプトを使用して、サービスが VM 内で実行されるようにすることもできます。多くの場合、起動スクリプトで VM を構成するために変更をコーディングすることは、カスタム イメージで変更されたファイルやバイトを確認するよりも簡単です。

シャットダウン スクリプトは、意図的かどうかにかかわらず、VM のシャットダウン時に実行されます。VM を停止する前に行うデータのバックアップ、ログの保存、および接続の正常終了といった終了時の最終作業を行えます。

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

データをバックアップする

複数のロケーションでデータのバックアップを定期的に行ってください。ファイルを Cloud Storage にアップロードするか、永続ディスク スナップショットを作成するか、またはデータを別のリージョンもしくはゾーンの永続ディスクに複製します。