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


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

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

エラーのタイプ

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

  • 単一インスタンスの予期しないエラー

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

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

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

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

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

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

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

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

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

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

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

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

ライブ マイグレーションするようにインスタンスを構成する方法、またはマイグレーションではなく再起動するよう構成する方法については、インスタンスのホスト メンテナンス ポリシーを設定するをご覧ください。

インスタンスを分散する

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

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

プロジェクトまたは組織向けに、デフォルトの内部 DNS タイプをゾーン DNS に設定します。アプリケーションでは、他のコンピューティング インスタンスにアクセスするときにゾーン DNS 名を使用します。内部 DNS サーバーはすべてのゾーンに分散して配置されているため、他のロケーションで障害が発生していても、ゾーン DNS 名であれば確実に解決できます。

グローバル DNS は単一障害点のため、レジリエンスが低下します。ゾーン DNS により、複数リージョンの停止によるリスクを軽減できます。 ゾーン DNS では、プロジェクト内のすべてのリージョンでインスタンス名の一意性が必要ないため、インスタンスをより迅速に作成できます。

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

プロジェクトでグローバル DNS 名を使用している場合は、ゾーン DNS 名に切り替えることができます。詳細については、内部 DNS タイプにゾーン DNS を使用するをご覧ください。

VM のグループを作成する

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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