このページでは、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 適用オプションをご覧ください。
- たとえば、Terraform を使用して Spanner インスタンスとデータベースを管理し、
- インスタンスの移動中、Spanner のモニタリング指標とチャートに移行元と移行先の両方のインスタンス構成でデータが表示されることがあります。または、1 つのインスタンス構成でのパフォーマンスしか反映されないこともあります。
- オープンソースのオートスケーラー ツールを構成している場合は、無効にする必要はありません。
InstanceAdmin.UpdateInstance
(ノードと処理ユニットの変更に使用)が無効になっているため失敗します。 Spanner マネージド オートスケーラー機能が有効になっている場合は、インスタンスを移動できません。インスタンスを移動するには、マネージド オートスケーラーを無効にし、インスタンスを移動してから再びマネージド オートスケーラーを有効にする必要があります。
さらに、自動スケーリングを使用している場合は、記載されている最大の推奨値に従ってピーク時の CPU 使用率を維持するのに十分なノードをプロビジョニングし、インスタンスを移動する前に自動スケーリングを無効にする必要があります。
パフォーマンスに関する注意事項
インスタンスの移動時には、読み取り / 書き込みのレイテンシが高くなり、トランザクションの中止率が高くなります。インスタンスの移動は、ユーザーがプロビジョニングした予備の CPU を使用して行われるため、移動中の CPU 使用率は最大 100% に達することがあります。ただし、インスタンスの移動によるダウンタイムは発生しません。インスタンスの移行にかかる時間は、データベースのサイズ、ノード数、移行の種類(リージョンからマルチリージョンなど)など、さまざまな要因によって異なります。
インスタンスを移動した後のインスタンスのパフォーマンスは、インスタンス構成の詳細によって異なります。たとえば、マルチリージョン構成では、一般的にリージョン構成よりも書き込みレイテンシは高く、読み取りレイテンシは低くなります。
バックアップ
インスタンスを移動しても、ソース インスタンスのバックアップは新しい移動先の構成に自動的に移動されません。インスタンスの移動開始時に、ソース インスタンス構成にバックアップが存在する場合、インスタンスの移動は中止されます。インスタンスを移動する前に、バックアップをコピーしてデータ復旧計画を検討することが重要です。
ソース インスタンスに保持する必要があるバックアップがある場合、移動先のインスタンス構成と、移動するソース インスタンスと同じインスタンス構成を持つインスタンスにバックアップをコピーすることをおすすめします。この結果、次のようになります。
- インスタンスの移動が完了した直後に、バックアップを移動先のインスタンスの構成にコピーできます。
- インスタンスの移動をキャンセルする必要がある場合は、元のインスタンスの構成と同じ構成で、インスタンスからバックアップを速やかに復元できます。
バックアップを別のインスタンスにコピーした後、インスタンスを移動する前に、ソース インスタンスの既存のバックアップを削除する必要があります。インスタンスの移動が完了すると、移動先の構成にはバックアップのコピーがすでに存在します。新しいバックアップを作成することもできます。
バックアップのコピーと関連費用については、バックアップをコピーするをご覧ください。
インスタンスを移動する方法
インスタンスを移動するには、Google Cloud コンソールの Cloud Shell と gcloud CLI で gcloud
コマンドを使用します。
前提条件
インスタンス構成を移動する前に、制限事項とパフォーマンスに関する考慮事項のセクションをお読みください。続いて、次の手順を実行します。
- ソース インスタンスに対する
spanner.instances.update
IAM 権限があることを確認します。 - 必要に応じて、本番環境インスタンスを移動する前に非本番環境インスタンス(テストやステージングなど)を移動して、インスタンスの移動中のワークロードに対するパフォーマンスへの影響を評価および把握します。
- Spanner インスタンスを移動すると、移動プロセスによって Data Catalog で作成したインスタンス タグが削除されます。タグを保持するには、移動前にタグをエクスポートし、移動した後にタグをインポートする必要があります。詳細については、タグのエクスポートとインポートをご覧ください。
ベスト プラクティスについては、次のガイドラインにも従ってください。
- 本番環境インスタンスを移動する前に、移動先インスタンス構成内の非本番環境インスタンスのパフォーマンス ワークロードをテストします。本番環境インスタンスと同様のステージング インスタンスを移動して、本番環境インスタンスの移動にかかる時間を確認します。
- Key Visualizer を使用して、データベースにホットスポットがないことを確認します。
- インスタンスの予想されるピーク使用量をサポートするために、移動先インスタンス構成に十分なノード割り当てがあることを確認します。詳細については、割り当てと制限をご覧ください。
- 移動したインスタンス構成のインスタンスのピーク CPU 使用率が 40% を下回り、ノードあたりのストレージ容量が 1 テビバイト(TiB)未満であることを確認します。
- 移動中はインスタンスを変更してはいけません。これには、インスタンス ノード総数の変更、データベース スキーマの変更、データベースの作成または削除、およびバックアップの作成または削除が含まれます。
これらの推奨事項に従ってインスタンスを移動すると、通常、移動は 24 時間以内に完了します。ただし、アプリケーションのワークロードによっては、完了時間が長くなることもあります。
インスタンスを移動する
Google Cloud コンソール
Google Cloud コンソールの上部にある [Cloud Shell をアクティブにする] をクリックします。
Google Cloud コンソールの一番下にある新しいフレームの中で Cloud Shell セッションが開き、コマンドライン プロンプトが表示されます。セッションが初期化されるまで数秒かかることがあります。
gcloud spanner instances move
コマンドを使用して、インスタンスを移動します。gcloud spanner instances move INSTANCE-ID \ --target-config=TARGET_CONFIG
次のように置き換えます。
- INSTANCE-ID: 移動するインスタンスの永続的な識別子。
- TARGET-CONFIG: インスタンスの移動先となるインスタンス構成の永続的な識別子。インスタンスの新しい地理的位置。これは、リージョン、マルチリージョン、またはカスタム インスタンス構成(例:
nam3
、us-central1
、custom-us-c1
)になります。
たとえば、読み取り専用レプリカ
us-west2
を基本インスタンス構成nam3
に追加するとします。基本構成のクローンを作成し、読み取り専用レプリカを追加します。
gcloud spanner instance-configs create custom-nam3-us-west2 \ --clone-config=nam3 --add-replicas=location=us-west2, type=READ_ONLY ```
インスタンス
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: インスタンスの移動先となるインスタンス構成の永続的な識別子。インスタンスの新しい地理的位置。これは、リージョンまたはマルチリージョン インスタンス構成になります(例:
nam3
、us-central1
、custom-us-c1
)。
たとえば、読み取り専用レプリカ us-west2
を基本インスタンス構成 nam3
に追加するとします。
基本構成のクローンを作成し、読み取り専用レプリカを追加します。
gcloud spanner instance-configs create custom-nam3-us-west2 \ --clone-config=nam3 --add-replicas=location=us-west2, type=READ_ONLY
インスタンス
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 が必要です。
次のコマンドを実行して、インスタンス移動オペレーションのオペレーション ID を取得します。
gcloud spanner operations list --instance="INSTANCE-ID"
次のように置き換えます。
- INSTANCE-ID: 移動するインスタンスの永続的な識別子。
出力には、インスタンスの移動オペレーションを含む長時間実行オペレーションのリストが表示されます。
gcloud spanner operations describe
コマンドを実行して、進行状況とステータスを表示します。gcloud spanner operations describe OPERATION-ID
次のように置き換えます。
- OPERATION-ID: 確認するインスタンス移動オペレーションのオペレーション ID。
インスタンス移動オペレーションをモニタリングする
カスタムの Cloud Monitoring ダッシュボードを作成して、インスタンスの移動中に指標を表示してモニタリングできます。これは長時間実行オペレーションであり、サービスに影響する可能性があります。
ダッシュボードの [合計ストレージ] グラフと [データベース別の合計データベース ストレージ] グラフは、移動の進行状況をモニタリングするのに役立ちます。移動元構成のストレージは徐々に減少する一方、移動先構成のストレージは増加しています。
Google Cloud コンソール
move-instance-dashboard.json
ファイルをダウンロードします。 このファイルには、Monitoring のカスタム ダッシュボードに入力するために必要な情報が含まれています。-
Google Cloud コンソールで [ダッシュボード] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] である結果を選択します。
- [ダッシュボードの概要] ページで、[Create dashboard] をクリックします。
- ダッシュボード ツールバーで [ダッシュボードの設定] プルダウンをクリックします。次に、[JSON]、[JSON エディタ] の順に選択します。
- [JSON エディタ] ペインで、ダウンロードした
move-instance-dashboard.json
ファイルの内容をコピーして貼り付けます。 - ダッシュボードに変更を適用するには、[変更を適用] をクリックします。このダッシュボードを使用しない場合は、[ダッシュボードの概要] ページに戻ります。
- ダッシュボードが作成されたら、[フィルタを追加] をクリックします。次に、
project_id
またはinstance_id
を選択して、インスタンスの移動の進行状況をモニタリングします。
gcloud CLI
move-instance-dashboard.json
ファイルをダウンロードします。 このファイルには、Monitoring のカスタム ダッシュボードに入力するために必要な情報が含まれています。プロジェクトでダッシュボードを作成するには、
gcloud monitoring dashboards create
コマンドを使用します。gcloud monitoring dashboards create --config-from-file=move-instance-dashboard.json
詳細については、
gcloud monitoring dashboards create
リファレンスをご覧ください。
インスタンスの移動をキャンセルする方法
キャンセルできるのは、進行中のインスタンスの移動のみです。すでに完了したインスタンスの移動を元に戻すには、新しい移動を開始する必要があります。
gcloud spanner operations cancel
を使用すると、インスタンス移動オペレーションをキャンセルできます。キャンセルは瞬時にではなく、移動の開始からの経過時間とほぼ同じ時間がかかります。これは、データを移動元のインスタンス構成に戻す必要があるためです。
このコマンドには、進行中のインスタンス移動オペレーションのオペレーション ID が必要です。
次のコマンドを実行して、オペレーション ID を取得します。
gcloud spanner operations list --type=INSTANCE --instance="INSTANCE-ID" --filter="done:False AND metadata.@type:MoveInstanceMetadata
次のように置き換えます。
- INSTANCE-ID: 移動するインスタンスの永続的な識別子。
出力には、進行中のインスタンス移動オペレーションのリストが表示されます。
gcloud spanner operations cancel
コマンドを実行して、インスタンスの移動をキャンセルします。gcloud spanner operations cancel OPERATION-ID
次のように置き換えます。
- OPERATION-ID: キャンセルするインスタンス移動オペレーションのオペレーション ID。
次のステップ
- Spanner のリージョン構成とマルチリージョン構成について学習する。
- Google Cloud のリージョンとゾーンの詳細を確認する。