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
- 輸入根密碼。您應該會看到 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 _node_ 代表實體 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 複製作業。
- 進一步瞭解複寫設定。
- 進一步瞭解如何從外部伺服器複製。