Estamos executando muitas VMs do Linux em um ambiente de vmware / armazenamento compartilhado, cada uma executando sua própria instância do postgreSQL (uma mistura de 9.0 e 9.3). Atualmente, toda a VM fica em uma única partição / volume raiz e tivemos grande sucesso (~ 8 anos) usando instantâneos baseados em armazenamento dos volumes VMFS subjacentes para processo de backup / restauração (e replicação para o nosso site de recuperação de desastres).
Devido à arquitetura de nosso armazenamento, seria vantajoso separar os arquivos WAL do postgres em um volume não armazenado em cache, principalmente de gravação, para fornecer menos rotatividade de cache no lado do armazenamento. Com nosso armazenamento (Nimble Storage), podemos atribuir os dois volumes a um único grupo de proteção / captura instantânea, mas não pude deduzir ao nosso fornecedor que as capturas instantâneas ocorrerão EXATAMENTE ao mesmo tempo em todos os volumes no grupo de proteção - provavelmente sim, mas sempre há essa chance de que seus milissegundos se separem.
Para esse fim, realizamos algumas experiências, enquanto escrevíamos dados no banco de dados o mais rápido possível usando o pg_bench. Após os experimentos, restauramos nossos volumes de instantâneos e iniciamos o VM + postgres
- Faça um instantâneo dos volumes de dados e de log quase simultaneamente - resultado: banco de dados recuperado
- Volume de dados da captura instantânea primeiro, volume de log ~ 1 minuto depois - resultado: banco de dados recuperado
- Volume do log de instantâneo primeiro, volume de dados ~ 1 minuto depois - resultado: banco de dados recuperado
- Volume do log de instantâneo primeiro, volume de dados ~ 3 minutos depois, depois que um ponto de verificação do WAL gravou novos dados nos arquivos de dados: resultado: banco de dados recuperado
Portanto, o teste parece nos dizer, desde que os dois snapshots sejam consistentes no nível do volume e relativamente próximos, você obtenha uma cópia consistente do banco de dados, com base no tempo do snapshot do volume WAL / Log.
Minha pergunta: isso é seguro? Quais são os casos esquecidos que faltam em nossos testes e o que pode dar errado?
O documento do Postgres indica que isso não é seguro, mas o teste parece indicar sua robustez: http://www.postgresql.org/docs/9.1/static/backup-file.html
Se o seu banco de dados estiver espalhado por vários sistemas de arquivos, pode não haver maneira de obter instantâneos congelados exatamente simultâneos de todos os volumes. Por exemplo, se seus arquivos de dados e log WAL estiverem em discos diferentes ou se os espaços de tabela estiverem em sistemas de arquivos diferentes, talvez não seja possível usar o backup de captura instantânea porque as capturas instantâneas devem ser simultâneas. Leia a documentação do sistema de arquivos com muito cuidado antes de confiar na técnica de captura instantânea consistente nessas situações.
NOTA: Sim, conhecemos outras opções para garantir que elas sejam consistentes, como colocar o PostgreSQL no modo de backup ativo ou usar a integração VMware do nosso armazenamento para desativar as próprias VMs, mas estamos procurando uma solução exclusiva de armazenamento para velocidade, conveniência, e zero impacto para nossos clientes.