Esta página descreve como configurar a captura de dados de alterações (CDC) para transmitir dados de uma base de dados do AlloyDB for PostgreSQL para um destino suportado, como o BigQuery ou o Cloud Storage.
Configure a conetividade entre o Datastream e o AlloyDB
Para permitir que o Datastream se ligue à instância do AlloyDB, tem de configurar um proxy TCP no projeto do consumidor. A imagem do proxy TCP está disponível publicamente para todos os clientes.
Inicie o contentor de proxy:
- Ative o Cloud Shell no projeto do consumidor.
- Execute o seguinte script para criar o proxy TCP e desativar a rede de ponte para evitar problemas de conetividade:
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'
Substitua o seguinte:
- REGION_ID: a região na qual quer criar o proxy TCP.
- VM_NAME: o nome da máquina virtual.
- ALLOYDB_IP: o endereço IP da instância do AlloyDB for PostgreSQL.
- ALLOYDB_PORT: o número da porta da instância do AlloyDB for PostgreSQL.
- SOURCE_AND_DEST_VPC: a rede VPC à qual a origem e o destino estão ligados.
- VM_TIER: o tipo da sua máquina virtual.
Um exemplo de comando com parâmetros atualizados:
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'
Execute o script para imprimir o endereço IP do proxy TCP com as seguintes entradas:
gcloud compute instances describe VM_NAME \ --format="yaml(networkInterfaces[].networkIP)" \ --zone=REGION_ID
Substitua o seguinte:
- VM_NAME: o nome da sua máquina virtual.
- REGION_ID: a região na qual criou o proxy TCP.
(Opcional) Crie uma regra de firewall para limitar o tráfego de entrada ao 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
Substitua o seguinte:
- FIREWALL_RULE_NAME: O nome da regra de firewall.
- SOURCE_VPC: a rede VPC à qual a sua origem está ligada.
- ALLOYDB_PORT: o número da porta da instância do AlloyDB for PostgreSQL.
- IP_RANGE: o intervalo de endereços IP ao qual quer limitar o tráfego de entrada.
Um exemplo de comando para permitir o tráfego de entrada de todos os endereços IP:
gcloud compute firewall-rules create ds-proxy1 \ --direction=INGRESS \ --priority=1000 \ --target-tags=ds-tcp-proxy \ --network=default \ --action=ALLOW \ --rules=tcp:5432
Configure o AlloyDB para replicação
Ative a descodificação lógica para a instância principal do AlloyDB. Em Google Cloud, defina o valor do sinalizador
alloydb.logical_decoding
como ATIVADO. Para obter informações sobre como atualizar as flags da base de dados, consulte o artigo Configure as flags da base de dados de uma instância.Ligue-se à instância do AlloyDB através do endereço IP do proxy TCP executando o seguinte comando a partir de qualquer VM na mesma VPC:
psql -h PROXY_IP \ -U DB_USER \ -d DB_NAME
Substitua o seguinte:
- PROXY_IP: O endereço IP do proxy TCP.
- DB_USER: o nome de utilizador da base de dados do AlloyDB.
- DB_NAME: o nome da base de dados do AlloyDB.
Execute o seguinte comando para conceder privilégios de replicação ao utilizador da base de dados:
ALTER USER DB_USER WITH REPLICATION;
Crie uma publicação. Recomendamos que crie uma publicação apenas para as tabelas que quer replicar. Isto permite que o Datastream leia apenas os dados relevantes e reduz a carga na base de dados e no Datastream:
CREATE PUBLICATION PUBLICATION_NAME FOR TABLE SCHEMA1.TABLE1, SCHEMA2.TABLE2;
Substitua o seguinte:
- PUBLICATION_NAME: o nome da sua publicação. Tem de indicar este nome quando criar uma stream no assistente de criação de streams de streams de dados.
- SCHEMA: o nome do esquema que contém a tabela.
- TABLE: o nome da tabela que quer replicar.
Também pode criar uma publicação para todas as tabelas na sua base de dados. Tenha em atenção que esta abordagem aumenta a carga na base de dados de origem e no Datastream:
CREATE PUBLICATION PUBLICATION_NAME FOR ALL TABLES;
Crie um espaço de replicação executando o seguinte comando.
SELECT PG_CREATE_LOGICAL_REPLICATION_SLOT('REPLICATION_SLOT_NAME', 'pgoutput');
Substitua o seguinte:
- REPLICATION_SLOT_NAME: o nome da sua ranhura de replicação. Tem de indicar este nome quando criar uma stream no assistente de criação de streams de streams de dados.
Crie um utilizador da stream de dados
Para criar um utilizador do Datastream, introduza o seguinte comando do PostgreSQL:
CREATE USER USER_NAME WITH REPLICATION LOGIN PASSWORD 'USER_PASSWORD';
Substitua o seguinte:
- USER_NAME: o nome do utilizador do fluxo de dados que quer criar.
- USER_PASSWORD: a palavra-passe de início de sessão do utilizador do fluxo de dados que quer criar.
Conceda os seguintes privilégios ao utilizador que criou:
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;
Substitua o seguinte:
- SCHEMA_NAME: o nome do esquema ao qual quer conceder os privilégios.
- USER_NAME: o utilizador ao qual quer conceder os privilégios.
O que se segue?
- Saiba mais sobre como o Datastream funciona com origens PostgreSQL.