Estratégia de backup do Amazon EC2 com restrições (pouco ou nenhum instantâneo pode ser obtido?)

9

Perguntas semelhantes foram feitas, mas preciso saber o que seria recomendado nessas circunstâncias, para saber se estou perdendo algo no meu entendimento sobre o uso do EC2.

Uma pequena startup está administrando seus negócios na rede EC2 e me pediu alguns conselhos sobre as opções de backup. No momento, eles são autofinanciados e estão fazendo o possível para economizar custos, quando possível. Sem me aprofundar muito na configuração de seus sistemas, darei um servidor web como exemplo; é um servidor web simples com um banco de dados. O problema é que eles não querem que o servidor seja desativado.

A pessoa que está realizando a instalação acredita que deve apenas fazer despejos periódicos do banco de dados e armazená-lo no S3 ou criar scripts que reconstruam um novo servidor na Amazon quando necessário, fazendo backup de pastas selecionadas contendo informações de configuração . Ele sugeriu que criar snapshots do servidor seria um desperdício, pois eles ocupam muito espaço em disco e, essencialmente, haveriam roteamento de dados entre grandes despejos de dados, para que o snapshot ficasse desatualizado rapidamente.

Meu pensamento era tirar um instantâneo da VM e, em seguida, fazer despejos periódicos do banco de dados e armazenar no S3. Se eles perderem a instância do EC2 ou tiverem algo como uma atualização inutilizável, eles poderão usar o instantâneo para criar um backup do servidor relativamente rápido com o despejo de banco de dados mais recente, em vez de começar do zero para criar uma nova instância a partir de uma instalação completamente. nova AMI.

Meu entendimento é que tirar um instantâneo de uma instância do EC2 (ou armazenamento do EBS) exigirá tempo de inatividade, algo que eles hesitam em ter. Também li que você deve desligar o servidor para manter o sistema de arquivos consistente quando o instantâneo foi tirado. Como eles ainda não possuem um cluster atrás de um balanceador, isso limita as opções que envolvem capturas instantâneas.

O script para criar servidores, a menos que exista algo específico da Amazon, envolveria a criação de um servidor Chef ou Puppet que poderia implantar novos servidores com suas funções associadas no EC2. No momento, a startup não tem financiamento para manter esse tipo de servidor disponível e, no momento, não precisa realmente implantar tantos servidores.

Idealmente, eles teriam o financiamento para criar vários servidores atrás de um balanceador virtual ou serviço de balanceador da Amazon e, em seguida, derrubar os servidores, um de cada vez, para realizar atualizações ou capturas instantâneas. No momento, eu ficaria nervoso com a idéia de fazer atualizações, porque se você estiver fazendo despejos do banco de dados, isso não ajudará se uma atualização do sistema alterar uma biblioteca na qual o aplicativo deles depende e o serviço falha.

Também suponho que outra opção é executar um script que cria um volume EBS, monta-o e, no servidor, executa algo como rsync para capturar a maioria das informações do sistema de arquivos no volume EBS, compactar e copiar o conteúdo no S3, desconectar o volume destrua-o para economizar custos de armazenamento e faça um despejo de banco de dados para capturar dados de bordo que seriam inconsistentes caso contrário. Para alguns de seus servidores, provavelmente será necessário salvar em volumes temporários do EBS à medida que as necessidades do banco de dados aumentarem.

Uma sandbox do VMWare está sendo criada para recriar seus sistemas de rede em um ambiente em que as atualizações podem ser pré-testadas antes de serem aplicadas aos sistemas de produção na Amazon. Espero que isso minimize a possibilidade de uma atualização do sistema matar sua aplicação.

Portanto ... dadas as restrições de execução de um servidor, com o banco de dados e o servidor de aplicativos no sistema, parece que o tempo de inatividade é o mais próximo possível (restringindo o uso de instantâneos e fazendo com que o processo de backup seja o mais "quente" possível ( criado ao vivo sem derrubar o servidor), estou no caminho errado por sugerir agendar um horário para criar um instantâneo da instância do EC2 em seu estado de funcionamento e fazer dumps de banco de dados para copiar para o S3? Existe uma estratégia melhor para seguir na criação de um backup ao vivo de um servidor, se os instantâneos criarem tempo de inatividade?

Bart Silverstrim
fonte
2
Eles são sensíveis ao tempo de inatividade, mas rodando em apenas um servidor?
precisa
1
Até conseguirem o financiamento para administrar grupos, sim. Eles sabem e têm como objetivo executar um cluster atrás de um balanceador ... simplesmente não é uma opção em cima da mesa no momento.
Bart Silverstrim
A Amazon alerta fortemente para esperar falhas na instância. Qual é o custo do tempo de inatividade significativo e a perda de alguns dados?
ceejayoz
Às vezes, você deve se responsabilizar pelo que a situação lhe dá ... para o crédito deles, eles estão trabalhando para obter uma configuração adequada.
Bart Silverstrim

Respostas:

18

Há algo interessante nessa questão - especificamente no que diz respeito à idéia de tempo de inatividade. Parte da ideia é que, se um aplicativo é sensível ao tempo de inatividade, o tempo de recuperação também deve ser levado em consideração. (Como argumento extremo, nenhum backup requer nenhum tempo de inatividade, a menos que você precise desses backups; nesse caso, o tempo de inatividade pode se aproximar do infinito )

Um pouco sobre o EBS

Os volumes e capturas instantâneas do EBS operam em um nível de bloco - uma conseqüência da qual permite a captura de capturas instantâneas enquanto uma instância está em execução, mesmo se o volume EBS estiver em uso. No entanto, apenas os dados que estão realmente no disco (ou seja, não estão no cache de arquivos) serão incluídos no instantâneo. É a última razão que dá origem à ideia de instantâneos consistentes.

  • A maneira recomendada é desanexar o volume, capturá-lo instantaneamente e recolocá-lo - geralmente não é prático.
  • A próxima melhor opção envolve liberar os caches de gravação em disco, congelar o sistema de arquivos e tirar seu instantâneo

Um ponto interessante aqui é que, nos dois casos acima, não é necessário aguardar a conclusão do instantâneo para recolocar / descongelar e retomar a gravação no disco - depois que o instantâneo tiver sido iniciado, seus dados serão consistentes nesse momento. Normalmente, isso requer apenas alguns segundos durante os quais seu disco está bloqueado para gravação. Além disso, como a maioria dos bancos de dados estrutura seus arquivos no disco de maneira razoável - há uma boa chance de que as inserções tenham um efeito mínimo nos blocos existentes - o que minimiza os dados adicionados ao instantâneo.

Considere o ponto do backup

Os volumes EBS já estão replicados em uma zona de disponibilidade - para que haja um certo grau de redundância. Se sua instância terminar, você poderá simplesmente anexar o volume EBS a uma nova instância e (depois de superar a falta de consistência) retomará onde você deixado de fora. Em muitos aspectos, isso torna o volume do EBS muito parecido com um instantâneo inconsistente, desde que você possa acessá-lo. Dito isto, a maioria dos usuários do EC2 provavelmente se lembra das falhas em cascata dos volumes EBS desde o início de 2011 - os volumes ficaram inacessíveis por vários dias e alguns usuários também perderam dados.

RAID1

Se você estiver tentando se proteger contra a falha de um disco EBS (isso acontece), considere uma configuração de RAID1. Como os volumes EBS são dispositivos de bloco, você pode facilmente usar o mdadm para configurá-los na configuração desejada. Se um de seus volumes EBS não estiver executando conforme as especificações, será fácil falhar manualmente (e depois substituí-lo por outro volume EBS). Obviamente, isso tem desvantagens - aumento do tempo para cada gravação, maior suscetibilidade ao desempenho variável, o dobro do custo de E / S (monetariamente, não em termos de desempenho), nenhuma proteção real contra uma falha mais generalizada da AWS (um problema comum no ano passado foi a incapacidade de desanexar volumes EBS que estavam em um estado bloqueado) e, é claro, o estado inconsistente do disco em falha.

S3FS

Uma opção para certas aplicações (definitivamente NÃO para bancos de dados) é montar o S3 como um sistema de arquivos local (por exemplo, via s3fs). Isso é lento, carece de alguns dos recursos que se esperaria de um sistema de arquivos e pode não se comportar como esperado (consistência eventual). Dito isso, para uma finalidade simples, como disponibilizar arquivos enviados entre instâncias, pode ter mérito. Obviamente, não é para nada que exija bom desempenho de leitura / gravação.

MySQL bin-log

Mais uma opção específica para o MySQL pode ser o uso do bin-log. Você pode configurar um segundo volume do EBS que armazenará seu log de bin (para minimizar o efeito das gravações adicionadas no seu banco de dados) e usá-lo em conjunto com quaisquer despejos de banco de dados que você fizer. Você pode até fazer isso com o s3fs, que pode realmente ter mérito se o desempenho for tolerável (um rsync provavelmente seria melhor do que tentar usar o s3fs diretamente, e você definitivamente desejará compactar o que puder).

Mais uma vez, porém, voltamos à idéia de propósito. Considere o que aconteceria com as sugestões acima:

  • Volumes EBS inacessíveis:
    • RAID1 - inútil, já que você não pode acessar os dados
    • bin-log - inútil, a menos que você o tenha exportado para o S3 - provavelmente um atraso se você fez isso
  • A instância termina inesperadamente:
    • RAID1 - seus discos estão disponíveis, mas não são consistentes; seu banco de dados pode se recuperar sozinho da inconsistência
    • bin-log - seus dados devem estar acessíveis, embora você possa precisar revisar os últimos eventos
  • Alguém executa o DROP DATABASE como root:
    • RAID1 - você tem duas cópias perfeitas de um banco de dados inexistente
    • bin-log - você deve poder reproduzir os eventos até pouco antes do comando, para que esteja bem

Realmente, o RAID1 é praticamente inútil e o log de bin leva muito tempo - ambos podem ter mérito em determinadas circunstâncias, mas estão longe do backup da ideia.

Instantâneos

É importante observar que os instantâneos são diferenciais e armazenam apenas os blocos reais que contêm dados (e são compactados). Ao contrário do volume EBS, em que se você tiver um volume de 20 GB, mas usar apenas 1 GB, você ainda será cobrado pelo armazenamento 'provisionado' (20 GB). Com um instantâneo, você é cobrado apenas pelo que usar. Se nenhum dado for alterado entre os instantâneos, não há (teoricamente) nenhuma cobrança. (Os instantâneos são cobrados por PUTS / GETS e armazenamento usado).

Como um aparte, eu recomendo que os dados do seu aplicativo (incluindo bancos de dados) não sejam armazenados no volume raiz (que você já pode ter configurado). Uma das vantagens é que, esperançosamente, seu volume raiz vê um mínimo de alterações - o que significa que seus instantâneos podem ser menos frequentes (ou terão um mínimo de alterações), reduzindo o custo e a facilidade de uso.

Também é relevante mencionar que você pode excluir instantâneos antigos a qualquer momento - mesmo sendo diferenciais, eles não afetarão os outros instantâneos. Dito isto, cada bloco alocado para um instantâneo não será abandonado até que não exista nenhum instantâneo que ainda faça referência a esse bloco.

O problema com despejos periódicos é primeiramente o tempo entre despejos (possivelmente resolvido usando o log de bin do MySQL) e também a dificuldade de recuperação. Leva tempo para importar um despejo grande e reproduzir todos os eventos de um log de bin. Além disso, a criação de um despejo não deixa de ter suas implicações de desempenho. Provavelmente, esses despejos provavelmente exigem muito mais armazenamento do que um instantâneo. A configuração de um volume EBS exclusivamente para os bancos de dados e a captura instantânea que seria preferível na maioria dos aspectos (dito isso, tirar uma captura instantânea também tem um pouco de implicação no desempenho).

A beleza dos instantâneos e volumes EBS é que eles podem ser usados ​​em outras instâncias. Se sua instância falhar na inicialização, você poderá anexar o volume raiz a outra instância para diagnosticar e corrigir o problema - ou apenas copiar seus dados - e poderá alternar volumes raiz com apenas alguns minutos de inatividade (pare a instância, desanexe o volume raiz, anexe um novo volume raiz, inicie a instância). Essa mesma idéia se aplica a ter seus dados em um segundo volume EBS. Basicamente, você apenas cria uma nova instância da AMI personalizada e anexa o volume atual do EBS a ela - isso ajuda a minimizar o tempo de inatividade.

(Pode-se argumentar (e eu provavelmente não o recomendaria) que você pode configurar duas cópias do MySQL no mesmo servidor (Master-slave), usando dois volumes EBS e, em seguida, encerrar seu slave para tirar uma foto instantânea de seu Volume do EBS - será consistente, sem tempo de inatividade -, mas provavelmente os custos de desempenho não valem a pena).

A AWS tem escalonamento automático - que poderá manter um número constante de instâncias (mesmo que esse número seja 1) -, no entanto, você implantaria a partir de um instantâneo - portanto, se seu instantâneo não for útil, a premissa não será muito útil. .

Mais alguns pontos - você pode implantar quantas instâncias quiser de um único instantâneo (diferente de um volume EBS, que pode ser anexado a uma única instância a qualquer momento). Além disso, os volumes EBS são restritos para uso em uma zona de disponibilidade, enquanto os instantâneos podem ser usados ​​em uma região.

Idealmente, com um instantâneo, se o servidor ficar inativo, você poderá iniciar um novo usando o último instantâneo - especialmente se você separar o volume raiz dos dados, uma atualização incorreta resultará em um tempo de inatividade mínimo (já que você apenas transfira o volume EBS que contém seus dados - e tire uma foto instantânea para preservar qualquer coisa que possa ser corrompida devido a inconsistência).

Como observação lateral, a Amazon declara que a taxa de falhas dos volumes EBS aumenta com a quantidade de dados alterados desde a última captura instantânea.

Recomendações finais

  • Use instantâneos - eles são ótimos - reduzem o tempo de inatividade muito mais do que causam
  • Separe os dados e o volume raiz, talvez colocando os bancos de dados em seu próprio volume, e faça uma captura instantânea antes das atualizações, se necessário
  • Use o bin-log para permanecer o mais "quente" possível - faça o upload (compactado) para o S3
  • Verifique se realmente retirou os dados da instância (mesmo se os dados estiverem intactos em um volume EBS, o volume em si pode estar temporariamente inacessível).

Leitura recomendada:

(Acredito que escrevi muito, mas não o suficiente - mas espero que você encontre algo que valha a pena ler).

cyberx86
fonte
Ótimas informações e explicações sobre como os Snapshots do EBS funcionam.
bwight
Sim, havia ótimas informações lá. Ambas as respostas (quando combinadas com os comentários especialmente) foram úteis, eu gostaria de poder aceitar as duas!
Bart Silverstrim
4

É possível capturar instantâneos de um volume EBS ativo , no entanto, você deve ter cuidado para garantir que o sistema de arquivos esteja em um estado consistente e congelado enquanto o instantâneo é iniciado. Nem todos os sistemas de arquivos permitem isso, embora seja definitivamente possível e a base de nossa própria solução de backup.

Os instantâneos do EBS também são bastante baratos, pois cobram apenas pelos dados alterados, e os encargos de dados são muito razoáveis. Porém, lembre-se de que isso se baseia em alterações no nível do bloco, portanto, pode mudar rapidamente. Isso também ocorre entre os instantâneos, apenas os dados alterados entre os instantâneos são cobrados. Para dar uma idéia dos custos, pagamos <US $ 10 por mês pelo armazenamento de instantâneos e tiramos instantâneos diários, mantendo os últimos 7 diários e últimos meses em instantâneos semanais, e temos 2 servidores seguindo esse esquema (~ 20 instantâneos, Discos rígidos de 20 GB).

Matthew Scharley
fonte
Infelizmente, o sistema de arquivos nos servidores não é xfs. Embora eu supusesse que isso poderia ser feito se eles migrassem para montar um XFS formatado por volume EBS e anexassem isso à instância, movendo os dados existentes para esse ponto de montagem. No momento, não acho que eles iriam para o tempo de inatividade e cobrariam taxas por isso.
Bart Silverstrim
@ Bart: Se você estiver disposto a suportar uma ou duas horas de inatividade, é possível migrar um instantâneo existente para o XFS. Eu também acredito que o ext4 agora suporta o material necessário para fazer um trabalho consistente de snapshot, se você estiver nesse sistema de arquivos.
Matthew Scharley
Como a resposta sugere, você ainda pode tirar uma captura instantânea sem parar o banco de dados sem interromper os serviços. Existe uma possibilidade ao fazer uma captura instantânea de que ela não seja consistente, mas nessa situação você ainda terá o dump do banco de dados.
precisa
@javierConstanzo - Você está sugerindo tirar um instantâneo ao vivo e arriscar o estado inconsistente e usar os dumps do banco de dados para corrigir possíveis dobras na consistência do sistema de arquivos?
Bart Silverstrim
@ Bart: Eu também sugeriria que os snapshots são um backup tão "quente" quanto você obterá, e também muito mais consistente internamente do que o rsync ou similar. Os arquivos podem mudar enquanto outros estão sendo transferidos, o que significa que você pode acabar com um backup inútil em algumas situações. Eu, pessoalmente, recomendo que você gaste algumas horas de inatividade para alterar os sistemas de arquivos (se necessário) para que os snapshots funcionem. É incrível como a solução de backup dos snapshots do EBS é flexível, você pode montá-los na sua instância em execução para restaurar.
Matthew Scharley
1

Que tal uma solução de backup barata e barata como o Zmanda Cloud Backup? Usamos para fazer backup de cerca de 6 servidores e 1 SQL Server e custa apenas US $ 10 por mês. Você pode criptografar seus dados com um certificado autoassinado e eles usam s3 para armazenar os dados (para que não haja taxas de transferência de dados se você estiver fazendo backup do EC2).

Brian
fonte
Você é afiliado? Se eles não estão indo para primavera para o ~ US $ 1 / mês para um snapshot EBS ...
ceejayoz