logical decoding
和
pglogical 擴充功能,設定 Cloud SQL 執行個體,將資料複製到 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
- 輸入根密碼。接著應該會看到 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 資源頁面。
重新啟動資料庫,然後登入並切換至 replication_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.
- 請根據作業系統安裝「
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 複製作業。
- 進一步瞭解複製設定。
- 進一步瞭解如何從外部伺服器複製。