Configure réplicas externas

Esta página descreve como configurar uma instância do Cloud SQL que replica para uma réplica externa ao Cloud SQL através da extensão pglogical com o logical decoding.

Para mais informações sobre a replicação, consulte o artigo Acerca da replicação no Cloud SQL.

Configure a configuração da réplica externa

Antes de começar

Antes de iniciar esta tarefa, tem de ter uma instância do Cloud SQL e uma instância externa do PostgreSQL que cumpra os requisitos para réplicas externas.

Requisitos da instância de origem

A instância de origem de uma réplica de leitura externa tem de ser uma instância principal ou autónoma. Não pode usar uma réplica de leitura do Cloud SQL como a instância de origem para uma réplica de leitura externa. Por vezes, as réplicas de leitura são recriadas a partir do clone do disco da respetiva instância principal, e o respetivo estado de replicação para uma réplica de leitura externa não pode ser mantido pela réplica de leitura.

Configure a instância principal

  1. Aceda à página Instâncias do Cloud SQL na Google Cloud consola.
  2. Ative o acesso na instância principal para o endereço IP da réplica externa.

    Para obter informações sobre como ativar o acesso por IP, consulte o artigo Configurar o acesso para ligações IP.

  3. Registe o endereço IP público e o endereço IP público de saída da instância principal para utilização posterior. Pode encontrar estes valores na página Vista geral da instância.
  4. Clique no ícone do Cloud Shell no canto superior direito.
  5. Na linha de comandos do Cloud Shell, use o cliente PostgreSQL incorporado para se ligar à sua instância principal:
       
    gcloud sql connect PRIMARY_INSTANCE_NAME \
    --user=postgres
       
       
  6. Introduza a sua palavra-passe de raiz. Em seguida, deve ver o comando postgres.
  7. Crie um utilizador 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 seguintes flags:

    • cloudsql.enable_pglogical
    • cloudsql.logical_decoding
    • max_replication_slots
    • max_worker_processes
    • max_wal_senders
    • Para mais informações acerca destas flags, consulte a página Recursos do PostgreSQL.

    Reinicie a base de dados e, em seguida, inicie sessão, mude para o replication_user e crie a extensão pglogical:

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

    Um _node_ pglogical representa uma instância física do PostgreSQL e armazena detalhes de ligação para essa instância.

    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 estiver a começar com uma nova base de dados, crie a mesma base de dados e tabelas nas instâncias principal e de réplica. Por 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 já tiver uma base de dados na instância principal, tem de criar a mesma na réplica. Para o fazer, exporte a base de dados da instância principal para um contentor do Cloud Storage e importe-a para a réplica. Saiba mais sobre como exportar dados do Cloud SQL para um ficheiro de captura SQL no Cloud Storage.
  12. Para suportar a replicação de diferentes conjuntos de dados para diferentes destinos, o pglogical tem o conceito de um conjunto de replicação. Por exemplo, para adicionar uma tabela ao conjunto de replicação predefinido:
    SELECT pglogical.replication_set_add_table('default', 'replica_test', true);
       

Configure a réplica externa

  1. Crie um utilizador especial para a replicação e conceda privilégios de replicação:
    CREATE USER REPLICATION_USER WITH REPLICATION SUPERUSER LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  2. Se estiver a começar com uma nova base de dados, use o comando REPLICATION_USER para criar a mesma base de dados e tabelas nas instâncias principal e de réplica. Por 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 estiver a inicializar a instância de réplica externa com um ficheiro que exportou da instância principal, transfira o ficheiro exportado do Cloud Storage. Se a réplica externa estiver numa instância do Compute Engine, pode transferir o ficheiro através do comando gcloud storage:
    gcloud storage cp gs://BUCKET_NAME/DUMP_FILE_NAME .
        
  4. Importe o ficheiro para a sua base de dados.
    psql --user=postgres --password < DUMP_FILE_NAME.
    
  5. Instale a app pglogical de acordo com o seu SO. Por exemplo, em sistemas Debian com a versão 13 do PostgreSQL, sudo apt-get install postgresql-13-pglogical.
  6. Inicie sessão na base de dados como replication_user e defina os seguintes 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 subscrição 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 estado da subscrição:
    SELECT * FROM pglogical.show_subscription_status('SUBSCRIPTION_NAME');
       
  10. Se o estado for apresentado como replicating, a configuração foi bem-sucedida.
  11. Insira alguns dados no principal e verifique a réplica para se certificar de que os dados também aparecem aí.

Resolver problemas

Consulte o artigo Resolução de problemas do pglogical

O que se segue?