Configurar réplicas externas

Nesta página, descrevemos como configurar uma instância do Cloud SQL que é replicada para uma réplica externa ao Cloud SQL usando a extensão pglogical com logical decoding.

Para mais informações sobre a configuração da réplica externa, acesse Sobre a replicação a partir de um servidor externo.

Definir a configuração da réplica externa

Antes de começar

Antes de iniciar essa tarefa, você precisa ter uma instância do Cloud SQL e uma instância externa do PostgreSQL que atendam aos requisitos de réplicas externas.

Configurar a instância principal

  1. Acesse a página "Instâncias" do Cloud SQL no Console do Google Cloud.
  2. Ative o acesso na instância principal do endereço IP da réplica externa.

    Para informações sobre como ativar o acesso ao IP, consulte Como configurar o acesso para conexões IP.

  3. Registre o endereço IP público e o endereço IP de saída público da instância principal para usar posteriormente. Encontre esses valores na página de Visão geral da instância.
  4. Clique no ícone do Cloud Shell () no canto superior direito.
  5. No prompt do Cloud Shell, use o cliente PostgreSQL integrado para se conectar à instância principal:
    gcloud sql connect PRIMARY_INSTANCE_NAME \
    --user=postgres
    
       
  6. Insira a senha raiz. O prompt do postgres será exibido.
  7. Crie um usuário do PostgreSQL com o atributo REPLICATION.
    CREATE USER REPLICATION_USER WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  8. Instale e configure a extensão pglogical:

    Edite a instância do Cloud SQL para adicionar e definir as sinalizações a seguir:

    • cloudsql.enable_pglogical
    • cloudsql.logical_decoding
    • max_replication_slots
    • max_worker_processes
    • max_wal_senders
    • Para mais informações sobre essas sinalizações, consulte a página de recursos do PostgreSQL.

    Reinicie o banco de dados, faça login, mude para replication_user e crie a extensão pglogical:

    CREATE EXTENSION pglogical;
       
  9. Crie um nó pglogical:

    Um nó pglogical representa uma instância física do PostgreSQL e armazena detalhes de conexão dela.

    SELECT pglogical.create_node(
      node_name := 'provider',
      dsn := 'host=PRIMARY_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
       );
       
  10. Se você estiver começando com um novo banco de dados, crie o mesmo banco de dados e as mesmas tabelas nas instâncias principal e de réplica. Exemplo:
    CREATE DATABASE test;
    
    \connect test;
    
    CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
    INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
    
    CREATE EXTENSION pglogical;
  11. Se você já tiver um banco de dados na instância principal, precisará criar o mesmo na réplica. Para fazer isso, exporte o banco de dados da instância principal para um bucket do Cloud Storage e importe-o para a réplica. Saiba mais sobre como exportar dados do Cloud SQL para um arquivo dump SQL no Cloud Storage.
  12. Para aceitar a replicação de diferentes conjuntos de dados para destinos diferentes, a pglogical tem o conceito de um conjunto de replicação. Por exemplo, para adicionar uma tabela ao conjunto de replicação padrão:
    SELECT pglogical.replication_set_add_table('default', 'replica_test', true);
       

Configurar a réplica externa

  1. Crie um usuário especial para replicação e conceda privilégios de replicação:
    CREATE USER REPLICATION_USER WITH REPLICATION SUPERUSER LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  2. Se você estiver começando com um novo banco de dados, use o REPLICATION_USER para criar o mesmo banco de dados e tabelas nas instâncias principal e de réplica. Exemplo:
    CREATE DATABASE test;
    \connect test;
    CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
    INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
      
  3. Se você estiver propagando a instância da réplica externa com um arquivo exportado da instância principal, faça o download do arquivo exportado pelo Cloud Storage. Se a réplica externa estiver em uma instância do Compute Engine, faça o download do arquivo usando o comando gsutil:
    gsutil cp gs://BUCKET_NAME/DUMP_FILE_NAME .
        
  4. Importe o arquivo para o banco de dados.
    psql --user=postgres --password < DUMP_FILE_NAME.
    
  5. Instale pglogical de acordo com o SO. Por exemplo, em sistemas Debian que executam a versão 13 do PostgreSQL, sudo apt-get install postgresql-13-pglogical.
  6. Faça login no banco de dados como o replication_user e defina os estes parâmetros:
    ALTER SYSTEM SET shared_preload_libraries = 'pglogical';
    ALTER SYSTEM SET max_replication_slots = #; (where # is the same as you set on the primary).
    ALTER SYSTEM SET max_worker_processes = #; (where # is the same as you set on the primary).
    # Logout of the database and restart it. For example,
    # sudo /etc/init.d/postgresql restart
    # Log back in the database as the replication_user.
    # Since the pglogical extension is created local to each database, you need to
    # execute CREATE EXTENSION pglogical in each database you create, so if you
    # haven't already done that:
    CREATE EXTENSION pglogical;
       

    For more information about these flags, see the PostgreSQL resources page.

  7. Crie um nó pglogical:
    SELECT pglogical.create_node(
      node_name := 'subscriber',
      dsn := 'host=REPLICA_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
      );
      
  8. Crie uma assinatura pglogical:
    SELECT pglogical.create_subscription(
        subscription_name := 'SUBSCRIPTION_NAME',
        provider_dsn := 'host=PRIMARY_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
    );
      
  9. Verifique o status da assinatura:
    SELECT * FROM pglogical.show_subscription_status('SUBSCRIPTION_NAME');
       
  10. Se o status aparecer como replicating, a configuração foi bem-sucedida.
  11. Insira alguns dados na principal e verifique a réplica para garantir que eles também sejam exibidos.

Resolver problemas

Consulte Solução de problemas pglogical

A seguir