Configurar a replicação lógica do PostgreSQL com clusters de banco de dados multi-AZ para o Amazon RDS - Amazon Relational Database Service

Configurar a replicação lógica do PostgreSQL com clusters de banco de dados multi-AZ para o Amazon RDS

Ao usar a replicação lógica do PostgreSQL com seu cluster de banco de dados multi-AZ, você pode replicar e sincronizar tabelas individuais em vez de toda a instância do banco de dados. A replicação lógica usa um modelo de publicação e de assinatura para replicar as alterações de uma fonte para um ou mais destinatários. Ela funciona usando registros de alterações do log de gravação antecipada (WAL) do PostgreSQL. Para ter mais informações, consulte Executar replicação lógica para o Amazon RDS para PostgreSQL.

Quando você cria um slot de replicação lógica na instância de banco de dados do gravador de um cluster de banco de dados multi-AZ, o slot é copiado de forma assíncrona para cada instância de banco de dados do leitor no cluster. Os slots nas instâncias de banco de dados do leitor são continuamente sincronizados com os da instância de banco de dados do gravador.

A replicação lógica é compatível com clusters de banco de dados multi-AZ que executam o RDS para PostgreSQL versão 14.8-R2 ou posterior e versão 15.3-R2 ou posterior.

nota

Além do atributo nativo de replicação lógica do PostgreSQL, os clusters de banco de dados multi-AZ que executam o RDS para PostgreSQL também são compatíveis com a extensão pglogical.

Para obter mais informações sobre a replicação lógica do PostgreSQL, consulte Logical replication na documentação do PostgreSQL.

Pré-requisitos

Para configurar a replicação lógica do PostgreSQL para clusters de banco de dados multi-AZ, você deve cumprir os pré-requisitos a seguir.

Configurar a replicação lógica

Para configurar a replicação lógica para um cluster de banco de dados multi-AZ, habilite parâmetros específicos dentro do grupo de parâmetros do cluster de banco de dados associado, depois crie slots de replicação lógica.

nota

A partir da versão 16 do PostgreSQL, é possível usar as instâncias de banco de dados de leitor do cluster de banco de dados multi-AZ para replicação lógica.

Como configurar a replicação lógica para um cluster de banco de dados multi-AZ do RDS para PostgreSQL
  1. Abra o grupo de parâmetros de cluster de banco de dados personalizado associado ao seu cluster de banco de dados multi-AZ do RDS para PostgreSQL.

  2. No campo de pesquisa Parâmetros, encontre o parâmetro estático rds.logical_replication e defina seu valor como 1. Essa alteração de parâmetro pode aumentar a geração de WAL, portanto habilite-o somente quando for usar slots lógicos.

  3. Como parte dessa alteração, configure os seguintes parâmetros do cluster de banco de dados.

    • max_wal_senders

    • max_replication_slots

    • max_connections

    Dependendo do uso esperado, talvez você também precise alterar os valores dos parâmetros a seguir. No entanto, em muitos casos, os valores padrão são suficientes.

    • max_logical_replication_workers

    • max_sync_workers_per_subscription

  4. Reinicialize o cluster de banco de dados multi-AZ para que os valores dos parâmetros entrem em vigor. Para obter instruções, consulte Reinicializar um cluster de banco de dados multi-AZ e instâncias de banco de dados de leitor do Amazon RDS.

  5. Crie um slot de replicação lógica na instância de banco de dados do gravador do cluster de banco de dados multi-AZ, conforme explicado em Como trabalhar com slots de replicação lógica. Esse processo requer que você especifique um plug-in de decodificação. No momento, o RDS para PostgreSQL é compatível com os plug-ins test_decodingwal2json e pgoutput que acompanham o PostgreSQL.

    O slot é copiado de forma assíncrona para cada instância de banco de dados do leitor no cluster.

  6. Verifique o estado do slot em todas as instâncias de banco de dados do leitor do cluster de banco de dados multi-AZ. Para fazer isso, inspecione a exibição de pg_replication_slots em todas as instâncias de banco de dados do leitor e verifique se o estado de confirmed_flush_lsn está progredindo enquanto a aplicação está consumindo ativamente as alterações lógicas.

    Os comandos a seguir demonstram como inspecionar o estado da replicação nas instâncias de banco de dados do leitor.

    % psql -h test-postgres-instance-2.abcdefabcdef.us-west-2.rds.amazonaws.com postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots; slot_name | slot_type | confirmed_flush_lsn --------------+-----------+--------------------- logical_slot | logical | 32/D0001700 (1 row) postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots; slot_name | slot_type | confirmed_flush_lsn --------------+-----------+--------------------- logical_slot | logical | 32/D8003628 (1 row) % psql -h test-postgres-instance-3.abcdefabcdef.us-west-2.rds.amazonaws.com postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots; slot_name | slot_type | confirmed_flush_lsn --------------+-----------+--------------------- logical_slot | logical | 32/D0001700 (1 row) postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots; slot_name | slot_type | confirmed_flush_lsn --------------+-----------+--------------------- logical_slot | logical | 32/D8003628 (1 row)

Depois de concluir as tarefas de replicação, interrompa o processo de replicação, elimine os slots de replicação e desative a replicação lógica. Para desativar a replicação lógica, modifique o grupo de parâmetros do cluster de banco de dados e defina o valor de rds.logical_replication de volta para 0. Reinicialize o cluster para que a alteração do parâmetro entre em vigor.

Limitações e recomendações

As seguintes limitações e recomendações se aplicam ao uso da replicação lógica com clusters de banco de dados multi-AZ que executam o PostgreSQL versão 16:

  • É possível usar somente instâncias de banco de dados de gravador para criar ou descartar slots de replicação lógica. Por exemplo, o comando CREATE SUBSCRIPTION deve usar o endpoint de gravador de cluster na string de conexão do host.

  • É necessário usar o endpoint de gravador de cluster durante qualquer sincronização ou nova sincronização de tabelas. Por exemplo, é possível usar os seguintes comandos para sincronizar novamente uma tabela recém-adicionada:

    Postgres=>ALTER SUBSCRIPTION subscription-name CONNECTION host=writer-endpoint Postgres=>ALTER SUBSCRIPTION subscription-name REFRESH PUBLICATION
  • É necessário aguardar a conclusão da sincronização da tabela antes de usar as instâncias de banco de dados de leitor para replicação lógica. É possível usar a tabela de catálogos do pg_subscription_rel para monitorar a sincronização das tabelas. A sincronização da tabela será concluída quando a coluna srsubstate for definida como pronta (r).

  • Recomendamos usar endpoints de instância para conexão de replicação lógica quando a sincronização inicial da tabela for concluída. O comando a seguir reduz a carga na instância de banco de dados de gravador ao transferir a replicação para uma das instâncias de banco de dados de leitor:

    Postgres=>ALTER SUBSCRITPION subscription-name CONNECTION host=reader-instance-endpoint

    Não é possível usar o mesmo slot em mais de uma instância de banco de dados ao mesmo tempo. Quando duas ou mais aplicações estão replicando alterações lógicas de instâncias de banco de dados diferentes no cluster, algumas alterações podem ser perdidas devido a um failover do cluster ou um problema de rede. Nessas situações, é possível usar endpoints de instância para replicação lógica na string de conexão do host. A outra aplicação usando a mesma configuração mostrará a seguinte mensagem de erro:

    replication slot slot_name is already active for PID x providing immediate feedback.
  • Ao usar a extensão pglogical, você só pode usar o endpoint do gravador de cluster. A extensão tem limitações conhecidas que podem criar slots de replicação lógica não utilizados durante a sincronização da tabela. Os slots de replicação obsoletos reservam arquivos de log de gravação antecipada (WAL) e podem causar problemas de espaço em disco.