logical decoding
で pglogical 拡張機能を使用して Cloud SQL 外部のレプリカを複製する Cloud SQL インスタンスを構成する方法について説明します。
外部レプリカの構成の詳細については、外部レプリケーションについてをご覧ください。
外部レプリカの構成を行う
始める前に
このタスクを開始する前に、外部レプリカの要件を満たす Cloud SQL インスタンスと外部 PostgreSQL インスタンスを用意しておく必要があります。
プライマリ インスタンスを構成する
- Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
- プライマリ インスタンスで外部レプリカの IP アドレスへのアクセスを有効にします。
IP アクセスの有効化の詳細については、IP 接続のためのアクセスを構成するをご覧ください。
- 後で使用できるように、プライマリ インスタンスのパブリック IP アドレスとパブリック送信 IP アドレスを記録します。これらの値はインスタンスの [概要] ページで確認できます。
- 右上隅の Cloud Shell アイコン()をクリックします。
- Cloud Shell プロンプトで、組み込み PostgreSQL クライアントを使用してプライマリ インスタンスに接続します。
gcloud sql connect PRIMARY_INSTANCE_NAME \ --user=postgres
- root パスワードを入力します。postgres プロンプトが表示されます。
REPLICATION
属性を持つ PostgreSQL ユーザーを作成します。CREATE USER REPLICATION_USER WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
- pglogical 拡張機能をインストールして構成します。
Cloud SQL インスタンスを編集して、以下のフラグを追加して設定します。
cloudsql.enable_pglogical
cloudsql.logical_decoding
max_replication_slots
max_worker_processes
max_wal_senders
-
これらのフラグの詳細については、PostgreSQL リソースのページをご覧ください。
データベースを再起動してログインし、plication_user に切り替えて
pglogical
拡張機能を作成します。CREATE EXTENSION pglogical;
- pglogical ノードを作成します。
pglogical ノードは物理的な PostgreSQL インスタンスを表し、そのインスタンスの接続の詳細を保存しています。
SELECT pglogical.create_node( node_name := 'provider', dsn := 'host=PRIMARY_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD' );
- 新しいデータベースで開始する場合は、プライマリ インスタンスとレプリカ インスタンスの両方に同じデータベースとテーブルを作成します。次に例を示します。
CREATE DATABASE test; \connect test; CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text); INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry'); CREATE EXTENSION pglogical;
- プライマリ インスタンスにデータベースがすでに存在する場合は、レプリカでもデータベースを作成する必要があります。これを行うには、プライマリ インスタンスから Cloud Storage バケットにデータベースをエクスポートし、レプリカにインポートします。詳しくは、Cloud SQL から Cloud Storage の SQL ダンプファイルにデータをエクスポートするをご覧ください。
-
異なるデータセットを異なる宛先に複製できるように、pglogical はレプリケーション セットのコンセプトに対応しています。たとえば、テーブルをデフォルトのレプリケーション セットに追加するには、次のコマンドを実行します。
SELECT pglogical.replication_set_add_table('default', 'replica_test', true);
外部レプリカを構成する
- レプリケーション用に特別なユーザーを作成し、レプリケーションの権限を付与します。
CREATE USER REPLICATION_USER WITH REPLICATION SUPERUSER LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
- 新しいデータベースで開始する場合は、REPLICATION_USER を使用して、プライマリ インスタンスとレプリカ インスタンスの両方に同じデータベースとテーブルを作成します。次に例を示します。
CREATE DATABASE test; \connect test; CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text); INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
- プライマリ インスタンスからエクスポートしたファイルを外部レプリカ インスタンスにシードするには、エクスポートしたファイルを Cloud Storage からダウンロードします。外部レプリカが Compute Engine インスタンス上にある場合は、
gcloud storage
コマンドを使用してファイルをダウンロードできます。gcloud storage cp gs://BUCKET_NAME/DUMP_FILE_NAME .
- ファイルをデータベースにインポートします。
psql --user=postgres --password < DUMP_FILE_NAME.
- OS に応じて
pglogical
をインストールします。たとえば、PostgreSQL バージョン 13 を実行する Debian システムの場合は、sudo apt-get install postgresql-13-pglogical
です。 - replication_user としてデータベースにログインし、次のパラメータを設定します。
ALTER SYSTEM SET shared_preload_libraries = 'pglogical'; ALTER SYSTEM SET max_replication_slots = #; (where # is the same as you set on the primary). ALTER SYSTEM SET max_worker_processes = #; (where # is the same as you set on the primary). # Logout of the database and restart it. For example, #
sudo /etc/init.d/postgresql restart
# Log back in the database as the replication_user. # Since the pglogical extension is created local to each database, you need to # executeCREATE EXTENSION pglogical
in each database you create, so if you # haven't already done that: CREATE EXTENSION pglogical;For more information about these flags, see the PostgreSQL resources page.
- pglogical ノードを作成します。
SELECT pglogical.create_node( node_name := 'subscriber', dsn := 'host=REPLICA_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD' );
- pglogical サブスクリプションを作成します。
SELECT pglogical.create_subscription( subscription_name := 'SUBSCRIPTION_NAME', provider_dsn := 'host=PRIMARY_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD' );
- サブスクリプションのステータスを確認します。
SELECT * FROM pglogical.show_subscription_status('SUBSCRIPTION_NAME');
- ステータスが「
replicating
」と表示されている場合、設定は成功です。 - 一部のデータをプライマリに挿入し、レプリカにもデータが存在することを確認します。
トラブルシューティング
pglogical のトラブルシューティングをご覧ください。次のステップ
- レプリカの管理について学習します。
- 外部レプリカの構成の要件とベスト プラクティスについて学習します。
- PostgreSQL レプリケーションについて学習します。
- レプリケーションの構成設定について学習します。
- 外部サーバーからのレプリケーションについて学習します。