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 Skript aus, um den TCP-Proxy zu erstellen und die Brücke zu deaktivieren Netzwerk, 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, für das die Quelle und das Ziel verwendet werden. miteinander 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 ist 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 Ihrer 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 Cloud den Wert für das Flag
alloydb.logical_decoding
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 dem Datenbanknutzer Replikationsberechtigungen zu erteilen:
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 eine Publikation für alle Tabellen in einem Schema erstellen. Mit diesem Ansatz können Sie Replizieren Sie Änderungen für Tabellen in der angegebenen Liste von Schemas, einschließlich Tabellen erstellen, die Sie zukünftig erstellen:
CREATE PUBLICATION PUBLICATION_NAME FOR TABLES IN SCHEMA1, SCHEMA2;
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: Anmeldepasswort für den Datastream-Nutzer die 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.