Configura un database AlloyDB per PostgreSQL

Le sezioni seguenti illustrano come configurare un database AlloyDB per PostgreSQL.

Configura la connettività tra Datastream e AlloyDB

Per abilitare Datastream in modo che si connetta all'istanza AlloyDB, devi configurare un proxy TCP nel progetto consumer. L'immagine proxy TCP è disponibile pubblicamente per tutti i clienti.

  1. Avvia il container proxy:

    1. Attiva Cloud Shell nel progetto consumer.
    2. Esegui lo script seguente per creare il proxy TCP e disabilitare il networking del bridge per evitare problemi di connettività:
    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'
    

    Sostituisci quanto segue:

    • REGION_ID: la regione in cui vuoi creare il proxy TCP.
    • VM_NAME: il nome della macchina virtuale.
    • ALLOYDB_IP: l'indirizzo IP dell'istanza AlloyDB per PostgreSQL.
    • ALLOYDB_PORT: il numero di porta dell'istanza AlloyDB per PostgreSQL.
    • SOURCE_AND_DEST_VPC: la rete VPC a cui sono connesse l'origine e la destinazione.
    • VM_TIER: il tipo di macchina virtuale.

    Un comando di esempio con parametri aggiornati:

    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. Esegui lo script per stampare l'indirizzo IP del proxy TCP con gli input seguenti:

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

    Sostituisci quanto segue:

    • VM_NAME: il nome della macchina virtuale.
    • REGION_ID: la regione in cui hai creato il proxy TCP.
  3. (Facoltativo) Crea una regola del firewall per limitare il traffico in entrata verso il proxy TCP:

    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
    

    Sostituisci quanto segue:

    • FIREWALL_RULE_NAME: il nome della regola firewall.
    • SOURCE_VPC: la rete VPC a cui è connessa l'origine.
    • ALLOYDB_PORT: il numero di porta dell'istanza AlloyDB per PostgreSQL.
    • IP_RANGE: l'intervallo di indirizzi IP verso cui vuoi limitare il traffico in entrata.

    Un comando di esempio per consentire il traffico in entrata da tutti gli indirizzi IP:

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

Configura AlloyDB per la replica

  1. Abilita la decodifica logica per l'istanza principale AlloyDB. In Google Cloud, imposta il valore del flag alloydb.logical_decoding su ON. Per informazioni sull'aggiornamento dei flag di database, consulta Configurare i flag di database di un'istanza.

  2. Connettiti all'istanza AlloyDB utilizzando l'indirizzo IP del proxy TCP eseguendo questo comando da qualsiasi VM sullo stesso VPC:

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

    Sostituisci quanto segue:

    • PROXY_IP: l'indirizzo IP del proxy TCP.
    • DB_USER: il nome utente del database AlloyDB.
    • DB_NAME: il nome del database AlloyDB.
  3. Esegui questo comando per concedere i privilegi di replica all'utente del tuo database:

    ALTER USER DB_USER WITH REPLICATION;
    
  4. Creare una pubblicazione. Ti consigliamo di creare una pubblicazione solo per le tabelle che vuoi replicare. In questo modo Datastream può leggere i dati pertinenti e ridurre il carico sul database e su Datastream:

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

    Sostituisci quanto segue:

    • PUBLICATION_NAME: il nome della tua pubblicazione. Dovrai fornire questo nome quando crei un flusso nella procedura guidata di creazione dei flussi di Datastream.
    • SCHEMA: il nome dello schema che contiene la tabella.
    • TABLE: il nome della tabella da replicare.

    Puoi creare una pubblicazione per tutte le tabelle di uno schema. Questo approccio consente di replicare le modifiche per le tabelle nell'elenco di schemi specificato, incluse le tabelle che creerai in futuro:

    CREATE PUBLICATION PUBLICATION_NAME
    FOR TABLES IN SCHEMA1, SCHEMA2;

    Puoi anche creare una pubblicazione per tutte le tabelle nel tuo database. Tieni presente che questo approccio aumenta il carico sia sul database di origine che su Datastream:

    CREATE PUBLICATION PUBLICATION_NAME FOR ALL TABLES;
    
  5. Crea uno slot di replica eseguendo il comando seguente.

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

    Sostituisci quanto segue:

    • REPLICATION_SLOT_NAME: il nome dello slot di replica. Dovrai fornire questo nome quando crei un flusso nella procedura guidata di creazione dei flussi Datastream.

Crea un utente Datastream

  1. Per creare un utente Datastream, inserisci il comando PostgreSQL seguente:

    CREATE USER USER_NAME WITH REPLICATION LOGIN PASSWORD 'USER_PASSWORD';
    

    Sostituisci quanto segue:

    • USER_NAME: il nome dell'utente Datastream che vuoi creare.
    • USER_PASSWORD: la password di accesso per l'utente Datastream che vuoi creare.
  2. Concedi i privilegi seguenti all'utente che hai creato:

    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;
    

    Sostituisci quanto segue:

    • SCHEMA_NAME: il nome dello schema al quale vuoi concedere i privilegi.
    • USER_NAME: l'utente a cui vuoi concedere i privilegi.