Configurar um banco de dados do AlloyDB para PostgreSQL

As seções a seguir abordam como configurar um banco de dados do AlloyDB para PostgreSQL.

Configure a conectividade entre o Datastream e o AlloyDB

Para permitir que o Datastream se conecte à instância do AlloyDB, é preciso configurar um proxy TCP no projeto do consumidor. A imagem do proxy TCP é disponibilizada publicamente para todos os clientes.

  1. Iniciar o contêiner de proxy:

    1. Ative o Cloud Shell no projeto do consumidor.
    2. Execute o script a seguir para criar o proxy TCP e desativar a rede de ponte para evitar problemas de conectividade:
    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:

    • REGION_ID: a região em que você quer criar o proxy TCP.
    • VM_NAME: o nome da máquina virtual.
    • ALLOYDB_IP: o endereço IP da instância do AlloyDB para PostgreSQL.
    • ALLOYDB_PORT: o número da porta da instância do AlloyDB para PostgreSQL.
    • SOURCE_AND_DEST_VPC: a rede VPC a que a origem e o destino estão conectados.
    • VM_TIER: o tipo de máquina virtual.

    Um comando de exemplo 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'
    
  2. 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:

    • VM_NAME: o nome da máquina virtual.
    • REGION_ID: a região em que você criou o proxy TCP.
  3. (Opcional) Crie uma regra de firewall para limitar o tráfego de entrada no 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:

    • FIREWALL_RULE_NAME: o nome da regra de firewall.
    • SOURCE_VPC: a rede VPC a que a origem está conectada.
    • ALLOYDB_PORT: o número da porta da instância do AlloyDB para PostgreSQL.
    • IP_RANGE: o intervalo de endereços IP ao qual você quer limitar o tráfego de entrada.

    Um exemplo de comando para permitir o tráfego de entrada vindo 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
    

Configurar o AlloyDB para replicação

  1. Ativa a decodificação lógica para a instância primária do AlloyDB. No Google Cloud, defina o valor da sinalização alloydb.logical_decoding como ON. Para informações sobre como atualizar as flags do banco de dados, consulte Configurar as flags do banco de dados de uma instância.

  2. Conecte-se à instância do AlloyDB usando o endereço IP do proxy TCP executando o seguinte comando em qualquer VM na mesma VPC:

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

    Substitua:

    • PROXY_IP: o endereço IP do proxy TCP.
    • DB_USER: o nome de usuário do banco de dados do AlloyDB.
    • DB_NAME: o nome do banco de dados do AlloyDB.
  3. Execute o seguinte comando para conceder privilégios de replicação ao usuário do banco de dados:

    ALTER USER DB_USER WITH REPLICATION;
    
  4. Crie uma publicação. Recomendamos que você crie uma publicação somente para as tabelas que quer replicar. Isso permite que o Datastream leia somente os dados relevantes e reduz a carga no banco de dados e no Datastream:

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

    Substitua:

    • PUBLICATION_NAME: o nome da sua publicação. Você vai precisar fornecer esse nome ao criar um fluxo no assistente de criação de fluxo do Datastream.
    • SCHEMA: o nome do esquema que contém a tabela.
    • TABLE: o nome da tabela que você quer replicar.

    É possível criar uma publicação para todas as tabelas em um esquema. Essa abordagem permite replicar alterações para tabelas na lista especificada de esquemas, incluindo tabelas que você criar no futuro:

    CREATE PUBLICATION PUBLICATION_NAME
    FOR TABLES IN SCHEMA1, SCHEMA2;

    Também é possível criar uma publicação para todas as tabelas do seu banco de dados. Observe que essa abordagem aumenta a carga no banco de dados de origem e no Datastream:

    CREATE PUBLICATION PUBLICATION_NAME FOR ALL TABLES;
    
  5. Execute o comando a seguir para criar um slot de replicação.

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

    Substitua:

    • REPLICATION_SLOT_NAME: o nome do slot de replicação. Você vai precisar fornecer esse nome ao criar um stream no assistente de criação de streams do Datastream.

Criar um usuário do Datastream

  1. Para criar um usuário do Datastream, digite o seguinte comando do PostgreSQL:

    CREATE USER USER_NAME WITH REPLICATION LOGIN PASSWORD 'USER_PASSWORD';
    

    Substitua:

    • USER_NAME: o nome do usuário do Datastream que você quer criar.
    • USER_PASSWORD: a senha de login do usuário do Datastream que você quer criar.
  2. Conceda os seguintes privilégios ao usuário que você 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:

    • SCHEMA_NAME: o nome do esquema ao qual você quer conceder privilégios.
    • USER_NAME: o usuário a quem você quer conceder privilégios.