新しい宛先クラスタへの移行ジョブを作成する

Database Migration Service を使用して移行先の AlloyDB for PostgreSQL クラスタを作成すると、そのクラスタはプライマリ インスタンスを持つ AlloyDB for PostgreSQL クラスタとしてプロビジョニングされます。移行プロセス中に特定のオペレーションを実行すると、移行エラーが発生することがあります。新しい宛先クラスタに移行する際は、次の運用上の考慮事項に留意してください。

  • 移行中のデータに対する書き込みオペレーションを回避する: 移行に含まれるテーブルまたはデータベースの宛先クラスタで、書き込みオペレーション(INSERT、UPDATE、DELETE、DDL スキーマの変更など)を実行しないでください。このようなオペレーションを行うと、ソースから取得したデータとレプリケーションの競合が発生する可能性があります。
  • データベース ユーザーを管理する: データベース ユーザーは、標準の psql コマンドを使用するか、 Google Cloud コンソールの AlloyDB for PostgreSQL を使用して、いつでも作成および管理できます。詳細については、AlloyDB for PostgreSQL のドキュメントのデータベース ユーザーを管理するをご覧ください。

詳細については、既知の制限事項をご覧ください。

移行ジョブの作成には、次の手順が含まれます。

  1. 移行ジョブの設定を定義します。
  2. ソース データベース用に作成した接続プロファイル(ソース接続プロファイル)に関する情報を指定します。
  3. 移行先の AlloyDB for PostgreSQL クラスタの設定を定義して、クラスタを作成する。
  4. 移行元データベースと移行先データベースの環境間の接続を設定します。
  5. 移行ジョブをテストして、ジョブに指定した接続情報が有効であることを確認します。

新しい移行先クラスタへの移行ジョブを作成するには、次の操作を行います。

コンソール

移行ジョブの設定を定義する

  1. Google Cloud コンソールで、[移行ジョブ] ページに移動します。

    [移行ジョブ] に移動する

  2. [移行ジョブを作成] をクリックします。

    移行ジョブ構成ウィザードのページが開きます。 このウィザードには、各構成手順を説明する複数のパネルが含まれています。

    移行ジョブの作成は、[保存して終了] をクリックすることで、いつでも一時停止できます。その時点までに入力したすべてのデータは、下書きの移行ジョブに保存されます。下書きの移行ジョブは後で完了できます。

  3. [開始] ページで、次の情報を入力します。
    1. 移行ジョブ名

      これは、移行ジョブの人が読める形式の名前です。この値は Google Cloud コンソールに表示されます。

    2. 移行ジョブ ID

      これは、移行ジョブの機械で読み取り可能な識別子です。この値は、Database Migration Service の Google Cloud CLI コマンドまたは API を使用して移行ジョブを操作するときに使用します。

    3. [移行元データベース エンジン] リストから [PostgreSQL] を選択します。
    4. [移行先データベース エンジン] リストから [AlloyDB for PostgreSQL] を選択します。
    5. 移行ジョブを保存するリージョンを選択します。

      Database Migration Service は完全にリージョンに依存するプロダクトです。つまり、移行に関連するすべてのエンティティ(移行元と移行先の接続プロファイル、移行ジョブ、移行先データベース)を 1 つのリージョンに保存する必要があります。Compute Engine インスタンスや App Engine アプリなど、データを必要とするサービスのロケーションに基づいてリージョンを選択します。宛先リージョンを選択すると、この選択は変更できません。

    6. 移行サービスの種類(継続的(スナップショット + 継続的な変更))を指定します。AlloyDB for PostgreSQL の同種移行では、継続的な移行のみがサポートされます。
    7. 環境用に生成された前提条件を確認します。ソース データベースが適切に構成されていることを確認します。詳細については、ソース データベースを構成するをご覧ください。
  4. [保存して次へ] をクリックします。

ソース接続プロファイルに関する情報の指定

[ソースを定義する] ページで、次の手順を行います。

  1. [ソース接続プロファイル] プルダウン メニューから、ソース データベースの接続プロファイルを選択します(または、[接続プロファイルを作成] をクリックします。ソース接続プロファイルを作成するをご覧ください)。
  2. [並列処理構成をカスタマイズする] セクションで、[並列処理構成を表示] をクリックします。

    最初の完全ダンプ中、pglogical 拡張機能はテーブルレベルでデータを複製し、個々の非パーティション分割テーブル、リーフ パーティション、主キーのないテーブルを複数のサブスクリプションに分割しません。つまり、強化されたデータダンプの並列処理では、1 つの大きな非パーティション分割テーブルの初期ダンプ速度を向上させることはできません。これは、そのテーブルが 1 つのサブスクリプション内でコピーされるためです。詳細については、データダンプの並列処理に関する考慮事項をご覧ください。

    データダンプの並列処理の速度は、ソース データベースに誘発される負荷の量に関連しています。

    • 最適(推奨): ソース データベースへの負荷が最適な状態になり、バランスの取れたパフォーマンスが実現します。Database Migration Service は、データベースごとに最大 2 つのサブスクリプションを作成します(すべてのデータベースで合計最大 2 つ、移行されたデータベースごとに少なくとも 1 つのサブスクリプション)。
    • 最大: ダンプ速度が最も速くなりますが、ソース データベースの負荷が増加する可能性があります。Database Migration Service は、データベースごとに最大 4 つのサブスクリプションを作成します(すべてのデータベースで最大 4 つ、移行されたデータベースごとに少なくとも 1 つのサブスクリプション)。
    • 最小: ソース データベースに対して最小量のコンピューティング リソースが使用されますが、ダンプのスループットが低下する可能性があります。Database Migration Service は、データベースごとに 1 つのサブスクリプションを作成します。

    調整されたデータダンプ並列処理設定を選択する場合は、ソース データベースの max_replication_slots、max_wal_senders、max_worker_processes パラメータを必ず増やしてください。

  3. [保存して次へ] をクリックします。

移行先の AlloyDB for PostgreSQL クラスタを構成して作成する

移行ジョブ用に、新しい移行先の AlloyDB for PostgreSQL クラスタを作成します。クラスタは、AlloyDB for PostgreSQL の最上位リソースです。これらには、移行プロセス中に作成するデータベースへの読み取り / 書き込みアクセス用の単一のプライマリ インスタンスが含まれています。

  1. [移行先の定義] ページの [移行先インスタンスのタイプ] プルダウン メニューから、[新しいクラスタ] を選択します。
  2. クラスタタイプを選択します。Database Migration Service は、高可用性の AlloyDB for PostgreSQL クラスタをサポートしています。このクラスタは、リージョン内の複数のゾーンからデータを提供できます。初期プロビジョニング中に読み取りプールはありません。
  3. [続行] をクリックします。
  4. クラスタを構成します。
    1. [クラスタ ID] フィールドに、AlloyDB for PostgreSQL クラスタの ID を入力するか、自動生成された ID を使用します。

      識別子には、機密情報や個人を特定できる情報を含めないでください。クラスタ名にプロジェクト ID を含める必要はありません。この処理は必要に応じて自動的に行われます。

    2. [パスワード] フィールドに、移行先の AlloyDB for PostgreSQL クラスタの英数字のパスワードを入力します。これは、クラスタの postgres 管理者アカウントのパスワードです。

      手動でパスワードを入力するか、[生成] をクリックして Database Migration Service でパスワードを自動生成します。

    3. [データベースのバージョン] プルダウン メニューから、宛先クラスタのデータベースのバージョンを選択します。

      クロスバージョン移行サポートの詳細

    4. [ネットワーク] フィールドで次の操作を行います。
      1. ネットワーク パスを選択して、移行接続の設定時に使用可能なリソースを定義します。クラスタはプライベート IP ネットワーク パスで構成されます。VPC ピアリングを使用してソース データベースに接続する場合は、ソース データベースが存在する VPC を選択します。
      2. ネットワークがプライベート サービス アクセス用に構成されていない場合は、[接続を設定] をクリックして、接続構成ウィザードの手順に沿って操作します。
      3. 選択した VPC にマネージド サービス ネットワークが構成されていない場合は、IP 範囲を選択して [接続] をクリックするか、自動的に選択された IP 範囲を使用して [割り振りと接続] をクリックします。
    5. (省略可)宛先クラスタのデータ暗号化オプションを構成します。

      このセクションを開いて、オプションの手順を確認してください。

      [詳細オプションを表示] をクリックして、移行元から移行先に移行されるデータの暗号化を管理するかどうかを指定します。デフォルトでは、データは Google Cloudが管理する鍵で暗号化されます。

      ご自身で暗号化を管理する場合は、顧客管理の暗号鍵(CMEK)を使用できます。鍵は AlloyDB for PostgreSQL クラスタと同じロケーションにあることが必要です。たとえば、us-west1 にあるクラスタは、us-west1 の鍵のみを使用できます。

      1. [顧客管理の暗号鍵(CMEK)を使用する] ラジオボタンを選択します。
      2. [顧客管理の鍵を選択] メニューから、CMEK を選択します。

      鍵が表示されない場合は、[鍵のリソース名を入力] をクリックして、使用する鍵のリソース名を入力します。たとえば、[鍵のリソース名] フィールドに「projects/my-project-name/locations/my-location/keyRings/my-keyring/cryptoKeys/my-key」と入力し、[保存] をクリックします。

    6. [続行] をクリックします。
  5. プライマリ インスタンスを構成します。プライマリ インスタンスは、クラスタのコンピューティング容量を決定し、読み取り / 書き込みオペレーションをサポートします。
    1. [インスタンス ID] フィールドに、プライマリ インスタンスの ID を入力します。
    2. プライマリ インスタンスのマシンタイプを選択します。
    3. [IP 許可リスト] 接続方法を使用する場合は、[アウトバウンド パブリック IP を有効にする] チェックボックスをオンにします。
    4. (省略可)プライマリ インスタンスのデータベース フラグを構成します。

      このセクションを開いて、オプションの手順を確認してください。

      [詳細オプションを表示] をクリックして、プライマリ インスタンスのデータベース フラグを設定します。サポートされているフラグについては、AlloyDB for PostgreSQL ドキュメントのデータベース フラグを構成するをご覧ください。フラグごとに次の操作を行います。

      1. [フラグを追加] をクリックします。
      2. [新しいデータベース フラグ] リストからフラグを選択します。
      3. フラグの値を指定します。
      4. [完了] をクリックします。
  6. [保存して次へ] をクリックし、[デスティネーションを作成して続行] をクリックして選択を確定します。 Database Migration Service は、移行先の AlloyDB for PostgreSQL クラスタとそのプライマリ インスタンスを作成します。この処理には数分かかることがあります。

移行元データベース インスタンスと移行先クラスタ間の接続を設定する

[接続方法] プルダウン メニューから、ネットワーク接続方法を選択します。この方法により、移行先の AlloyDB for PostgreSQL クラスタがソース データベースに接続する方法が定義されます。新しいクラスタに移行するための現在のネットワーク接続方法には、 IP 許可リスト、VPC ピアリング、リバース SSH トンネル、クラウドでホストされる VM を介した TCP プロキシがあります。

使用したい場合...方法
IP 許可リストのネットワーク接続方法 宛先クラスタのプライマリ インスタンスのアウトバウンド パブリック IP アドレスを両方コピーし、それらを使用して、移行元データベース サーバーと pg_hba.conf ファイルでネットワーク ファイアウォールを構成します。
リバース SSH トンネル ネットワーク接続方法 トンネルをホストする Compute Engine VM インスタンスを選択します。

インスタンスを指定すると、移行元データベースと移行先データベースの間にトンネルを設定する手順を実行するスクリプトが提供されます。ソース データベースと Google Cloudの両方に接続できるマシンから、Google Cloud CLI でスクリプトを実行します。

VPC ピアリング ネットワーク接続方法 移行元データベースが存在する VPC ネットワークを選択します。宛先クラスタは、プライベート サービス アクセスを使用してこのネットワークに接続します。
クラウドでホストされている VM の接続方式を使用した TCP プロキシ TCP プロキシをホストする新しい Compute Engine VM インスタンスに必要な詳細情報を入力します。

詳細を指定すると、 Google Cloud コンソールに、移行元データベースと移行先データベースの間にプロキシを設定するスクリプトが表示されます。更新された Google Cloud CLI がインストールされているマシンでスクリプトを実行します。

スクリプトを実行したら、新しく作成した VM のプライベート IP アドレスを入力し、[構成して続行] をクリックします。

ネットワーク接続を選択して構成したら、[構成して続行] をクリックします。

移行データベースを構成する

移行元インスタンスからすべてのデータベースを移行することも、特定のデータベースのみを選択することもできます。

  1. [移行するデータベース] リストから、次のいずれかのオプションを選択します。
    • すべてのデータベース: ソースに存在するすべてのデータベースを選択します。
    • 特定のデータベース: 移行元に存在するすべてのデータベースから特定のデータベースを選択できます。
  2. 特定のデータベースを移行する場合は、表示されたリストをフィルタして、Database Migration Service で移行先に移行するデータベースを選択します。

    リストが表示されず、データベース検出エラーが表示された場合は、[再読み込み] をクリックします。データベースの検出に失敗すると、ジョブはすべてのデータベースを移行します。移行ジョブの作成を続行し、後で接続エラーを修正できます。

  3. [保存して次へ] をクリックします。

移行ジョブをテスト、作成、実行する

この最後のステップでは、移行ジョブの設定、移行元、移行先、接続方法の概要を確認し、移行ジョブの設定の有効性をテストします。問題が発生した場合は、移行ジョブの設定を変更できます。

  1. [移行ジョブのテストと作成] ページで、[ジョブをテスト] をクリックします。

    テストに失敗した場合は、フローの適切な部分で問題に対処してから、再テストに戻ります。失敗した移行ジョブテストのトラブルシューティングについては、AlloyDB for PostgreSQL の問題を診断するをご覧ください。

  2. 移行ジョブのテストが完了したら、[ジョブを作成して開始] をクリックして移行ジョブを作成し、すぐに開始します。または、[ジョブを作成] をクリックして、すぐに開始せずに移行ジョブを作成します。

    ジョブが作成時に開始されていない場合は、[移行ジョブ] ページで [開始] をクリックして開始できます。移行ジョブの開始時期に関係なく、移行先クラスタが存在すると組織に課金されます。

    移行ジョブを開始すると、Database Migration Service は最初の完全ダンプと継続的なレプリケーションを開始します。詳細については、既知の制限事項をご覧ください。

  3. 移行ジョブを確認するに進みます。

Google Cloud CLI

  1. 宛先接続プロファイルを作成します。
    Google Cloud CLI を使用して新しい宛先クラスタに移行する場合は、1 回の操作で宛先クラスタと接続プロファイルを作成します。
    次のコマンドを実行します(リンクをクリックして展開します)。

    gcloud database-migration connection-profiles create alloydb

    このサンプルでは、オプションの --no-async フラグを使用して、すべてのオペレーションが同期的に実行されるようにしています。そのため、一部のコマンドは完了するまでに時間がかかることがあります。--no-async フラグをスキップして、コマンドを非同期で実行できます。その場合は、gcloud database-migration operations describe コマンドを使用して、オペレーションが成功したかどうかを確認する必要があります。

    後述のコマンドデータを使用する前に、次のように置き換えます。

    • DEST_CONN_ID は、宛先接続プロファイルの識別子に置き換えます。
    • REGION は、接続プロファイルを保存して宛先クラスタを作成するリージョンに置き換えます。
    • DEST_PASSWORD は、移行先の AlloyDB for PostgreSQL クラスタの postgres ユーザーの初期パスワードに置き換えます。
    • PRIMARY_ID は、移行先の AlloyDB for PostgreSQL クラスタのプライマリ インスタンスの ID に置き換えます。
    • CPU_COUNT は、プライマリ インスタンスの vCPU の数(2、4、8 など)に置き換えます。
    • VPC_NETWORK は、プライベート サービス アクセス用に構成された Virtual Private Cloud ネットワークの名前または完全なリソース URI に置き換えます。
    • 省略可: 新しい移行先の AlloyDB for PostgreSQL クラスタとプライマリ インスタンスの追加設定を構成するには、次のフラグを渡します。
      • --enable-outbound-public-ip: プライマリ インスタンスでアウトバウンド パブリック IP を有効にします(IP 許可リスト接続を使用する場合は必須)。
      • --kms-key、--kms-keyring、--kms-project: 顧客管理の暗号鍵(CMEK)を使用して宛先クラスタを暗号化します。
      • --database-version: 宛先クラスタの PostgreSQL のメジャー バージョンを指定します(例: POSTGRES_15)。
      • --database-flags: 移行先のプライマリ インスタンスのデータベース フラグ(KEY=VALUE)のカンマ区切りリストを指定します。

    次のコマンドを実行します。

    Linux、macOS、Cloud Shell

    gcloud database-migration connection-profiles create alloydb DEST_CONN_ID \
      --region=REGION \
      --password=DEST_PASSWORD \
      --primary-id=PRIMARY_ID \
      --cpu-count=CPU_COUNT \
      --network=VPC_NETWORK \
      --no-async

    Windows(PowerShell)

    gcloud database-migration connection-profiles create alloydb DEST_CONN_ID `
      --region=REGION `
      --password=DEST_PASSWORD `
      --primary-id=PRIMARY_ID `
      --cpu-count=CPU_COUNT `
      --network=VPC_NETWORK `
      --no-async

    Windows(cmd.exe)

    gcloud database-migration connection-profiles create alloydb DEST_CONN_ID ^
      --region=REGION ^
      --password=DEST_PASSWORD ^
      --primary-id=PRIMARY_ID ^
      --cpu-count=CPU_COUNT ^
      --network=VPC_NETWORK ^
      --no-async

    次のようなレスポンスが返されます。

    Waiting for connection profile [DEST_CONN_ID]
    to be created with [OPERATION_ID]
    
    Waiting for operation [OPERATION_ID] to complete...done.
    
    Created connection profile DEST_CONN_ID [OPERATION_ID]
    
  2. 移行ジョブを作成します。
    IP 許可リスト、VPC ピアリング、またはリバース SSH トンネル接続を使用する場合は、--static-ip、--peer-vpc、--vm、--vm-ip、--vm-port、--vpc などの必要なフラグを追加してください。詳細については、接続を構成すると Google Cloud CLI の例をご覧ください。
    次のコマンドを実行します(リンクをクリックして展開します)。

    gcloud database-migration migration-jobs create

    このサンプルでは、オプションの --no-async フラグを使用して、すべてのオペレーションが同期的に実行されるようにしています。そのため、一部のコマンドは完了するまでに時間がかかることがあります。--no-async フラグをスキップして、コマンドを非同期で実行できます。その場合は、gcloud database-migration operations describe コマンドを使用して、オペレーションが成功したかどうかを確認する必要があります。

    後述のコマンドデータを使用する前に、次のように置き換えます。

    • MIGRATION_JOB_ID は、移行ジョブの機械で読み取り可能な識別子に置き換えます。この値は、Database Migration Service の Google Cloud CLI コマンドまたは API を使用して移行ジョブを操作するときに使用します。
    • REGION は、移行ジョブを保存するリージョン ID に置き換えます。
    • MIGRATION_JOB_NAME は、移行ジョブの人が読める名前に置き換えます。この値は、 Google Cloud コンソールの Database Migration Service に表示されます。
    • SOURCE_CONNECTION_PROFILE_ID は、ソース接続プロファイルの機械で読み取り可能な識別子に置き換えます。詳細については、ソース接続プロファイルを作成するをご覧ください。
    • DESTINATION_CONNECTION_PROFILE_ID は、宛先接続プロファイルの機械で読み取り可能な識別子に置き換えます。
    • 省略可: Database Migration Service は、デフォルトで移行元のすべてのデータベースを移行します。特定のデータベースのみを移行する場合は、--databases-filter フラグを使用して、識別子をカンマ区切りのリストとして指定します。

      例: --databases-filter=my-business-database,my-other-database

      --databases-filter フラグを使用して作成した移行ジョブは、後で gcloud database-migration migration-jobs update コマンドを使用して編集できます。

    次のコマンドを実行します。

    Linux、macOS、Cloud Shell

    gcloud database-migration migration-jobs \
    create MIGRATION_JOB_ID \
      --no-async \
      --region=REGION \
      --display-name=MIGRATION_JOB_NAME \
      --source=SOURCE_CONNECTION_PROFILE_ID \
      --destination=DESTINATION_CONNECTION_PROFILE_ID \
      --type=CONTINUOUS

    Windows(PowerShell)

    gcloud database-migration migration-jobs `
    create MIGRATION_JOB_ID `
      --no-async `
      --region=REGION `
      --display-name=MIGRATION_JOB_NAME `
      --source=SOURCE_CONNECTION_PROFILE_ID `
      --destination=DESTINATION_CONNECTION_PROFILE_ID `
      --type=CONTINUOUS

    Windows(cmd.exe)

    gcloud database-migration migration-jobs ^
    create MIGRATION_JOB_ID ^
      --no-async ^
      --region=REGION ^
      --display-name=MIGRATION_JOB_NAME ^
      --source=SOURCE_CONNECTION_PROFILE_ID ^
      --destination=DESTINATION_CONNECTION_PROFILE_ID ^
      --type=CONTINUOUS

    次のようなレスポンスが返されます。

    Waiting for migration job [MIGRATION_JOB_ID]
    to be created with [OPERATION_ID]
    
    Waiting for operation [OPERATION_ID] to complete...done.
    
    Created migration job MIGRATION_JOB_ID [OPERATION_ID]