以下各節將說明如何設定 AlloyDB for PostgreSQL 資料庫。
設定 Datastream 與 AlloyDB 間的連線
如要讓 Datastream 連線至 AlloyDB 執行個體,您必須在消費者專案中設定 TCP Proxy。TCP Proxy 映像檔會開放給所有客戶使用。
啟動 Proxy 容器:
- 在消費者專案中啟用 Cloud Shell。
- 執行以下指令碼,建立 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'
輸入下列內容,執行指令碼來顯示 TCP Proxy IP 位址:
gcloud compute instances describe VM_NAME \ --format="yaml(networkInterfaces[].networkIP)" \ --zone=REGION_ID
更改下列內容:
- VM_NAME:虛擬機器的名稱。
- REGION_ID:您建立 TCP proxy 的地區。
(選用) 建立防火牆規則,限制輸入至 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 以進行複製
為 AlloyDB 主要執行個體啟用邏輯解碼功能。在 Google Cloud中,將
alloydb.logical_decoding
標記的值設為 ON。如要瞭解如何更新資料庫旗標,請參閱「設定執行個體的資料庫旗標」。請在同一個 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 資料庫名稱。
執行下列指令,將複製權限授予資料庫使用者:
ALTER USER DB_USER WITH REPLICATION;
建立出版品。建議您只針對要複製的資料表建立發布作業。這樣一來,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;
執行下列指令來建立複製運算單元。
SELECT PG_CREATE_LOGICAL_REPLICATION_SLOT('REPLICATION_SLOT_NAME', 'pgoutput');
更改下列內容:
- REPLICATION_SLOT_NAME:複製運算單元的名稱。您必須在 Datastream 串流建立精靈中建立串流時提供這個名稱。
建立 Datastream 使用者
如要建立 Datastream 使用者,請輸入下列 PostgreSQL 指令:
CREATE USER USER_NAME WITH REPLICATION LOGIN PASSWORD 'USER_PASSWORD';
更改下列內容:
- USER_NAME:您要建立的 Datastream 使用者名稱。
- USER_PASSWORD:您要建立的 Datastream 使用者登入密碼。
將下列權限授予您建立的使用者:
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:您要授予權限的使用者。
後續步驟
- 進一步瞭解 Datastream 如何與 PostgreSQL 來源搭配運作。