設定外部備用資源

本頁說明如何設定 Cloud SQL 執行個體,以便使用 logical decoding 搭配 pglogical 擴充功能複製至 Cloud SQL 外部的備用資源。

如要進一步瞭解複製作業,請參閱「關於 Cloud SQL 中的複製作業」。

設定外部備用資源

事前準備

開始執行這項工作前,您必須擁有符合外部複本的規定的 Cloud SQL 執行個體和外部 PostgreSQL 執行個體。

設定主要執行個體

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。
  2. 在主要執行個體上啟用外部複本的 IP 位址存取權。

    如要瞭解如何啟用 IP 存取權,請參閱「設定 IP 連線存取權」。

  3. 請記下主要執行個體的公開 IP 位址和公開傳出 IP 位址,以供日後使用。您可以在執行個體的「總覽」頁面中找到這些值。
  4. 按一下右上角的 Cloud Shell 圖示
  5. 在 Cloud Shell 提示中,使用內建的 PostgreSQL 用戶端連線至主要執行個體:
       
    gcloud sql connect PRIMARY_INSTANCE_NAME \
    --user=postgres
       
       
  6. 輸入根密碼。您應該會看到 postgres 提示。
  7. 使用 REPLICATION 屬性建立 PostgreSQL 使用者。
    CREATE USER REPLICATION_USER WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  8. 安裝及設定 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;
       
  9. 建立 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'
       );
       
  10. 如果您要從新的資料庫開始,請在主要和備用資源執行個體上建立相同的資料庫和資料表。例如:
    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;
  11. 如果主要執行個體已有資料庫,則必須在複本上建立相同的資料庫。如要執行這項操作,請將資料庫從主要執行個體匯出至 Cloud Storage 值區,然後匯入複本。進一步瞭解如何 將資料從 Cloud SQL 匯出至 Cloud Storage 中的 SQL 傾印檔案
  12. 為了支援將不同資料組複製到不同目的地,pglogical 採用了複製組合的概念。例如,如要在預設複寫組中新增資料表:
    SELECT pglogical.replication_set_add_table('default', 'replica_test', true);
       

設定外部備用資源

  1. 建立用於複製的特殊使用者,並授予複製權限:
    CREATE USER REPLICATION_USER WITH REPLICATION SUPERUSER LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  2. 如果您要從新的資料庫開始,請使用 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');
      
  3. 如果您要使用從主要執行個體匯出的檔案為外部備用資源例項播種,請從 Cloud Storage 下載匯出的檔案。如果外部複本位於 Compute Engine 執行個體中,您可以使用 gcloud storage 指令下載檔案:
    gcloud storage cp gs://BUCKET_NAME/DUMP_FILE_NAME .
        
  4. 將檔案匯入資料庫。
    psql --user=postgres --password < DUMP_FILE_NAME.
    
  5. 請根據作業系統安裝 pglogical。舉例來說,在執行 PostgreSQL 13 的 Debian 系統上,sudo apt-get install postgresql-13-pglogical
  6. 以 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
    # execute CREATE 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.

  7. 建立 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'
      );
      
  8. 建立 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'
    );
      
  9. 查看訂閱狀態:
    SELECT * FROM pglogical.show_subscription_status('SUBSCRIPTION_NAME');
       
  10. 如果狀態顯示為 replicating,表示設定成功。
  11. 將一些資料插入主要資源,然後檢查備用資源,確認資料是否也顯示在該處。

疑難排解

請參閱「pglogical 疑難排解

後續步驟