設定 AlloyDB for PostgreSQL 資料庫

以下各節將說明如何設定 AlloyDB for PostgreSQL 資料庫。

設定 Datastream 與 AlloyDB 間的連線

如要讓 Datastream 連線至 AlloyDB 執行個體,您必須在消費者專案中設定 TCP Proxy。TCP Proxy 映像檔會開放給所有客戶使用。

  1. 啟動 Proxy 容器:

    1. 在消費者專案中啟用 Cloud Shell。
    2. 執行以下指令碼,建立 TCP Proxy 並停用橋接網路,以免發生連線問題:
    gcloud compute instances create-with-container \
      --zone=REGION_ID VM_NAME \
      --container-image gcr.io/dms-images/tcp-proxy \
      --tags=dms-tcp-proxy \
      --container-env=SOURCE_CONFIG=ALLOYDB_IP:ALLOYDB_PORT \
      --can-ip-forward \
      --network=SOURCE_AND_DEST_VPC \
      --machine-type=VM_TIER \
      --metadata=startup-script='#! /bin/bash
      mkdir -p /etc/docker
      cat <<EOF > /etc/docker/daemon.json
      {"bridge":"none"}
      EOF
      systemctl restart docker'
    

    更改下列內容:

    • REGION_ID:您要建立 TCP proxy 的區域。
    • VM_NAME:虛擬機器的名稱。
    • ALLOYDB_IP:PostgreSQL 適用的 AlloyDB 執行個體 IP 位址。
    • ALLOYDB_PORT:AlloyDB for PostgreSQL 執行個體的連接埠號碼。
    • SOURCE_AND_DEST_VPC:來源和目的地連線的 VPC 網路。
    • VM_TIER:虛擬機器類型。

    以下是含更新參數的範例指令:

    gcloud compute instances create-with-container \
      --zone=us-central1-c ds-tcp-proxy \
      --container-image gcr.io/dms-images/tcp-proxy \
      --tags=ds-tcp-proxy \
      --container-env=SOURCE_CONFIG=10.16.0.5:5432 \
      --can-ip-forward \
      --network=default \
      --machine-type=e2-micro
      --metadata=startup-script='#! /bin/bash
      mkdir -p /etc/docker
      cat <<EOF > /etc/docker/daemon.json
      {"bridge":"none"}
      EOF
      systemctl restart docker'
    
  2. 輸入下列內容,執行指令碼來顯示 TCP Proxy IP 位址:

    gcloud compute instances describe VM_NAME \
      --format="yaml(networkInterfaces[].networkIP)" \
      --zone=REGION_ID
    

    更改下列內容:

    • VM_NAME:虛擬機器的名稱。
    • REGION_ID:您建立 TCP proxy 的地區。
  3. (選用) 建立防火牆規則,限制輸入至 TCP proxy 的流量:

    gcloud compute firewall-rules create FIREWALL_RULE_NAME \
      --direction=INGRESS \
      --priority=1000 \
      --target-tags=dms-tcp-proxy \
      --network=SOURCE_VPC \
      --action=ALLOW \
      --rules=tcp:ALLOYDB_PORT \
      --source-ranges=IP_RANGE
    

    更改下列內容:

    • FIREWALL_RULE_NAME:防火牆規則的名稱。
    • SOURCE_VPC:來源連線的 VPC 網路。
    • ALLOYDB_PORT:AlloyDB for PostgreSQL 執行個體的連接埠號碼。
    • IP_RANGE:您要限制入站流量的 IP 位址範圍。

    以下範例指令可允許來自所有 IP 位址的輸入流量:

    gcloud compute firewall-rules create ds-proxy1 \
      --direction=INGRESS \
      --priority=1000 \
      --target-tags=ds-tcp-proxy \
      --network=default \
      --action=ALLOW \
      --rules=tcp:5432
    

設定 AlloyDB 以進行複製

  1. 為 AlloyDB 主要執行個體啟用邏輯解碼功能。在 Google Cloud中,將 alloydb.logical_decoding 標記的值設為 ON。如要瞭解如何更新資料庫旗標,請參閱「設定執行個體的資料庫旗標」。

  2. 請在同一個 VPC 中的任何 VM 上執行下列指令,使用 TCP Proxy IP 位址連線至 AlloyDB 執行個體:

      psql -h PROXY_IP \
        -U DB_USER \
        -d DB_NAME
    

    更改下列內容:

    • PROXY_IP:TCP Proxy 的 IP 位址。
    • DB_USER:AlloyDB 資料庫的使用者名稱。
    • DB_NAME:AlloyDB 資料庫名稱。
  3. 執行下列指令,將複製權限授予資料庫使用者:

    ALTER USER DB_USER WITH REPLICATION;
    
  4. 建立出版品。建議您只針對要複製的資料表建立發布作業。這樣一來,Datastream 就只會讀取相關資料,並降低資料庫和 Datastream 的負載:

    CREATE PUBLICATION PUBLICATION_NAME
    FOR TABLE SCHEMA1.TABLE1, SCHEMA2.TABLE2;

    更改下列內容:

    • PUBLICATION_NAME:出版品名稱。您必須在 Datastream 串流建立精靈中建立串流時提供這個名稱。
    • SCHEMA:包含資料表的結構定義名稱。
    • TABLE:要複製的資料表名稱。

    您也可以為資料庫中的所有資料表建立發布作業。請注意,這種做法會增加來源資料庫和 Datastream 的負載:

    CREATE PUBLICATION PUBLICATION_NAME FOR ALL TABLES;
    
  5. 執行下列指令來建立複製運算單元。

    SELECT PG_CREATE_LOGICAL_REPLICATION_SLOT('REPLICATION_SLOT_NAME', 'pgoutput');
    

    更改下列內容:

    • REPLICATION_SLOT_NAME:複製運算單元的名稱。您必須在 Datastream 串流建立精靈中建立串流時提供這個名稱。

建立 Datastream 使用者

  1. 如要建立 Datastream 使用者,請輸入下列 PostgreSQL 指令:

    CREATE USER USER_NAME WITH REPLICATION LOGIN PASSWORD 'USER_PASSWORD';
    

    更改下列內容:

    • USER_NAME:您要建立的 Datastream 使用者名稱。
    • USER_PASSWORD:您要建立的 Datastream 使用者登入密碼。
  2. 將下列權限授予您建立的使用者:

    GRANT SELECT ON ALL TABLES IN SCHEMA SCHEMA_NAME TO USER_NAME;
    GRANT USAGE ON SCHEMA SCHEMA_NAME TO USER_NAME;
    ALTER DEFAULT PRIVILEGES IN SCHEMA SCHEMA_NAME GRANT SELECT ON TABLES TO USER_NAME;
    

    更改下列內容:

    • SCHEMA_NAME:您要授予特權的結構定義名稱。
    • USER_NAME:您要授予權限的使用者。

後續步驟