Este tópico descreve como usar a extensão pglogical do PostgreSQL para replicar os dados de uma instância do ApsaraDB RDS for PostgreSQL. Esta extensão utiliza o padrão publish/subscribe para implementar a replicação lógica em streaming.
Pré-requisitos
Sua instância RDS executa o PostgreSQL 10 ou superior.
-
Sua instância RDS executa a versão secundária do mecanismo 20230830 ou superior. Se a sua instância RDS executar o PostgreSQL 17, a versão secundária do mecanismo deverá ser 20241030 ou superior.
ImportanteO ApsaraDB RDS oferece suporte a esta extensão em versões secundárias do mecanismo anteriores a 20230830. No entanto, o ApsaraDB RDS planeja otimizar extensões vulneráveis nas atualizações de versões secundárias do mecanismo. O objetivo é padronizar o gerenciamento de extensões e aumentar a segurança. Portanto, não é possível criar esta extensão em instâncias RDS que executam uma versão secundária do mecanismo anterior a 20230830. Para mais informações, consulte Restrições na criação de extensões para RDS for PostgreSQL.
Se você já criou esta extensão para uma instância RDS que executa uma versão secundária do mecanismo anterior a 20230830, pode continuar usando a extensão.
Se estiver criando esta extensão pela primeira vez ou precisar recriá-la para sua instância RDS, atualize a versão secundária do mecanismo para a versão mais recente. Para mais informações, consulte Atualize a versão secundária do mecanismo.
-
O valor do parâmetro shared_preload_libraries da sua instância RDS inclui o pglogical.
Para mais informações sobre como adicionar pglogical ao valor do parâmetro shared_preload_libraries, consulte Defina os parâmetros da instância.
NotaPor favor, modifique e aplique o valor do parâmetro shared_preload_libraries. A sua instância RDS reinicia imediatamente. A reinicialização desconecta a sua aplicação da instância RDS. Prossiga com cautela. Antes de acionar a reinicialização, planeje suas operações e certifique-se de que a sua aplicação esteja configurada para se reconectar automaticamente ao banco de dados.
Informações de contexto
A extensão pglogical do PostgreSQL é um método altamente eficiente de replicação de dados e serve como alternativa à replicação física por meio do padrão publish/subscribe. Ela oferece uma velocidade de replicação maior que a do Slony, Bucardo e Londiste, além de suportar atualizações entre versões. Esta extensão é adequada para os seguintes cenários:
Atualização de versões principais do mecanismo
Replicação de todos os dados de um banco de dados na sua instância RDS
Replicação de tabelas, linhas e colunas específicas por meio de conjuntos de replicação
Agregação e mesclagem de dados de vários servidores upstream
Use a extensão
-
Inicialmente, ative a extensão pglogical.
CREATE EXTENSION pglogical; -
Desative a extensão pglogical.
DROP EXTENSION pglogical;
Configure a replicação lógica em streaming
-
Para começar, crie um nó publicador no publicador.
NotaPrimeiro, defina o parâmetro
hostcomo 127.0.0.1 para o nó publicador. Em seguida, execute a instruçãoSHOW PORT;para obter o valor do parâmetroportdo nó publicador.SELECT pglogical.create_node( node_name := 'provider', dsn := 'host=127.0.0.1 port=<Port number> dbname=test user=provider_user password=provider_pass' ); -
Configure um conjunto de replicação.
Para isso, selecione todas as tabelas no schema public e adicione-as ao conjunto de replicação padrão.
SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);NotaO conjunto de replicação replica somente as tabelas especificadas e as alterações definidas nessas tabelas do publicador para o assinante.
O conjunto de replicação padrão replica todas as tabelas e as respectivas alterações do publicador para o assinante. Para mais informações, consulte a documentação do pglogical.
-
Agora, crie um nó assinante no assinante.
NotaPrimeiro, defina o parâmetro
hostcomo 127.0.0.1 para o nó assinante. Em seguida, execute a instruçãoSHOW PORT;para obter o valor do parâmetroportdo nó assinante.SELECT pglogical.create_node( node_name := 'subscriber', dsn := 'host=127.0.0.1 port=<Port number> dbname=test user=subscriber_user password=subscriber_pass' ); -
Por fim, crie uma assinatura no assinante.
NotaPor favor, defina o parâmetro
hostcom o endpoint interno do publicador, comopgm-****.pg.rds.aliyuncs.com. Por favor, defina o parâmetroportcom o número da porta interna do publicador.Para isso, visualize o endpoint interno e o número da porta interna de uma instância RDS no console do ApsaraDB RDS. Para mais informações, consulte Visualize e altere os endpoints e números de porta de uma instância ApsaraDB RDS for PostgreSQL.
SELECT pglogical.create_subscription( subscription_name := 'subscription', provider_dsn := 'host=<Internal endpoint of the provider> port=<Internal port number of the provider> dbname=test user=provider_user password=provider_pass' );Após a criação da assinatura, os processos de sincronização e replicação iniciam em segundo plano.
Referências
Para mais informações, consulte a documentação do pglogical.