Estratégia de backup do PostgreSQL EC2

4

Estou tentando determinar a melhor abordagem para fazer backup de um banco de dados PostgreSQL no Amazon EC2. Eu li sobre algumas opções.

1) Faça um instantâneo diário do volume do EBS que seu banco de dados está usando.

O problema que vejo com essa abordagem é o que acontece quando o instantâneo é tirado durante uma gravação? Meus dados não serão corruptos?

2) Use o pg_dump, comprima os arquivos e armazene no S3.

O pg_dump não cria dados corrompidos, no entanto, a restauração do banco de dados do pg_dump pode ser demorada

Qual estratégia deve ser usada? A opção 1 parece tentadora porque é mais fácil de fazer e restaurar, mas estou assumindo um risco usando essa abordagem?

    
por Brian D. 03.11.2011 / 20:10

1 resposta

6

Eu não posso falar pelo PostgreSQL porque não o uso, mas eu uso uma variação em sua opção 1 para fazer backup de bancos de dados MySQL no EC2, e os restaurei com sucesso, sem problemas.

O primeiro requisito, é claro, é que os bancos de dados sejam armazenados em um volume do EBS para que possam ser instantâneos. Eu sou a favor de usar o XFS como sistema de arquivos, já que todo o sistema de arquivos pode ser facilmente congelado.

Para iniciar o processo de snapshot, você deseja congelar seus bancos de dados e liberar suas tabelas. Existe um ótimo script que fará isso, assim como congelará seu sistema de arquivos (se for xfs) chamado ec2-consistent-snapshot (o site tem alguns comentários sobre o PostgreSQL que podem indicar uma direção aceitável - ele é projetado para o Ubuntu, mas funciona em outras distribuições (por exemplo, Linux / CentOS da Amazon) sem muita dificuldade). Meu entendimento é que, com o PostgreSQL, as pessoas muitas vezes simplesmente tiram o instantâneo (depois de congelar o sistema de arquivos) e contam com as capacidades de recuperação integradas do PostgreSQL para restaurar tudo a um estado funcional. O xfs_freeze ainda é importante para obter um instantâneo consistente.

Quando seu sistema de arquivos estiver congelado (e seu banco de dados liberado e bloqueado, se possível), tire sua foto (idealmente, use a API diretamente, ao contrário dos comandos baseados em Java (muito) lentos). O comando snapshot leva apenas um (alguns) segundo (s) para retornar, após o qual você pode descongelar o sistema de arquivos - o snapshot criado será consistente, apesar das leituras adicionais.

Dado que os instantâneos são diferenciais (de certa forma) e compactados, essa abordagem é muito mais econômica do que usar o S3, além de oferecer mais opções, também permite restaurar dados muito mais rapidamente e deve bloquear seus bancos de dados para um período mais curto do que gerar um despejo. Também é possível girar seus instantâneos para manter seus números sob controle - eu escrevi um script perl para fazer isso por mim.

Em caso de dúvida, tente a primeira opção, crie um volume do EBS e teste o banco de dados para ver se tudo funciona - não confie apenas que o backup é bom.

    
por 03.11.2011 / 21:22