堅牢なシステムの設計

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

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

障害の種類について

場合により、システムやハードウェアのエラーが原因で 1 つ以上のインスタンスが失われることがあります。障害には次のものが含まれますが、これらに限定されません。

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

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

  • 単一インスタンスの予期しない再起動

    場合により、単一インスタンスの予期しないエラーと再起動が発生することがあります。単一インスタンスの予期しないエラーとは異なり、インスタンスは、エラーで終了した後、Google Compute Engine サービスによって自動的に再起動されます。このような事象を緩和するためには、データをバックアップし、永続ディスクを使用し、起動スクリプトを使用して、ソフトウェアを迅速に再設定します。

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

    ゾーンとリージョンのエラーは発生頻度の低いエラーですが、発生した場合、特定のゾーンまたはリージョンにあるすべてのインスタンスがアクセス不能となったり、エラーで終了したりする可能性があります。

    このような事象を緩和するためには、複数のリージョンとゾーンにわたる展開を行い、負荷分散を実装します。また、データをバックアップするか、永続ディスクのデータを複数のロケーションに複製する必要があります。

堅牢なシステムの設計のヒント

インスタンスのエラーを緩和するためには、Google Compute Engine サービスで、エラー、ネットワークの中断、予期せぬ災害などに対して堅牢となるようにアプリケーションを設計する必要があります。堅牢なシステムは、停止したインスタンスから稼働中のインスタンスへのトラフィックのリダイレクトや、再起動時のタスクの自動化など、エラーに適切に対処できる必要があります。

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

ライブ マイグレーションの使用

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

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

ライブ マイグレーション時、インスタンスで、一時的にパフォーマンスの低下が発生することがあります。また、仮想マシン インスタンスをメンテナンス時に終了してメンテナンス後に再起動するように設定するオプションもあります。このオプションは、一定した最大のパフォーマンスがインスタンスで必要とされる場合や、アプリケーション全体がインスタンスのエラーや再起動に対応できるように作成されている場合に適しています。

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

ライブ マイグレーションの詳細については、ライブ マイグレーションのドキュメントをご覧ください。

インスタンスを分散する

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

インスタンスのグループを作成する

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

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

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

負荷分散を使用する

Google Compute Engine には、大量のトラフィックがある期間にインスタンスが過負荷とならないよう対応できるようにする負荷分散サービスが用意されています。負荷分散サービスを使用すると、次のことができます。

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

  • 複数のリージョンにインスタンスをデプロイします。 リージョン間での負荷分散により、特定のリージョンがアクセス不能となった場合にトラフィックが別のリージョンに自動的に転送されるように、冗長性が確保されます。これにより、引き続き同じ外部 IP アドレスを使用してサービスにアクセスできます。

さらに、負荷分散サービスは、VM のヘルスチェックも備えており、インスタンスのエラーを検出して処理するためのサポートを提供します。

詳細については、負荷分散のドキュメントをご覧ください。

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

Compute Engine には、インスタンスが起動またはシャットダウンすると実行される起動スクリプトとシャットダウン スクリプトが用意されています。これらのスクリプトにより、インスタンスが初めて起動したときや、意図的かどうかを問わずインスタンスが停止したときに、ソフトウェアのインストール、更新の実行、バックアップの作成、データのロギングなどのタスクを自動化できます。

起動スクリプトとシャットダウン スクリプトはいずれも、インスタンスをブートストラップまたは完全シャットダウンするための効率的で有益な方法です。カスタム OS イメージを使用してインスタンスを設定する代わりに、起動スクリプトを使用してインスタンスを設定することには利点があります。起動スクリプトは、エラーによってインスタンスが再起動されるときに常に実行され、ソフトウェアや更新をインストールするため、またサービスが VM 内で実行されるようにするために使用できます。起動スクリプトでインスタンスを設定するための変更をコーディングすることは、カスタム イメージでどのファイルやバイトが変更されたかを把握しようとするよりも簡単です。

シャットダウン スクリプトは、インスタンスを停止する前に行うデータのバックアップ、ログの保存、および接続の正常終了といった終了時の最終作業を実行することができます。

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

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

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

インスタンスから Google Cloud Storage にファイルをコピーするには:

  1. インスタンスにログインします。

    gcloud compute ssh example-instance
    
  2. このインスタンスで以前に gsutil ツールを使用したことがない場合は、認証情報を設定します。

    gcloud init
    

    または、Google Cloud Storage スコープを持つサービス アカウントを使用するようにインスタンスを設定している場合は、この手順と次の手順をスキップできます。

  3. 指示に沿って、Google Cloud Storage に対する認証を行います。

  4. 次のコマンドを使用して、Google Cloud Storage にデータをコピーします。

    gsutil cp <file1> <file2> <file3> ...  gs://<your bucket>
    

また、gcloud compute ツールを使用して、ローカル コンピュータにファイルをコピーすることもできます。詳細については、インスタンスとのファイルのコピーをご覧ください。

次のステップ

外出先でもリソースをモニタリング

Google Cloud Console アプリを入手して、プロジェクトの管理にお役立てください。

フィードバックを送信...

Compute Engine ドキュメント