In den folgenden Abschnitten wird beschrieben, wie Sie eine AlloyDB for PostgreSQL-Datenbank konfigurieren.
Verbindung zwischen Datastream und AlloyDB einrichten
Damit Datastream eine Verbindung zur AlloyDB-Instanz herstellen kann, müssen Sie im Nutzerprojekt einen TCP-Proxy einrichten. Das TCP-Proxy-Image ist für alle Nutzer öffentlich verfügbar.
Starten Sie den Proxy-Container:
- Aktivieren Sie Cloud Shell im Nutzerprojekt.
- Führen Sie das folgende Script aus, um den TCP-Proxy zu erstellen und das Bridge-Netzwerk zu deaktivieren, um Verbindungsprobleme zu vermeiden:
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'
Ersetzen Sie Folgendes:
- REGION_ID: Die Region, in der Sie den TCP-Proxy erstellen möchten.
- VM_NAME: Der Name der virtuellen Maschine.
- ALLOYDB_IP: Die IP-Adresse der AlloyDB for PostgreSQL-Instanz.
- ALLOYDB_PORT: Die Portnummer der AlloyDB for PostgreSQL-Instanz.
- SOURCE_AND_DEST_VPC: Das VPC-Netzwerk, mit dem die Quelle und das Ziel verbunden sind.
- VM_TIER: Der Typ Ihrer virtuellen Maschine.
Ein Beispielbefehl mit aktualisierten Parametern:
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'
Führen Sie das Script aus, um die IP-Adresse des TCP-Proxys mit den folgenden Eingaben auszugeben:
gcloud compute instances describe VM_NAME \ --format="yaml(networkInterfaces[].networkIP)" \ --zone=REGION_ID
Ersetzen Sie Folgendes:
- VM_NAME: Der Name Ihrer virtuellen Maschine.
- REGION_ID: Die Region, in der Sie den TCP-Proxy erstellt haben.
(Optional) Erstellen Sie eine Firewallregel, um eingehenden Traffic an den TCP-Proxy zu beschränken:
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
Ersetzen Sie Folgendes:
- FIREWALL_RULE_NAME: Der Name der Firewallregel.
- SOURCE_VPC: Das VPC-Netzwerk, mit dem Ihre Quelle verbunden ist.
- ALLOYDB_PORT: Die Portnummer der AlloyDB for PostgreSQL-Instanz.
- IP_RANGE: Der IP-Adressbereich, auf den Sie den eingehenden Traffic beschränken möchten.
Ein Beispielbefehl zum Zulassen von eingehendem Traffic von allen IP-Adressen:
gcloud compute firewall-rules create ds-proxy1 \ --direction=INGRESS \ --priority=1000 \ --target-tags=ds-tcp-proxy \ --network=default \ --action=ALLOW \ --rules=tcp:5432
AlloyDB für Replikation konfigurieren
Aktivieren Sie die logische Decodierung für die primäre AlloyDB-Instanz. Legen Sie in Google Cloudden Wert für das
alloydb.logical_decoding
-Flag auf ON fest. Informationen zum Aktualisieren der Datenbank-Flags finden Sie unter Datenbank-Flags einer Instanz konfigurieren.Stellen Sie über die TCP-Proxy-IP-Adresse eine Verbindung zur AlloyDB-Instanz her, indem Sie den folgenden Befehl von einer beliebigen VM im selben VPC ausführen:
psql -h PROXY_IP \ -U DB_USER \ -d DB_NAME
Ersetzen Sie Folgendes:
- PROXY_IP: Die IP-Adresse des TCP-Proxys.
- DB_USER: Der Nutzername für die AlloyDB-Datenbank.
- DB_NAME: Der Name der AlloyDB-Datenbank.
Führen Sie den folgenden Befehl aus, um Ihrem Datenbanknutzer Replikationsberechtigungen zu gewähren:
ALTER USER DB_USER WITH REPLICATION;
Erstellen Sie eine Publikation. Wir empfehlen, eine Publikation nur für die Tabellen zu erstellen, die Sie replizieren möchten. So kann Datastream nur die relevanten Daten lesen und die Belastung der Datenbank und von Datastream wird verringert:
CREATE PUBLICATION PUBLICATION_NAME FOR TABLE SCHEMA1.TABLE1, SCHEMA2.TABLE2;
Ersetzen Sie Folgendes:
- PUBLICATION_NAME: Der Name Ihrer Publikation. Sie müssen diesen Namen angeben, wenn Sie einen Stream im Assistenten zum Erstellen von Datastream-Streams erstellen.
- SCHEMA: Der Name des Schemas, das die Tabelle enthält.
- TABLE: Der Name der Tabelle, die Sie replizieren möchten.
Sie können auch eine Publikation für alle Tabellen in Ihrer Datenbank erstellen. Beachten Sie, dass durch diesen Ansatz sowohl die Quelldatenbank als auch Datastream stärker belastet werden:
CREATE PUBLICATION PUBLICATION_NAME FOR ALL TABLES;
Erstellen Sie mit dem folgenden Befehl einen Replikationsslot.
SELECT PG_CREATE_LOGICAL_REPLICATION_SLOT('REPLICATION_SLOT_NAME', 'pgoutput');
Ersetzen Sie Folgendes:
- REPLICATION_SLOT_NAME: Der Name des Replikationsslots. Sie müssen diesen Namen angeben, wenn Sie einen Stream im Assistenten zum Erstellen von Datastream-Streams erstellen.
Datastream-Nutzer erstellen
Geben Sie den folgenden PostgreSQL-Befehl ein, um einen Datastream-Nutzer zu erstellen:
CREATE USER USER_NAME WITH REPLICATION LOGIN PASSWORD 'USER_PASSWORD';
Ersetzen Sie Folgendes:
- USER_NAME: Der Name des Datastream-Nutzers, den Sie erstellen möchten.
- USER_PASSWORD: Das Anmeldepasswort für den Datastream-Nutzer, den Sie erstellen möchten.
Gewähren Sie dem erstellten Nutzer die folgenden Berechtigungen:
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;
Ersetzen Sie Folgendes:
- SCHEMA_NAME: Der Name des Schemas, dem Sie die Berechtigungen gewähren möchten.
- USER_NAME: Der Nutzer, dem Sie die Berechtigungen gewähren möchten.