Temos uma instância Postgres RDS no Amazon Web Services. Temos backups automáticos ativados e tiramos instantâneos diariamente. Gostaríamos de gerar um backup local 'atualizado' da instância RDS que possamos gerenciar nós mesmos. A execução de pg_dump na instância não é suficiente porque queremos poder restaurar o banco de dados a qualquer momento. Preferimos ter um backup local do RDS e de todos os arquivos WAL desde que o backup foi feito. Perguntas:
É possível acessar os arquivos WAL e backups que o RDS está gerando automaticamente em sua rotina de backup? Isso seria ideal. Eu gostaria de baixar uma cópia local deles. Após a investigação inicial, sinto que a resposta a esta pergunta é 'não'. Parece que o RDS está armazenando seus arquivos WAL e backups no S3, mas isso os torna inacessíveis para nós. Adoraria a confirmação.
Existe alguma outra forma de acessar as transações (arquivos WAL) que ocorreram na instância do RDS? Imagino que deveríamos ser capazes de criar um banco de dados Postgres em um EC2 e 'alimentar' transações de nossa instância RDS 'ao vivo' primária para esta instância EC2. Depois que nossa instância do EC2 for atualizada, podemos extrair arquivos WAL de lá. Mas que dor de cabeça :/ Essa configuração é possível? Qual é a mágica de 'alimentar' de nossa instância RDS para a instância EC2 para que ela esteja sempre atualizada?
Obrigado!
Atualização: postei sobre isso nos fóruns da AWS - entre em contato e pergunte lá .
Até o momento, o Amazon RDS não oferece suporte à replicação física fora do RDS. Você pode usar
GRANT
oREPLICATION
direito de usuário usando umrds_superuser
login, mas não pode configurarreplication
entradas para IPs externos empg_hba.conf
.Além disso, quando você cria um grupo de parâmetros de banco de dados no RDS, alguns parâmetros-chave são exibidos, mas bloqueados, por exemplo
archive_command
, que é bloqueado para/etc/rds/dbbin/pgscripts/rds_wal_archive %p
. O AWS RDS for PostgreSQL não parece expor esses WALs para acesso externo (digamos, via S3), como seria necessário se você usasse a replicação de remessa WAL para PITR externo.Portanto, neste ponto, se você deseja enviar pelo wal, não use o RDS. É um banco de dados enlatado e fácil de usar, mas fácil de usar geralmente significa que também é limitado, e esse certamente é o caso aqui. Como Joe Love aponta nos comentários, ele fornece remessa WAL e PITR dentro do RDS , mas você não pode acessar o WAL de fora do RDS.
Portanto, você precisa usar os próprios recursos de backup do RDS - dumps, instantâneos e seu próprio PITR baseado em WAL.
Mesmo que o RDS permitisse que você fizesse conexões de replicação (para
pg_basebackup
ou replicação de streaming) e permitisse o acesso ao WAL arquivado, talvez você não conseguisse realmente consumir esse WAL. O RDS executa um PostgreSQL corrigido, embora ninguém saiba o quão fortemente corrigido ou se altera significativamente o formato em disco. Ele também roda na arquitetura selecionada pela Amazon, que provavelmente é x64 Linux, mas não é facilmente determinada. Como o formato e a replicação do PostgreSQL em disco dependem da arquitetura, você só pode replicar para hosts com a mesma arquitetura usada pelo Amazon RDS e somente se a compilação do PostgreSQL for compatível com a deles.Entre outras coisas, isso significa que você não tem uma maneira fácil de migrar do RDS. Você teria que parar todas as gravações no banco de dados por tempo suficiente para obter um
pg_dump
, restaurá-lo e colocar o novo banco de dados em execução. Os truques usuais com replicação e failover, com rsync, etc, não funcionarão porque você não tem acesso direto ao host do banco de dados.Mesmo se o RDS executasse um PostgreSQL sem patch, a Amazon provavelmente não permitiria que você fizesse streaming do WAL para o RDS ou importasse para o RDS usando
pg_basebackup
por motivos de segurança. O PostgreSQL trata o diretório de dados como conteúdo confiável, e se você criou alguma função 'LANGUAGE c' inteligente que conecta a funcionalidade interna ou fez qualquer outra coisa complicada, você pode explorar o servidor para obter maior acesso do que deveria ter . Portanto, a Amazon não permitirá a entrada do WAL tão cedo.Eles poderiam suportar o envio WAL de saída, mas os problemas acima com compatibilidade de formato, liberdade para fazer alterações, etc., ainda se aplicam.
Em vez disso, você deve usar uma ferramenta como Londiste ou Bucardo.
Agora isso é possível usando a replicação lógica: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.Concepts.General.FeatureSupport.LogicalReplication
A replicação usando sistemas baseados em gatilho como Londiste e Bucardo dentro e fora do RDS agora é suportada a partir de 10 de novembro de 2014 , de acordo com uma resposta naquele tópico do fórum.
Anúncio aqui