レプリケーション用に Cloud SQL と外部サーバーを構成する

このページでは、Cloud SQL へのレプリケーション用に外部サーバーを構成する方法、Cloud SQL にソース表現インスタンスを作成する方法、データを Cloud SQL にレプリケートする方法について説明します。レプリケーションの手順に進む前に、このページで説明する手順をすべて完了する必要があります。

このページで説明する手順の代わりに、Database Migration Service を使用することもできます。このサービスを使用して、外部サーバーから Cloud SQL に継続的なレプリケーションを行うことも、1 回のデータベースの移行を行うこともできます。

始める前に

用語

  • 外部サーバー。Cloud SQL の外部にあり、データのレプリケーション元となる PostgreSQL サーバー。ソース データベース、外部データベース サーバーとも呼ばれます。別の Cloud SQL インスタンスの場合も、オンプレミス、Amazon リレーショナル データベース サービス(RDS)などの他のデータベース サーバーの場合もあります。

  • ソース表現インスタンス。Cloud SQL レプリカに対する外部サーバーを表す Cloud SQL インスタンスのモック。これは Google Cloud コンソールに表示されます。通常の Cloud SQL インスタンスのように見えますが、データは含まれていません。構成やメンテナンスは必要ありません。また、課金にも影響しません。

  • Cloud SQL レプリカ。外部サーバーから複製する Cloud SQL インスタンス。外部プライマリ リードレプリカともいいます。

  • レプリケーション ユーザー アカウント。外部サーバーと Cloud SQL レプリカ間のレプリケーションを実行できる十分な権限がある、外部サーバー上の PostgreSQL ユーザー アカウント。

  • マネージド インポート。外部サーバーから Cloud SQL レプリカにデータを直接インポートするプロセス。この場合、Cloud SQL はレプリケーション ユーザー アカウントを使用して外部サーバーに接続し、外部サーバーで直接データダンプを実行して Cloud SQL レプリカにデータをインポートします。

Google Cloud プロジェクトの設定

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Cloud SQL Admin API を有効にします。

    API を有効にする

  5. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  6. Google Cloud プロジェクトで課金が有効になっていることを確認します

  7. Cloud SQL Admin API を有効にします。

    API を有効にする

  8. ユーザー アカウントに Cloud SQL 管理者、ストレージ管理者、Compute 閲覧者のロールがあることを確認します。

    IAM ページに移動

Google Cloud SDK のインストール

レプリケーションを構成するには、外部サーバーの Google Cloud SDK をインストールします。SDK を別の場所にすでにインストールしていない限り、外部サーバーに SDK をインストールすることをおすすめします。

レプリケーション用の外部サーバーを設定する

Cloud SQL は、移行元のデータベースから Cloud SQL 宛先データベースへの継続的な移行をサポートしています。

PostgreSQL でサポートされている移行元のデータベースには次のものが含まれます。

  • セルフマネージド(オンプレミス、またはお客様が完全に管理するクラウド VM 上)の PostgreSQL 9.4、9.5、9.6、10、11、12、13、14
  • Amazon RDS 9.6.10 以降、10.5 以降、11.1 以降、12、13、14
  • Amazon Aurora 10.11 以降、11.6 以降、12.4 以降、13.3 以降
  • Cloud SQL 9.6、10、11、12、13、14

移行元を構成するには、移行元インスタンスと基盤となる移行元データベースの両方を構成する必要があります。

外部サーバーのチェックリスト

送信プライベート IP アドレスが静的でないために Cloud SQL レプリカがプライベート IP アドレスで有効になっている場合は、Cloud SQL レプリカがプライベート ネットワークとして使用する VPC ネットワークのプライベート サービス アクセスに割り当てられた内部 IP 範囲を許可するように外部サーバーのファイアウォールを構成します。

ソース データベース サーバーのファイアウォールは、Cloud SQL の宛先インスタンスが IPConfiguration 設定privateNetwork フィールドとして使用する VPC ネットワークのプライベート サービス接続に割り当てられた内部 IP 範囲全体を許可するように構成する必要があります。

内部 IP 範囲を確認するには:

  1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] ページに移動

  2. 使用する VPC ネットワークを選択します。

  3. [プライベート サービス接続] タブをクリックします。

移行元インスタンスを構成する

移行元インスタンスを構成する手順は次のとおりです。

  1. 移行元インスタンスに postgres データベースが含まれていない場合は、作成します。
  2. 移行元インスタンスに pglogical パッケージをインストールします。
  3. 必要に応じて、次のパラメータを設定します。

    移行元の PostgreSQL インスタンスが Amazon RDS の場合は、これらのパラメータを新しいパラメータ グループに追加し、パラメータ グループをインスタンスに追加します。

    • 移行元が Cloud SQL の場合は、cloudsql.logical_decoding フラグと cloudsql.enable_pglogical フラグを on に設定します。

      Cloud SQL でフラグを有効にするには、データベース フラグの構成をご覧ください。

    • 次のコマンドを使用して、pglogical を含めるように shared_preload_libraries を設定します。

      ALTER SYSTEM SET shared_preload_libraries = 'pglogical';
            
    • 次のコマンドを使用して、wal_levellogical に設定します。

          ALTER SYSTEM SET wal_level = 'logical';
          

      移行元の PostgreSQL インスタンスが Amazon RDS の場合、logical レベルで WAL ログを有効にするには、rds.logical_replication パラメータを 1 に設定します。

    • 次のコマンドを使用して、wal_sender_timeout0 に設定します。

      ALTER SYSTEM SET wal_sender_timeout = 0;

      0 は、非アクティブなレプリケーション接続を終了するために使用するタイムアウト メカニズムを無効にします。

    • max_replication_slots を、移行元インスタンスがサポートできるレプリケーション スロットの最大数に設定します。# を数字に置き換えて、次のコマンドを使用します。

      ALTER SYSTEM SET max_replication_slots = #;

      Cloud SQL では、移行されるデータベースごとに 1 つのスロットが必要です。接続が予想されるサブスクリプションの数を指定します(テーブル同期用の予約分を含む)。

      たとえば、移行元インスタンスに 5 つのデータベースがあり、移行元に 2 つの移行ジョブが作成された場合、すでに使用されていたレプリケーション スロットの数以外に、5 × 2 = 10 以上のレプリケーション スロットが必要です。

    • インスタンスですでに使用されている送信者の数に加え、max_wal_senders には、少なくとも max_replication_slots と同じ値に設定します。次のコマンドを実行します。ここで、# は、同時に実行される WAL 送信者プロセスの合計数に置き換えます。

      ALTER SYSTEM SET max_wal_senders = #;

      たとえば、max_replication_slots パラメータが 10 に設定されていて、すでに 2 つの送信者を使用している場合、同時に実行される WAL 送信者プロセスの数は 10 + 2 = 12 になります。

    • インスタンスですでに使用されているワーカー プロセスの数に加え、max_worker_processes には、移行元インスタンスのデータベース数以上に設定します。# を合計数に置き換えて、次のコマンドを使用します。

      ALTER SYSTEM SET max_worker_processes = #;
  4. この手順で設定するパラメータは、実行中の PostgreSQL データベース サーバーに適用されます。これらの変更を postgresql.conf ファイルに保存すると、変更を永続化することもできます。

  5. Cloud SQL レプリカでプライベート IP を使用する場合は、内部 IP 範囲をレプリカの VPC ネットワークのプライベート サービス アクセスに割り振るように、外部サーバーのファイアウォールを構成します。
  6. 構成の変更を適用するには、移行元インスタンスを再起動します。

9.6 より前のバージョンの PostgreSQL でレプリケーションの遅延モニタリングを有効にする

9.6 より前の PostgreSQL バージョンから移行する場合、デフォルトではレプリケーション遅延の指標を使用できません。この指標は、次のいずれかの方法で追跡できます。これにより、データベースを昇格する際のダウンタイムを最小限に抑えることができます。

  • オプション 1: 特定のクエリへのアクセス権を付与することで、Cloud SQL の外部サーバーがレプリケーションの遅延を追跡できるようにする。SUPERUSER 権限を持つユーザーとして次の操作を行います。

    1. 次の関数を定義して、外部サーバーがレプリケーションの遅延をクエリできるようにします。

      CREATE OR REPLACE FUNCTION pg_stat_replication_user()
      RETURNS TABLE (
      pid               integer                  ,
      usesysid          oid                      ,
      username          name                    ,
      application_name  text                     ,
      client_addr       inet                     ,
      client_hostname   text                     ,
      client_port       integer                  ,
      backend_start     timestamp with time zone ,
      backend_xmin      xid                      ,
      state             text                     ,
      sent_location     pg_lsn                   ,
      write_location    pg_lsn                   ,
      flush_location    pg_lsn                   ,
      replay_location   pg_lsn                   ,
      sync_priority     integer                  ,
      sync_state        text
      )
      LANGUAGE SQL
      SECURITY DEFINER
      AS $$
       SELECT *
       FROM pg_catalog.pg_stat_replication;
      $$;
      
    2. 次のコマンドを実行して、EXECUTE 権限をユーザーに付与します。

      1. REVOKE EXECUTE ON FUNCTION pg_stat_replication_user() FROM public;
      2. GRANT EXECUTE ON FUNCTION pg_stat_replication_user() to {replication_user};
  • オプション 2: 移行元インスタンスに接続するユーザーに直接 SUPERUSER 権限を付与する。これにより、外部サーバーがレプリケーションの遅延を直接読み取ることができます。

  • オプション 3: 次のクエリを使用して、レプリケーションの遅延を個別に追跡する。

        SELECT current_timestamp, application_name,
        pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.sent_location) AS sent_location_lag,
        pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.write_location) AS write_location_lag,
        pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.flush_location) AS flush_location_lag,
        pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.replay_location) AS replay_location_lag
        FROM pg_stat_replication
        WHERE application_name like 'cloudsql%';
      

    この方法では、グラフや API レスポンスにレプリケーション遅延の指標が反映されません。

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

次の場合を除き、Cloud SQL 外部サーバーは移行元インスタンスのすべてのデータベースを移行します。

  • 移行元がオンプレミスの場合: テンプレート データベース template0template1
  • 移行元が Amazon RDS の場合: template0template1rdsadmin
  • 移行元が Cloud SQL の場合: テンプレート データベース template0template1

このリストにない移行元インスタンスで、各データベースに次の操作を行います。

  1. pglogical 拡張機能をインストールするには、移行元インスタンスのすべてのデータベースで次のコマンドを実行します。

    CREATE EXTENSION IF NOT EXISTS pglogical

    主キーのないテーブルの場合、Cloud SQL は、変更データ キャプチャ(CDC)フェーズで初期スナップショットと INSERT ステートメントの移行をサポートします。UPDATE ステートメントと DELETE ステートメントは手動で移行します。

  2. インスタンスに接続します。次のコマンドを実行して、移行した各データベースとデフォルトの postgres データベースに対する権限を設定します。

    移行元インスタンスへの接続には、[接続プロファイル] ページでユーザーとして構成されているユーザーを使用します。新しいユーザーを作成することも、既存のユーザーを再利用することもできます。

    • 移行する各データベースのすべてのスキーマ(情報スキーマと pg_ で始まるスキーマを除く)で、次のコマンドを実行します。

      GRANT USAGE on SCHEMA schema to username;
      GRANT SELECT on ALL SEQUENCES in SCHEMA schema to username;
      GRANT SELECT on ALL TABLES in SCHEMA schema to username;
    • 移行する各データベースで、次のコマンドを実行します。

      GRANT USAGE on SCHEMA pglogical to PUBLIC;
    • 移行元データベースからすべてのデータベースのレプリケーション情報を取得するには、次のコマンドを実行します。

      GRANT SELECT on ALL TABLES in SCHEMA pglogical to username;
    • 移行元が Amazon RDS の場合は、次のコマンドを実行します。

      GRANT rds_replication to username;

      それ以外の場合は、次のコマンドを実行します。

      ALTER USER username with REPLICATION;

ソース表現インスタンスの設定

ソース表現インスタンスは外部サーバーを参照します。ここには、外部サーバーからのリクエスト データのみが含まれます。リクエスト データを作成して curl コマンドで使用し、Cloud SQL にソース表現インスタンスを作成します。

リクエスト データの作成

リクエスト データには、外部サーバーに関する基本情報が JSON 形式で含まれています。リクエスト データは、パブリック ネットワークまたはプライベート ネットワーク上の Cloud SQL レプリカ用に構成でき、この情報が含まれている必要があります。

source.json

    {
      "name": "SOURCE_NAME",
      "region": "REGION",
      "databaseVersion": "DATABASE_VERSION",
      "onPremisesConfiguration": {
        "hostPort": "SOURCE_HOST",
        "username": "USERNAME",
        "password": "PASSWORD",
        "caCertificate": "SOURCE_CERT",
        "clientCertificate": "CLIENT_CERT",
        "clientKey": "CLIENT_KEY"
      }
    }

マネージド インポートの例

// example of source.json for external server that
// - initiates replication from a Cloud SQL managed import
// - doesn't use SSL/TSL

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "POSTGRES_9_6",
  "onPremisesConfiguration": {
    "hostPort": "192.0.2.0:3306",
    "username": "replicationUser",
    "password": "486#@%*@"
  }
}
プロパティ 説明
SOURCE_NAME 作成するソース表現インスタンスの名前。
REGION ソース表現インスタンスを配置するリージョン
DATABASE_VERSION 外部サーバーで実行されているデータベースのバージョン。オプションは POSTGRES_9_6POSTGRES_10POSTGRES_11POSTGRES_12POSTGRES_13POSTGRES_14 です。
SOURCE HOST 外部サーバーの IPv4 アドレスとポート、または外部サーバーの DNS アドレス。外部サーバーが Cloud SQL でホストされている場合、ポートは 5432 です。
USERNAME 外部サーバー上のレプリケーション ユーザー アカウント。
PASSWORD レプリケーション ユーザー アカウントのパスワード。
BUCKET ダンプファイルが含まれるバケットの名前。Cloud Storage バケットに存在するダンプファイルを使用してレプリケーションを設定する場合にのみ指定します。
DUMP_FILE 外部サーバーのデータが含まれるバケット内のファイル。
CLIENT_CA_CERT 外部サーバーの CA 証明書。外部サーバーで SSL / TLS が使用されている場合にのみ指定します。
CLIENT_CERT 外部サーバー上のクライアント証明書。サーバー クライアント認証を使用する場合にのみ必要です。外部サーバーで SSL / TLS が使用されている場合にのみ指定します。
CLIENT_KEY 外部サーバー上のクライアント証明書の秘密鍵ファイル。サーバー クライアント認証を使用する場合にのみ必要です。外部サーバーで SSL / TLS が使用されている場合にのみ指定します。

ソース表現インスタンスの作成

この手順を始める前に、ソース リクエスト データを含む JSON ファイルを作成します。

次に、Cloud SQL でソース表現インスタンスを作成するために、ターミナルを開いて次のコマンドを実行します。

curl

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @JSON_PATH \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data @./source.json \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances
プロパティ 説明
PROJECT_ID Google Cloud のプロジェクトの ID。
JSON_PATH 外部サーバーのリクエスト データを含む JSON ファイルのパス。

ソース表現インスタンスの更新

外部サーバーからリクエスト データを更新する場合は、変更した値を使用するように既存のソース表現インスタンスを更新します。

リクエスト データを変更する

リクエスト データを更新して、変更されたフィールドを含めます。これには、hostPortusernamepasswordcaCertificateclientCertificateclientKey フィールドが含まれます。リクエスト データを更新したら、そのデータを curl コマンドで使用して、Cloud SQL のインスタンスを更新します。

次の例では、username フィールドと password フィールドを別のユーザー名とパスワードで更新しています。

source.json

    {
      "name": "SOURCE_NAME",
      "region": "REGION",
      "databaseVersion": "DATABASE_VERSION",
      "onPremisesConfiguration": {
        "username": "NEW_USERNAME",
        "password": "NEW_PASSWORD"
      }
    }

マネージド インポートの例

// example of source.json for external server that
// - initiates replication from a Cloud SQL managed import
// - doesn't use SSL/TSL

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "POSTGRES_9_6",
  "onPremisesConfiguration": {
    "username": "newReplicationUser",
    "password": "525#@%*@"
  }
}
プロパティ 説明
SOURCE_NAME ソース表現インスタンスの名前。
REGION ソース表現インスタンスが存在するリージョン
DATABASE_VERSION 外部サーバーで実行されているデータベースのバージョン。オプションは POSTGRES_9_6POSTGRES_10POSTGRES_11POSTGRES_12POSTGRES_13POSTGRES_14 です。
NEW_USERNAME 外部サーバー上の新しいレプリケーション ユーザー アカウント。
NEW_PASSWORD 新しいアカウントのパスワード。

ソース表現インスタンスを変更する

この手順を始める前に、変更したリクエスト データを含む JSON ファイルを作成します。

次に、Cloud SQL でソース表現インスタンスを変更するために、ターミナルを開いて次のコマンドを実行します。

curl

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @JSON_PATH \
         -X PATCH \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/SOURCE_NAME

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data @./source.json \
     -X PATCH \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/cloudsql-source-instance
プロパティ 説明
PROJECT_ID Google Cloud のプロジェクトの ID。
JSON_PATH 外部サーバーのリクエスト データを含む JSON ファイルのパス。
SOURCE_NAME ソース表現インスタンスの名前。

Cloud SQL レプリカの設定

Cloud SQL レプリカには、最終的に外部サーバーからのデータが含まれます。このステップでは、リクエスト データを作成し、そのデータを curl コマンドで使用して、Cloud SQL に Cloud SQL レプリカを作成します。

リクエスト データの作成

リクエスト データには、外部サーバーと Cloud SQL レプリカに関する基本情報が JSON 形式で含まれています。リクエスト データは、パブリック ネットワークまたはプライベート ネットワーク上の Cloud SQL レプリカ用に構成でき、この情報が含まれている必要があります。

replica.json

    {
        "settings": {
            "tier": "TIER",
            "dataDiskSizeGb": "DISK_SIZE",
            "ipConfiguration": {
                "privateNetwork": "projects/PROJECT_ID/global/networks/NETWORK_NAME"
             },
             "availabilityType": "AVAILABILITY_TYPE"
        },
        "masterInstanceName": "SOURCE_REPRESENTATION_INSTANCE_NAME",
        "region": "SOURCE_REGION",
        "databaseVersion": "DATABASE_VERSION",
        "name": "REPLICA_NAME"
    }

    {
        "settings": {
            "tier": "db-custom-4-15360",
            "dataDiskSizeGb": "100"
        },
        "masterInstanceName": "source-instance",
        "region": "us-central1",
        "databaseVersion": "POSTGRES_14",
        "name": "replica-instance"
    }
プロパティ 説明
TIER レプリカ インスタンスをホストするマシンタイプ。どのマシンタイプを使用するかわからない場合は、db-custom-2-7680 から始めます。後で必要に応じてサイズとサポートされている他の値を変更できます。
DISK_SIZE Cloud SQL レプリカのストレージ サイズ(GB)。
PROJECT_ID Google Cloud のプロジェクトの ID。ipConfiguration は、Cloud SQL レプリカがプライベート ネットワーク上にある場合にのみ指定します。
NETWORK_NAME Cloud SQL レプリカで使用するプライベート ネットワークの名前。
AVAILABILITY_TYPE Cloud SQL レプリカの可用性タイプ。デフォルトでは、値は ZONAL です。レプリカを HA にするには、値を REGIONAL に設定します。使用可能な値については、SqlAvailabilityType をご覧ください。
外部サーバーの HA レプリカを作成した後で、それを非 HA レプリカに変更することはできません。その逆も同様です。外部サーバーの非 HA レプリカを HA レプリカに変更することはできません。
インスタンスが最初のデータをまだ読み込んでいるときに手動フェイルオーバーを行うと、回復不能な移行が発生する可能性があります。また、インスタンスが移行元からのレプリケートを開始している場合に手動フェイルオーバーを行うと、一時的なダウンタイムが発生する可能性があります。レプリケーションのステータスを確認します。
SOURCE_REPRESENTATION_INSTANCE_NAME ソース表現インスタンスの名前。
SOURCE_REGION ソース表現インスタンスに割り当てられているリージョン。
DATABASE_VERSION Cloud SQL レプリカで使用するデータベースのバージョン。選択肢は、POSTGRES_9_6POSTGRES_10POSTGRES_11POSTGRES_12POSTGRES_13、または POSTGRES_14 です。外部サーバーで実行されているデータベースと同じバージョンだけでなく、それよりも 1 つ大きいバージョンを使用することもできます。
REPLICA_NAME 作成する Cloud SQL レプリカの名前。

Cloud SQL レプリカの作成

この手順を始める前に、レプリカ リクエスト データを含む JSON ファイルを作成します。次に、Cloud SQL レプリカを作成するため、Cloud Shell ターミナルを開いて次のコマンドを実行します。

curl

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @JSON_PATH \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @./replica.json \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances
プロパティ 説明
PROJECT_ID Google Cloud のプロジェクトの ID。これはソース インスタンスの ID と同じにする必要があります。
JSON_PATH Cloud SQL レプリカのリクエスト データが含まれる JSON ファイルのパス。

設定を確認する

インスタンスが正しく設定されていることを確認するには、Cloud SQL インスタンス ページに移動します。

次のようなリストでソース表現インスタンスと Cloud SQL レプリカが表示されます。

インスタンス ID タイプ パブリック IP
(-) source-representation-instance データベース外部プライマリ 10.68.48.3:5432
replica-instance データベースのリードレプリカ 34.66.48.59

Cloud SQL レプリカに対する cloudsql.instances.migrate 権限があることも確認してください。この権限は、cloudsql.admin または cloudsql.editorIAM ロールに含まれています。

Cloud SQL レプリカへのユーザーの追加

外部サーバーからデータベース ユーザー アカウントをインポートすることはできませんが、このアカウントを Cloud SQL レプリカに作成することはできます。外部サーバーから複製する前に、このアカウントを作成してください。

Cloud SQL レプリカの送信 IP アドレスの取得

Cloud SQL レプリカの送信 IP アドレスを使用して、外部サーバーと Cloud SQL レプリカ間に安全な接続を作成できます。この IP アドレスに対しては課金されません。

コンソール

レプリカの送信 IP アドレスを取得するには、次の手順を行います。

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. Cloud SQL レプリカのパブリック IP アドレスの横にある [詳細] ツールチップにカーソルを合わせて、送信 IP アドレスを取得します。

    この送信 IP アドレスは、Google Cloud コンソールでレプリカのメインリストに表示される IP アドレスではありません。

gcloud

レプリカの送信 IP アドレスを取得するには、次のコマンドを実行します。

gcloud sql instances describe REPLICA_NAME --format="default(ipAddresses)"
プロパティ 説明
REPLICA_NAME 取得したい送信パブリック IP アドレスを持つ Cloud SQL レプリカの名前。

外部サーバーで受信接続を許可する

レプリケーションを成功させるには、Cloud SQL レプリカが外部サーバーに接続する必要があります。次の条件に当てはまる場合、Cloud SQL レプリカの送信 IP アドレスからの接続を受け入れるように外部サーバーのネットワーク ファイアウォールを構成する必要があります。

  • 外部サーバーがファイアウォールの背後にあるか、その他のネットワーク制限で保護されている。
  • Cloud SQL レプリカでパブリック IP を使用している。

Cloud SQL レプリカに接続するには、レプリカのプライマリ IP アドレスを使用します。この IP アドレスは、Google Cloud コンソールに表示されます。

Cloud SQL レプリカへのレプリケーションを許可するためにソース表現インスタンスを更新する

Cloud SQL レプリカのソース表現インスタンスを設定したら、ソース表現インスタンスの更新が必要になることがあります。たとえば、次のようなシナリオでは構成の更新が必要です。

  • 外部サーバーのホスト、ポート、または IP を変更する。
  • 別の PostgreSQL レプリケーション ユーザーを使用する。
  • PostgreSQL レプリケーション ユーザーのパスワードを変更する。
  • 外部サーバーとのセキュア接続に使用する SSL 証明書を変更する。

Cloud SQL レプリカをシードする

外部サーバーから Cloud SQL レプリカにデータを初めて読み込む場合は、マネージド インポートを使用します。外部サーバーからデータを抽出し、Cloud SQL インスタンスに直接インポートするサービスを使用します。詳細については、マネージド インポートを使用して外部データベースからのレプリケーションを設定するをご覧ください。

レプリケーションをモニタリングする

Cloud SQL レプリカは、最初のデータ読み込みを完了すると、外部サーバーに接続し、エクスポート オペレーションの後に行われたすべての更新を適用します。レプリケーションのステータスを確認します

スタンドアロン インスタンスにレプリカを昇格する前に、レプリケーションのステータスを確認することが重要です。レプリケーション プロセスが正常に完了しなかった場合、昇格されたレプリカには、外部サーバーからの変更がすべて含まれるわけではありません。

レプリケーションの遅延が 0 に近づかない場合は、対応が必要です/postgresql/external_sync/initial_sync_completepostgresql/external_sync/max_replica_byte_lagdatabase/replication/state の各指標の確認が必要になることがあります。Cloud SQL 指標の一覧を表示します。

Cloud SQL レプリカが外部サーバーと同等になり、Cloud SQL レプリカにレプリケーションの遅延がなければ、データベースに接続します。適切なデータベース コマンドを実行し、外部サーバーと比較してコンテンツが想定どおりであることを確認します。必要な検証が完了するまで、外部サーバーを維持します。

カスケード レプリカを設定する

移行後、Cloud SQL レプリカをプロモートする前に、Cloud SQL レプリカにカスケード リードレプリカを作成できます。

カスケード レプリカを作成するには、次のコマンドを実行します。

コンソール

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. 作成するレプリカの親として機能するレプリカ用の [レプリカ] タブをクリックします。
  3. [レプリカを作成する] をクリックします。
  4. [リードレプリカを作成する] ページで、インスタンス ID とその他の構成オプション(名前、リージョン、ゾーンなど)を更新します。
  5. [作成] をクリックします。

    Cloud SQL がレプリカを作成します。親レプリカのインスタンス ページに戻ります。

  6. 作成する新しいカスケード レプリカごとに手順 4~6 を行います。

gcloud

  1. --master-instance-name フラグを使用して Cloud SQL レプリカをプライマリ インスタンスとして指定し、新しいレプリカを作成します。

    gcloud sql instances create REPLICA_NAME \
          --master-instance-name=PARENT_REPLICA_NAME \
    
    次のように置き換えます。
    • REPLICA_NAME: 作成するレプリカの一意の ID
    • PARENT_REPLICA_NAME: Cloud SQL レプリカの名前
  2. レプリカが作成されると、プライマリ インスタンスに対して行われた変更がカスケード レプリカ チェーン内のすべてのレプリカで複製されることがわかります。

curl

  1. 親レプリカの下にレプリカを作成するには、次の JSON コードサンプルを編集し、request.json というファイルに保存します。

    {
      "masterInstanceName": "EXTERNAL_SERVER_REPLICA_NAME",
      "project": "PROJECT_ID",
      "name": "REPLICA_NAME",
      "region": "REPLICA_REGION",
      "settings":
        {
          "tier": "MACHINE_TYPE",
        }
    }
    
  2. 次のコマンドを実行します。
    curl -X POST
    -H "Authorization: Bearer "$(gcloud auth print-access-token)
    -H "Content-Type: application/json; charset=utf-8"
    -d @request.json
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances"
    

レプリカを昇格させる

次の手順でレプリカを昇格させます。

  1. レプリカをプライマリ インスタンスに昇格させます
  2. リードレプリカをインスタンスに追加します
  3. 省略可: 高可用性(HA)を確保するためにインスタンスを構成します。今後のダウンタイムを防ぐには、AVAILABILITY_TYPEREGIONAL に設定してレプリカの設定中に HA を有効にします。

次のステップ