インスタンスを移動する

このページでは、Spanner でのインスタンスの移動について説明します。

インスタンスをすべてのインスタンス構成から他のリージョン構成(リージョン構成とマルチリージョン構成を含む)に移動できます。インスタンスを移動してもダウンタイムは発生しません。Spanner では、移動中も強整合性を含む通常のトランザクション保証を引き続き提供します。

また、インスタンスをソース インスタンス構成からカスタム インスタンス構成(たとえば、us-west2 読み取り専用レプリカを持つ nam3 基本構成)に移動することもできます。既存のインスタンス構成のトポロジは更新できないため、まず必要なトポロジで新しいカスタム インスタンス構成を作成する必要があります。新しいカスタム インスタンス構成を作成したら、ソース インスタンス構成から新しいカスタム インスタンス構成にインスタンスを移動できます。

Spanner インスタンスを移動する理由

インスタンスを移行すると、次のようなメリットがあります。

  • 可用性を向上: リージョンからマルチリージョンへの移行を行った後、ダウンタイムなしで 99.999% の可用性を実現します。
  • レイテンシの低減: リージョンからマルチリージョン、またはマルチリージョンからマルチリージョンへの移動を通じて、追加の読み取り専用レプリカによりレイテンシを低減し、地理的なカバレッジを拡大します。
  • 費用の削減: マルチリージョン構成からリージョン構成に移行することで、時間あたりの費用を削減します。
  • データベースのコロケーション: インスタンスをより最適化された場所に移動して、Spanner データベースをクライアント アプリケーションとコロケーションします。

料金

インスタンスを移動すると、移動元と移動先の両方のインスタンス構成に対して 1 時間ごとのコンピューティングとストレージの料金が適用されます。 移行が完了すると、宛先構成のインスタンス ストレージに対して課金されます。

インスタンスを新しいリージョンまたはマルチリージョン インスタンス構成に移動する場合は、下り(外向き)データ転送の料金が発生することがあります。詳細については、Spanner の料金をご覧ください。

制限事項

  • インスタンスを移動するには、最低 1 ノード(1,000 処理ユニット)が必要です。
  • プロジェクトと Google Cloud アカウント間でインスタンスを移動することはできません。
  • Spanner の無料インスタンスは移動できません。 無料トライアル インスタンスは、有料インスタンスへのアップグレード後に移動できます。
  • いずれかのインスタンス リソースでリージョン サービス エンドポイントを使用したアクティブなリクエストがある場合、リージョン適用によってクロスリージョン インスタンスへのアクセスがブロックされるため、インスタンスの移動は、リージョン エンドポイントを使用するすべてのリクエストに影響します。グローバル エンドポイントを使用するリクエストは影響を受けません。
  • Spanner のバックアップはインスタンス構成に固有であり、インスタンスの移動に伴って移動されません。詳細については、バックアップをご覧ください。
  • インスタンスの移動中は、次の API が無効になります。
    • InstanceAdmin.DeleteInstance
    • InstanceAdmin.UpdateInstance
    • DatabaseAdmin.CreateDatabase
    • DatabaseAdmin.UpdateDatabaseDdl(リクエストで default_leader が指定されている場合は無効)
    • DatabaseAdmin.RestoreDatabase
    • DatabaseAdmin.CreateBackup
    • DatabaseAdmin.CopyBackup
  • CMEK 対応データベースを含むインスタンスは移動できません。
  • データベースに変更されたデフォルトのリーダーがある場合、移動先のインスタンス構成で読み取り / 書き込みリージョンの名前を指定していれば、選択が保持されます。その構成はマルチリージョンです。移動先の構成がリージョンの場合、または指定された読み取り / 書き込みリージョンが含まれていない場合、デフォルトのリーダー選択はクリアされます。
  • インスタンスを移動すると、インスタンスのインスタンス構成属性が変更されます。Spanner リソースを自動化によって管理する場合は、発生する可能性のある不整合を考慮して対処してください。
    • たとえば、Terraform を使用して Spanner インスタンスとデータベースを管理し、terraform apply --auto-approve を有効にしてリソースを同期させ、すべてのインスタンスと子リソースを同期させる場合、インスタンスが削除されると、削除されます。 削除やデータ損失を防ぐために、構成を適宜更新してください。apply コマンドの詳細については、Terraform の適用オプションをご覧ください。
  • インスタンスの移動中、Spanner のモニタリング指標とチャートに移行元と移行先の両方のインスタンス構成でデータが表示されることがあります。または、1 つのインスタンス構成でのパフォーマンスしか反映されないこともあります。
  • オープンソース オートスケーラー ツールを構成している場合は、無効にする必要はありません。InstanceAdmin.UpdateInstance(ノードと処理ユニットの変更に使用)が無効になっているため、失敗します。
  • Spanner マネージド オートスケーラー機能が有効になっているインスタンスは移動できません。インスタンスを移動するには、マネージド オートスケーラーを無効にして、インスタンスを移動してから、マネージド オートスケーラーを再度有効にする必要があります。

    さらに、自動スケーリングを使用している場合は、記載されている最大の推奨値に従ってピーク時の CPU 使用率を維持するのに十分なノードをプロビジョニングし、インスタンスを移動する前に自動スケーリングを無効にする必要があります。

パフォーマンスに関する注意事項

インスタンスの移動時には、読み取りと書き込みのレイテンシが高くなり、トランザクションの中止率が高くなります。インスタンスの移動は、ユーザーがプロビジョニングした予備の CPU を使用して行われるため、移動中の CPU 使用率が 100% になることがあります。ただし、インスタンスの移動によるダウンタイムは発生しません。インスタンスの移動にかかる時間は、データベースのサイズ、ノード数、移動の種類(リージョンからマルチリージョンなど)など、さまざまな要因に左右されます。

インスタンスの移動後のインスタンスのパフォーマンスは、インスタンス構成の詳細によって異なります。たとえば、マルチリージョン構成では、一般的にリージョン構成よりも書き込みレイテンシは高く、読み取りレイテンシは低くなります。

バックアップ

インスタンスを移動しても、ソース インスタンスのバックアップは新しい移動先の構成に自動的に移動されません。インスタンスの移動を開始したときに、ソース インスタンス構成にバックアップが存在する場合、インスタンスの移動は中止されます。インスタンスを移動する前に、バックアップをコピーし、データ復旧計画を検討することが重要です。

ソース インスタンスに保持する必要があるバックアップがある場合、移動先のインスタンス構成と、移動するソース インスタンスと同じインスタンス構成を持つインスタンスにバックアップをコピーすることをおすすめします。この結果、次のようになります。

  • インスタンスの移動が完了した直後に、バックアップを移動先のインスタンスの構成にコピーできます。
  • インスタンスの移動をキャンセルする必要がある場合は、ソース インスタンス構成と同じ構成を持つインスタンスからバックアップをすばやく復元することもできます。

バックアップを別のインスタンスにコピーした後、インスタンスを移動する前に、ソース インスタンスの既存のバックアップを削除する必要があります。インスタンスの移動が完了すると、移動先の構成にはバックアップのコピーがすでに存在します。新しいバックアップを作成することもできます。

バックアップのコピーと関連する費用の詳細については、バックアップをコピーするをご覧ください。

インスタンスを移動する方法

インスタンスを移動するには、Google Cloud コンソールの Cloud Shell と gcloud CLI で gcloud コマンドを使用します。

前提条件

インスタンス構成を移行する前に、制限事項パフォーマンスに関する考慮事項のセクションをお読みください。続いて、次の手順を実行します。

  1. 移行元インスタンスに対して spanner.instances.update IAM 権限があることを確認します。
  2. 必要に応じて、本番環境インスタンスを移動する前に非本番環境インスタンス(テストやステージングなど)を移動します。これにより、インスタンスの移動中のワークロードに対するパフォーマンスへの影響を評価および把握できます。
  3. Spanner インスタンスを移動すると、Data Catalog で作成したインスタンス タグが削除されます。タグを保持するには、移動前にタグをエクスポートし、移動後にタグをインポートする必要があります。詳細については、タグのエクスポートとインポートをご覧ください。

ベスト プラクティスとして、以下のガイドラインもご覧ください。

  • 本番環境インスタンスを移動する前に、移動先インスタンス構成内の非本番環境インスタンスのパフォーマンス ワークロードをテストします。本番環境インスタンスと同様のステージング インスタンスを移動して、本番環境インスタンスの移動にかかる時間を確認します。
  • Key Visualizer を使用して、データベースにホットスポットがないことをチェックします。
  • インスタンスの予想されるピーク使用量をサポートするために、移動先インスタンス構成に十分なノード割り当てがあることを確認します。詳細については、割り当てと制限をご覧ください。
  • 移動したインスタンス構成のインスタンスにおけるピークの CPU 使用率が 40% 未満であり、ノードあたりのストレージ量が 1 テビバイト(TiB)未満であることを確認します。
  • 移行中はインスタンスを変更しないでください。これには、インスタンス ノード総数の変更、データベース スキーマの変更、データベースの作成または削除、およびバックアップの作成または削除が含まれます。

これらの推奨事項に沿ってインスタンスを移動する場合、通常、移動は 24 時間以内に完了します。ただし、アプリケーションのワークロードによっては、完了時間が長くなる場合や短くなる場合があります。

インスタンスを移動する

Google Cloud コンソール

  1. Google Cloud コンソールの上部にある Cloud Shell をアクティブにするアイコン [Cloud Shell をアクティブにする] をクリックします。

    Google Cloud コンソールの一番下にある新しいフレームの中で Cloud Shell セッションが開き、コマンドライン プロンプトが表示されます。セッションが初期化されるまで数秒かかることがあります。

  2. gcloud spanner instances move コマンドを使用してインスタンスを移動します。

    gcloud spanner instances move INSTANCE-ID \
    --target-config=TARGET_CONFIG
    

    次のように置き換えます。

    • INSTANCE-ID: 移動するインスタンスの永続的な識別子。
    • TARGET-CONFIG: インスタンスを移動するインスタンス構成の永続的な識別子。インスタンスの新しい地理的なロケーション。これは、リージョン、マルチリージョン、カスタム インスタンスの構成になります(例: nam3us-central1custom-nam3-us-west2)。

たとえば、インスタンス test-instance を現在のインスタンス構成から nam3 に移動するには、次のコマンドを実行します。

  gcloud spanner instances move test-instance --target-config=nam3

(省略可)読み取り専用レプリカ us-west2 を基本インスタンス構成 nam3 に追加する場合は、次の手順を行います。

  1. 基本構成のクローンを作成し、読み取り専用レプリカを追加します。

    gcloud spanner instance-configs create custom-nam3-us-west2 \
    --clone-config=nam3 --add-replicas=location=us-west2, type=READ_ONLY
    
  2. インスタンス test-instance を現在のインスタンス構成からこの新しい custom-nam3-us-west2 インスタンス構成に移行します。

    gcloud spanner instances move test-instance --target-config=custom-nam3-us-west2
    

gcloud CLI

gcloud spanner instances move コマンドを使用してインスタンスを移動します。

gcloud spanner instances move INSTANCE-ID \
--target-config=TARGET_CONFIG

次のように置き換えます。

  • INSTANCE-ID: 移動するインスタンスの永続的な識別子。
  • TARGET_CONFIG: インスタンスの移動先のインスタンス構成の永続的な識別子。インスタンスの新しい地理的なロケーション。これは、リージョンまたはマルチリージョン インスタンス構成になります(例: nam3us-central1custom-nam3-us-west2)。

たとえば、インスタンス test-instance を現在のインスタンス構成から nam3 に移動するには、次のコマンドを実行します。

  gcloud spanner instances move test-instance --target-config=nam3

(省略可)読み取り専用レプリカ us-west2 を基本インスタンス構成 nam3 に追加する場合は、次の手順を行います。

  1. 基本構成のクローンを作成し、読み取り専用レプリカを追加します。

    gcloud spanner instance-configs create custom-nam3-us-west2 \
    --clone-config=nam3 --add-replicas=location=us-west2, type=READ_ONLY
    
  2. インスタンス test-instance を現在のインスタンス構成からこの新しい custom-nam3-us-west2 インスタンス構成に移行します。

    gcloud spanner instances move test-instance --target-config=custom-nam3-us-west2
    

インスタンスの移動とキャンセルの進行状況をモニタリングする方法

gcloud spanner operations describe を使用するか、カスタム Cloud Monitoring ダッシュボードを作成して、インスタンスの移動の進行状況をモニタリングできます。

移動とキャンセルのオペレーションの進行状況を表示する

インスタンスの移動またはインスタンスの移動キャンセル オペレーションの進行状況を追跡するには、gcloud spanner operations describe コマンドを使用します。このコマンドには、進行中のインスタンス移動オペレーションのオペレーション ID が必要です。

  1. 次のコマンドを実行して、インスタンスの移動オペレーションのオペレーション ID を取得します。

    gcloud spanner operations list --instance="INSTANCE-ID"
    

    次のように置き換えます。

    • INSTANCE-ID: 移動するインスタンスの永続的な識別子。

    出力には、インスタンスの移動オペレーションを含む長時間実行オペレーションのリストが表示されます。

  2. gcloud spanner operations describe コマンドを実行して、進捗状況の割合とステータスを表示します。

    gcloud spanner operations describe OPERATION-ID
    

    次のように置き換えます。

    • OPERATION-ID: 確認するインスタンス移動オペレーションのオペレーション ID。

インスタンスの移動オペレーションをモニタリングする

カスタム Cloud Monitoring ダッシュボードを作成して、インスタンスの移動中(サービスに影響を与える可能性のある長時間実行オペレーション)に指標を表示してモニタリングできます。

ダッシュボードの [合計ストレージ] グラフと [データベース別の合計データベース ストレージ] グラフは、移動の進行状況をモニタリングするのに役立ちます。移動元構成のストレージは徐々に減少する一方、移動先構成のストレージは増加しています。

Google Cloud コンソール

  1. move-instance-dashboard.json ファイルをダウンロードします。 このファイルには、Monitoring のカスタム ダッシュボードに入力するために必要な情報が含まれています。
  2. Google Cloud コンソールで [ダッシュボード] ページに移動します。

    [ダッシュボード] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] である結果を選択します。

  3. [ダッシュボードの概要] ページで、[Create dashboard] をクリックします。
  4. ダッシュボードのツールバーで、[ダッシュボードの設定] プルダウンをクリックします。次に、[JSON]、[JSON エディタ] の順に選択します。
  5. [JSON エディタ] ペインで、ダウンロードした move-instance-dashboard.json ファイルの内容をコピーして貼り付けます。
  6. 変更をダッシュボードに適用するには、[変更を適用] をクリックします。このダッシュボードを使用しない場合は、[ダッシュボードの概要] ページに戻ります。
  7. ダッシュボードが作成されたら、[フィルタを追加] をクリックします。次に、project_id または instance_id を選択して、インスタンスの移動の進行状況をモニタリングします。

gcloud CLI

  1. move-instance-dashboard.json ファイルをダウンロードします。 このファイルには、Monitoring のカスタム ダッシュボードに入力するために必要な情報が含まれています。
  2. プロジェクトでダッシュボードを作成するには、gcloud monitoring dashboards create コマンドを使用します。

    gcloud monitoring dashboards create --config-from-file=move-instance-dashboard.json
    

    詳細については、gcloud monitoring dashboards create リファレンスをご覧ください。

インスタンスの移動をキャンセルする方法

キャンセルできるのは、まだ進行中のインスタンスの移動のみです。すでに完了しているインスタンスの移動を元に戻す場合は、新しい移動を開始する必要があります。

gcloud spanner operations cancel を使用すると、インスタンスの移動オペレーションをキャンセルできます。キャンセルは瞬時には行われず、移動の開始から経過した時間とほぼ同じ時間が経過します。これは、データを移動元のインスタンス構成に戻す必要があるためです。

このコマンドには、進行中のインスタンス移動オペレーションのオペレーション ID が必要です。

  1. 次のコマンドを実行して、オペレーション ID を取得します。

    gcloud spanner operations list --type=INSTANCE --instance="INSTANCE-ID"
    --filter="done:False AND metadata.@type:MoveInstanceMetadata
    

    次のように置き換えます。

    • INSTANCE-ID: 移動するインスタンスの永続的な識別子。

    出力には、進行中のインスタンス移動オペレーションのリストが表示されます。

  2. gcloud spanner operations cancel コマンドを実行して、インスタンスの移動をキャンセルします。

    gcloud spanner operations cancel OPERATION-ID
    

    次のように置き換えます。

    • OPERATION-ID: キャンセルするインスタンス移動オペレーションのオペレーション ID。

次のステップ