Transporte bancos de dados PostgreSQL entre duas instâncias de banco de dados Amazon RDS usando pg_transport - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Transporte bancos de dados PostgreSQL entre duas instâncias de banco de dados Amazon RDS usando pg_transport

Criado por Raunak Rishabh (AWS) e Jitender Kumar (AWS)

Ambiente: PoC ou piloto

Origem: bancos de dados: relacionais

Destino: Amazon RDS para PostgreSQL

Tipo R: realocar

Workload: código aberto

Tecnologias: migração; bancos de dados

Serviços da AWS: Amazon RDS

Resumo

Esse padrão descreve as etapas para migrar bancos de dados extremamente grandes entre duas instâncias de banco de dados Amazon Relational Database Service (Amazon RDS) para PostgreSQL usando a extensão pg_transport. Esta extensão fornece um mecanismo de transporte físico para mover cada banco de dados. Ao fazer streaming dos arquivos do banco de dados com o mínimo de processamento, ele fornece um método extremamente rápido para migrar grandes bancos de dados entre instâncias de banco de dados com o mínimo de tempo de inatividade. Essa extensão usa um modelo pull, em que a instância do banco de dados de destino importa o banco de dados da instância de banco de dados de origem.

Pré-requisitos e limitações

Pré-requisitos

  • Ambas as instâncias de banco de dados devem executar a mesma versão principal do PostgreSQL.

  • O banco de dados não deve existir no destino. Caso contrário, ocorrerá uma falha no transporte.

  • Nenhuma extensão diferente de pg_transport deve ser habilitada no banco de dados de origem.

  • Todos os objetos do banco de dados de origem devem estar no espaço de tabela padrão pg_default.

  • O grupo de segurança da instância de banco de dados de origem deveria permitir tráfego da instância de banco de dados de destino.

  • Instale um cliente PostgreSQL, como o psql, PgAdminou para trabalhar com a instância de banco de dados PostgreSQL do Amazon RDS. Você pode instalar o cliente em seu sistema local ou usar uma instância do Amazon Elastic Compute Cloud (Amazon EC2). Nesse padrão, usamos psql em uma instância do EC2.

Limitações

  • Você não pode transportar bancos de dados entre diferentes versões principais do Amazon RDS para PostgreSQL.

  • Os privilégios de acesso e a propriedade do banco de dados de origem não são transferidos para o banco de dados de destino.

  • Não é possível transportar bancos de dados em réplicas de leitura nem em instâncias pai de réplicas de leitura.

  • Não é possível usar os tipos de dados reg em nenhuma tabela de banco de dados que você planeja transportar com esse método.

  • É possível executar até 32 transportes totais ao mesmo tempo (inclusive importações e exportações) em uma instância de banco de dados.

  • Você não pode renomear ou incluir/excluir tabelas. Tudo é migrado como está.

Cuidado

  • Faça backups antes de remover a extensão, pois a remoção da extensão também remove objetos dependentes e alguns dados essenciais para a operação do banco de dados.

  • Considere a classe da instância e os processos em execução em outros bancos de dados na instância de origem ao determinar o número de operadores e os valores work_mem para pg_transport.

  • Quando o transporte é iniciado, todas as conexões no banco de dados de origem são encerradas e o banco de dados é colocado no modo somente leitura.

Observação: quando o transporte está sendo executado em um banco de dados, ele não afeta outros bancos de dados no mesmo servidor.

Versões do produto

Arquitetura

Transporte de bancos de dados PostgreSQL entre instâncias de banco de dados Amazon RDS

Ferramentas

  • pg_transport fornece um mecanismo de transporte físico para mover cada banco de dados. Ao fazer streaming dos arquivos do banco de dados com o mínimo de processamento, o transporte físico move os dados muito mais rapidamente que os processos tradicionais de despejo e carregamento e leva um tempo de inatividade mínimo. Os bancos de dados PostgreSQL transportáveis usam um modelo pull, em que a instância do banco de dados de destino importa o banco de dados da instância de banco de dados de origem. Você instala essa extensão em suas instâncias de banco de dados ao preparar os ambientes de origem e de destino, conforme explicado nesse padrão.

  • O psql permite que você se conecte e trabalhe com suas instâncias de banco de dados PostgreSQL. Para instalar o psql em seu sistema, consulte a página de downloads do PostgreSQL.

Épicos

TarefaDescriçãoHabilidades necessárias

Crie um grupo de parâmetros para o sistema de destino.

Especifique um nome de grupo que o identifique como um grupo de parâmetros de destino; por exemplo, pgtarget-param-group. Para obter instruções, consulte a documentação do Amazon RDS.

DBA

Modificar os parâmetros no grupo de parâmetros.

Defina os seguintes parâmetros:

  1. Adicione pg_transport ao parâmetro shared_preload_libraries.

    shared_preload_libraries = pg_stat_statements, pg_transport
  2. Defina o parâmetro pg_transport.num_workers. Escolha o número de operadores com os quais você deseja executar o transporte. O valor definido determina o número de operadores transport.send_file que serão criados na origem.

  3. Aumente o valor de max_worker_processes para mais de três vezes o valor de pg_transport.num_workers. Por exemplo, se você definir o valor de pg_transport.num_workers como 4, o valor de max_worker_processes deverá ser pelo menos 13. Se isso falhar, o pg_transport recomenda um valor mínimo. 

  4. Defina pg_transport.timing como 1. Essa configuração permite relatar informações de tempo durante o transporte.

  5. Defina o parâmetro pg_transport.work_mem. Esse parâmetro especifica a memória máxima a ser alocada para cada operador. O valor padrão é 128 MB.

Para obter mais informações sobre estes parâmetros, consulte a documentação do Amazon RDS.

DBA
TarefaDescriçãoHabilidades necessárias

Crie um grupo de parâmetros para o sistema de origem.

Especifique um nome de grupo que o identifique como um grupo de parâmetros de origem; por exemplo, pgsource-param-group. Para obter instruções, consulte a documentação do Amazon RDS.

DBA

Modificar os parâmetros no grupo de parâmetros.

Defina os seguintes parâmetros:

  1. Adicione pg_transport ao parâmetro shared_preload_libraries.

    shared_preload_libraries = pg_stat_statements, pg_transport
  2. Defina o parâmetro pg_transport.num_workers. O valor desse parâmetro definido na meta determina o número de operadores transport.send_file a serem usados. Se você tiver uma importação em execução nessa instância, aumente esse valor, mas considere o número de operadores que já estão em execução.

  3. Aumente o valor de max_worker_processes para mais de três vezes o valor de pg_transport.num_workers do destino. Por exemplo, se você definir o valor de pg_transport.num_workers como 4 no destino, o valor de max_worker_processes na origem deverá ser pelo menos 13. Se isso falhar, o pg_transport recomenda um valor mínimo. 

  4. Defina o parâmetro pg_transport.work_mem. Esse parâmetro especifica a memória máxima a ser alocada para cada operador. O valor padrão é 128 MB.

Para obter mais informações sobre estes parâmetros, consulte a documentação do Amazon RDS.

DBA
TarefaDescriçãoHabilidades necessárias

Crie uma nova instância de banco de dados Amazon RDS para PostgreSQL para a qual transportar seu banco de dados de origem.

Determine a classe da instância e a versão do PostgreSQL com base nos requisitos da sua empresa.

DBA, administrador de sistemas, arquiteto de banco de dados

Modifique o grupo de segurança do destino para permitir conexões na porta da instância de banco de dados a partir da instância do EC2.

A porta padrão para a instância PostgreSQL é 5432. Se você estiver usando outra porta, as conexões com essa porta devem estar abertas para a instância do EC2.

DBA, administrador de sistemas

Modifique a instância e atribua o novo grupo de parâmetros de destino.

Por exemplo, pgtarget-param-group.

DBA

Reiniciar a instância de banco de dados do Amazon RDS.

Os parâmetros shared_preload_libraries e max_worker_processes são parâmetros estáticos e exigem a reinicialização da instância.

DBA, administrador de sistemas

Conecte-se ao banco de dados da instância do EC2 usando psql.

Use o comando: 

psql -h <rds_end_point> -p PORT -U username -d database -W
DBA

Crie a extensão pg_transport.

Execute a consulta a seguir como usuário com a função rds_superuser:

create extension pg_transport;
DBA
TarefaDescriçãoHabilidades necessárias

Modifique o grupo de segurança da origem para permitir conexões na porta da instância de banco de dados a partitr da instância do Amazon EC2 e da instância de banco de dados de destino

A porta padrão para a instância PostgreSQL é 5432. Se você estiver usando outra porta, as conexões com essa porta devem estar abertas para a instância do EC2.

DBA, administrador de sistemas

Modifique a instância e atribua o novo grupo de parâmetros de origem.

Por exemplo, pgsource-param-group.

DBA

Reinicie a origem de banco de dados do Amazon RDS.

Os parâmetros shared_preload_libraries e max_worker_processes são parâmetros estáticos e exigem a reinicialização da instância.

DBA

Conecte-se ao banco de dados da instância do EC2 usando psql.

Use o comando: 

psql -h <rds_end_point> -p PORT -U username -d database -W
DBA

Crie a extensão pg_transport e remova todas as outras extensões dos bancos de dados a serem transportados.

O transporte falhará se houver alguma extensão diferente de pg_transport instalada no banco de dados de origem. Esse comando deve ser executado por um usuário com a função rds_superuser.

DBA
TarefaDescriçãoHabilidades necessárias

Execute uma simulação.

Use a função transport.import_from_server para executar uma simulação primeiro:

SELECT transport.import_from_server( 'source-db-instance-endpoint', source-db-instance-port, 'source-db-instance-user', 'source-user-password', 'source-database-name', 'destination-user-password', 'true');

O último parâmetro dessa função (determinado como true) define a operação a seco.

Essa função exibe todos os erros que você veria ao executar o transporte principal. Resolva os erros antes de executar o transporte principal.

DBA

Se a execução a seco for bem-sucedida, inicie o transporte do banco de dados.

Execute a função transport.import_from_server para realizar o transporte. Ele se conecta à fonte e importa os dados. 

SELECT transport.import_from_server( 'source-db-instance-endpoint', source-db-instance-port, 'source-db-instance-user', 'source-user-password', 'source-database-name', 'destination-user-password', false);

O último parâmetro dessa função (definido como false) indica que isso não é um ensaio.

DBA

Execute as etapas pós-transporte.

Depois que o transporte do banco de dados estiver concluído:

  • Valide os dados no ambiente de destino.

  • Adicione todas as funções e permissões ao destino.

  • Ative todas as extensões necessárias no destino e na origem, se necessário.

  • Reverta o valor do parâmetro max_worker_processes.

DBA

Recursos relacionados