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

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。
{# END}

このドキュメントでは、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 を作成します。これにより、いずれか 1 つの 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 負荷分散を使用すると、クライアント側の一番近いロケーションでトラフィックを Google Cloud システムに送信できます。クロスリージョン負荷分散により、特定のリージョンがアクセス不能となった場合にトラフィックが別のリージョンに自動的に転送されるように、冗長性が確保されます。このようにして、サービスは同じ外部 IP アドレスを使用してアクセスできます。

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

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

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

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

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

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

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

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

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

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