Configurar réplicas externas,Configurar réplicas externas,Configurar réplicas externas,Configurar 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 usando a extensão pglogical com logical decoding .

Para obter mais informações sobre replicação, consulte Sobre replicação no Cloud SQL .

Configurar a configuração da réplica externa

Antes de começar

Antes de iniciar esta tarefa, você deve ter uma instância do Cloud SQL e uma instância externa do PostgreSQL que atenda aos requisitos para réplicas externas .

Configurar a instância primária

  1. Acesse a página Instâncias do Cloud SQL no Google Cloud console.
  2. Habilite o acesso na instância primária para o endereço IP da réplica externa.

    Para obter informações sobre como habilitar o acesso IP, consulte Configurando o acesso para conexões IP .

  3. Registre o endereço IP público e o endereço IP público de saída da instância primária para uso posterior. Você pode encontrar esses valores na página 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 à sua instância primária:
       
    gcloud sql connect PRIMARY_INSTANCE_NAME \
    --user=postgres
       
       
  6. Digite sua senha de root. Você deverá ver o prompt do postgres.
  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 os seguintes sinalizadores:

    • cloudsql.enable_pglogical
    • cloudsql.logical_decoding
    • max_replication_slots
    • max_worker_processes
    • max_wal_senders
    • Para obter mais informações sobre esses sinalizadores, 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ó pglógico:

    Um _nó_ pglogical representa uma instância física do PostgreSQL e armazena detalhes de conexã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 você estiver começando com um novo banco de dados, crie o mesmo banco de dados e tabelas nas instâncias primária 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 você já tiver um banco de dados na instância primária, precisará criá-lo na réplica. Para isso, exporte o banco de dados da instância primária 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 de despejo SQL no Cloud Storage .
  12. Para oferecer suporte à replicação de diferentes conjuntos de dados para diferentes destinos, o pglogical utiliza o conceito de 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 REPLICATION_USER para criar o mesmo banco de dados e tabelas nas instâncias primária 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 você estiver propagando a instância da réplica externa com um arquivo exportado da instância primária, baixe o arquivo exportado do Cloud Storage. Se a sua réplica externa estiver em uma instância do Compute Engine, você pode baixar o arquivo usando o comando gcloud storage :
    gcloud storage cp gs://BUCKET_NAME/DUMP_FILE_NAME .
        
  4. Importe o arquivo para seu banco de dados.
    psql --user=postgres --password < DUMP_FILE_NAME.
    
  5. Instale pglogical de acordo com o seu sistema operacional. Por exemplo, em sistemas Debian executando o PostgreSQL versão 13, sudo apt-get install postgresql-13-pglogical .
  6. Efetue login no banco 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ó pglógico:
    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 no primário e verifique a réplica para garantir que os dados também apareçam lá.

Solução de problemas

Veja Solução de problemas pglogical

O que vem a seguir