このページでは、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 プロジェクトの設定
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud SQL Admin API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud SQL Admin API.
-
ユーザー アカウントに Cloud SQL 管理者、ストレージ管理者、Compute 閲覧者のロールがあることを確認します。
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、15、16、17
- Amazon RDS 9.6.10 以降、10.5 以降、11.1 以降、12、13、14、15、16、17
- Amazon Aurora 10.11 以降、11.6 以降、12.4 以降、13.3 以降、14、15、16、17
- Cloud SQL 9.6、10、11、12、13、14、15、16、17
移行元を構成するには、移行元インスタンスと基盤となる移行元データベースの両方を構成する必要があります。
外部サーバーのチェックリスト
送信プライベート IP アドレスが静的でないために Cloud SQL レプリカがプライベート IP アドレスで有効になっている場合は、Cloud SQL レプリカがプライベート ネットワークとして使用する VPC ネットワークのプライベート サービス アクセスに割り当てられた内部 IP 範囲を許可するように外部サーバーのファイアウォールを構成します。
ソース データベース サーバーのファイアウォールは、Cloud SQL の宛先インスタンスが IPConfiguration 設定の privateNetwork フィールドとして使用する VPC ネットワークのプライベート サービス接続に割り当てられた内部 IP 範囲全体を許可するように構成する必要があります。
内部 IP 範囲を確認するには:
Google Cloud コンソールの [VPC ネットワーク] ページに移動します。
使用する VPC ネットワークを選択します。
[プライベートサービス接続] タブをクリックします。
移行元インスタンスを構成する
移行元のインスタンスを構成する手順は次のとおりです。
- 移行元のインスタンスに
postgres
データベースが含まれていない場合は、作成します。 - 移行元のインスタンスに pglogical パッケージをインストールする
必要に応じて、次のパラメータを設定します。
移行元の 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_level
をlogical
に設定します。ALTER SYSTEM SET wal_level = 'logical';
移行元の PostgreSQL インスタンスが Amazon RDS の場合、
logical
レベルで WAL ログを有効にするには、rds.logical_replication
パラメータを1
に設定します。次のコマンドを使用して、
wal_sender_timeout
を0
に設定します。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 = #;
- Cloud SQL レプリカでプライベート IP を使用する場合は、内部 IP 範囲を レプリカの VPC ネットワークのプライベート サービス アクセスに割り当てるよう、外部サーバーのファイアウォールを構成します。
- 構成の変更を適用するには、移行元のインスタンスを再起動します。
この手順で設定するパラメータは、実行中の PostgreSQL データベース サーバーに適用されます。これらの変更を postgresql.conf
ファイルに保存すると、変更を永続化することもできます。
9.6 より前のバージョンの PostgreSQL でレプリケーションの遅延モニタリングを有効にする
9.6 より前の PostgreSQL バージョンから移行する場合、デフォルトではレプリケーションの遅延指標を使用できません。この指標は、次の 3 つの方法のいずれかを使用して追跡し、データベースをプロモートする際のダウンタイムを最小限に抑えることができます。
オプション 1: 特定のクエリへのアクセス権を付与することで、Cloud SQL の外部サーバーがレプリケーションの遅延を追跡できるようにする。
SUPERUSER
権限を持つユーザーとして次の操作を行います。次の関数を定義して、外部サーバーがレプリケーションの遅延をクエリできるようにします。
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; $$;
次のコマンドを実行して、
EXECUTE
権限をユーザーに付与します。REVOKE EXECUTE ON FUNCTION pg_stat_replication_user() FROM public;
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 により反映されません。
移行元データベースを構成する
次の場合を除き、Cloud SQL 外部サーバーは移行元インスタンスのすべてのデータベースを移行します。
- 移行元がオンプレミスの場合: テンプレート データベース
template0
とtemplate1
- 移行元が Amazon RDS の場合:
template0
、template1
、rdsadmin
- 移行元がCloud SQL の場合: テンプレート データベース
template0
とtemplate1
上記のリストに含まれていない移行元のインスタンスで各データベースに次の操作を行います。
pglogical
拡張機能をインストールするには、移行元インスタンスのすべてのデータベースで次のコマンドを実行します。CREATE EXTENSION IF NOT EXISTS pglogical
主キーのないテーブルの場合、Cloud SQL は、変更データ キャプチャ(CDC)フェーズで初期スナップショットと
INSERT
ステートメントの移行をサポートします。UPDATE
ステートメントとDELETE
ステートメントは手動で移行します。インスタンスに接続します。次のコマンドを実行して、移行した各データベースとデフォルトの
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_6 、POSTGRES_10 、POSTGRES_11 、POSTGRES_12 、POSTGRES_13 、POSTGRES_14 、POSTGRES_15 、POSTGRES_16 、POSTGRES_17 です。 |
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 ファイルのパス。 |
レプリケーション元表現インスタンスを更新する
外部サーバーからリクエスト データを更新する場合は、変更した値を使用するように既存のソース表現インスタンスを更新します。
リクエスト データを変更する
リクエスト データを更新して、変更されたフィールドを含めます。これには、hostPort
、username
、password
、caCertificate
、clientCertificate
、clientKey
フィールドが含まれます。リクエスト データを更新したら、そのデータを 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_6 、POSTGRES_10 、POSTGRES_11 、POSTGRES_12 、POSTGRES_13 、POSTGRES_14 、POSTGRES_15 、POSTGRES_16 、POSTGRES_17 です。 |
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": { "ipv4Enabled": "PUBLIC_IP_STATUS", "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_16", "name": "replica-instance" }
プロパティ | 説明 |
---|---|
TIER | レプリカ インスタンスをホストするマシンタイプ。どのマシンタイプを使用するかわからない場合は、db-custom-2-7680 から始めます。後で必要に応じてサイズと対応している他の値を変更できます。 |
DISK_SIZE | Cloud SQL レプリカのストレージ サイズ(GB)。 |
PUBLIC_IP_STATUS | インスタンスにパブリック IP アドレスが割り当てられるかどうかを確認します。デフォルトでは、このプロパティの値は true です。レプリカのパブリック IP アドレスの割り当てをオフにするには、値を false に設定します。プロジェクトで constraints/sql.restrictPublicIp 組織のポリシーが有効になっている場合は、Cloud SQL レプリカを作成するために、ipv4Enabled プロパティの値を false に設定する必要があります。パブリック IP アドレスの割り当てを無効にする方法については、パブリック IP を無効にするをご覧ください。 |
PROJECT_ID | Cloud SQL レプリカがプライベート ネットワーク上にある場合は、replica.json ファイルに privateNetwork プロパティを追加します。PROJECT_ID には、Google Cloud のプロジェクトの ID を指定します。 |
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_6 、POSTGRES_10 、POSTGRES_11 、POSTGRES_12 、POSTGRES_13 、POSTGRES_14 、POSTGRES_15 、POSTGRES_16 、POSTGRES_17 です。外部サーバーで実行されているデータベースと同じバージョンに合わせるか、それよりも 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.editor
の IAM ロールに含まれています。
Cloud SQL レプリカへのユーザーの追加
外部サーバーからデータベース ユーザー アカウントをインポートすることはできませんが、このアカウントを Cloud SQL レプリカに作成することはできます。外部サーバーから複製する前に、このアカウントを作成してください。
Cloud SQL レプリカの送信 IP アドレスの取得
Cloud SQL レプリカの送信 IP アドレスを使用して、外部サーバーと Cloud SQL レプリカ間に安全な接続を作成できます。この IP アドレスに対しては課金されません。
コンソール
レプリカの送信 IP アドレスを取得するには、次の手順を行います。
-
Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
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_complete
、postgresql/external_sync/max_replica_byte_lag
、database/replication/state
の各指標の確認が必要になることがあります。Cloud SQL 指標の一覧を表示します。
Cloud SQL レプリカが外部サーバーと同等になり、Cloud SQL レプリカにレプリケーションの遅延がなければ、データベースに接続します。適切なデータベース コマンドを実行し、外部サーバーと比較してコンテンツが想定どおりであることを確認します。必要な検証が完了するまで、外部サーバーを維持します。
カスケード レプリカを設定する
移行後、Cloud SQL レプリカをプロモートする前に、Cloud SQL レプリカにカスケード リードレプリカを作成できます。
カスケード レプリカを作成するには、次のコマンドを実行します。
コンソール
-
Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
- 作成するレプリカの親として機能するレプリカ用の [レプリカ] タブをクリックします。
- [レプリカを作成する] をクリックします。
- [リードレプリカを作成する] ページで、インスタンス ID とその他の構成オプション(名前、リージョン、ゾーンなど)を更新します。
- [作成] をクリックします。
Cloud SQL がレプリカを作成します。親レプリカのインスタンス ページに戻ります。
- 作成する新しいカスケード レプリカごとに手順 4~6 を行います。
gcloud
--master-instance-name
フラグを使用して Cloud SQL レプリカをプライマリ インスタンスとして指定し、新しいレプリカを作成します。- REPLICA_NAME: 作成するレプリカの一意の ID
- PARENT_REPLICA_NAME: Cloud SQL レプリカの名前
レプリカが作成されると、プライマリ インスタンスに対して行われた変更がカスケード レプリカ チェーン内のすべてのレプリカで複製されることがわかります。
gcloud sql instances create REPLICA_NAME \ --master-instance-name=PARENT_REPLICA_NAME \
curl
- 親レプリカの下にレプリカを作成するには、次の JSON コードサンプルを編集し、
request.json
というファイルに保存します。{ "masterInstanceName": "EXTERNAL_SERVER_REPLICA_NAME", "project": "PROJECT_ID", "name": "REPLICA_NAME", "region": "REPLICA_REGION", "settings": { "tier": "MACHINE_TYPE", } }
- 次のコマンドを実行します。
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"
レプリカを昇格させる
次の手順でレプリカを昇格させます。
- レプリカをプライマリ インスタンスに昇格します。
- リードレプリカをインスタンスに追加します。
- 省略可: 高可用性(HA)を確保するためにインスタンスを構成します。今後のダウンタイムを防ぐには、
AVAILABILITY_TYPE
をREGIONAL
に設定してレプリカの設定中に HA を有効にします。
制限事項
Cloud SQL でサポートされていない拡張機能を外部ソース データベースにインストールした場合、データベースを移行先インスタンスに移行しても、Cloud SQL はこれらの拡張機能を移行しません。スムーズに移行できるように、拡張機能を参照しているオブジェクトやアプリケーションがないことを確認します。移行を続行する前に、移行元データベースから拡張機能と参照を削除することをおすすめします。
Cloud SQL でサポートされている拡張機能の詳細については、PostgreSQL 拡張機能を構成するをご覧ください。
外部ソース データベースに
pg_cron
拡張機能をインストールした場合、データベースを移行先インスタンスに移行しても、Cloud SQL は拡張機能や拡張機能に関連付けられたcron
設定を移行しません。データベースを移行してレプリカを昇格させたら、移行した各データベースでpg_cron
拡張機能を再度有効にすることをおすすめします。