Estratégia de backup simples para instâncias / volumes do Amazon EC2?

13

Você inseriu Backups Introdutórios para Imagens do Windows 010 suportadas pelo Amazon EC2 EBS ...

Eu tenho procurado meu cérebro para encontrar uma estratégia simples de backup para nosso servidor Windows 2008 único executando o SharePoint Services. Esta é uma imagem apoiada pelo EBS de um servidor com um volume de dados. Eu não preciso de nada exótico. Eu só preciso de um backup "diário" (perder um dia de dados não é catastrófico).

Criamos e salvamos uma imagem AMI suportada pelo EBS (Windows 2008) que estamos confortáveis ​​em usar. Começamos a fazer backups simplesmente criando uma nova imagem EBS AMI. Isso é realmente simples, mas o servidor em execução é colocado offline durante os primeiros 10 a 15 minutos após a criação da imagem - não é o ideal.

A maneira padrão de criar backups parece estar criando instantâneos de volumes anexados a uma instância em execução. Novamente, é bem simples e o servidor permanece utilizável durante a geração do instantâneo. O aparente Catch-22 é que você não pode simplesmente iniciar uma nova instância diretamente de um instantâneo.

Eu sei como agrupar uma instância em execução no armazenamento S3 e, em seguida, registrar a AMI no bucket do S3. Isso me permite capturar um backup de uma instância em execução e, se a instância em execução for perdida, registre a AMI no bucket S3 e inicie a nova AMI para recuperar a instância, mas isso parece realmente complicado e parece ridículo precisar faça malabarismos entre o AWS Console e o plug-in S3 Organizer do Firefox para obter isso. (Por favor, não mencione a abordagem de linha de comando, este é um curso de nível 010).

Ao brincar com imagens apoiadas pelo EBS, a seguinte abordagem parece funcionar para mim (tudo feito no AWS Console):

1.Para seus backups, basta capturar instantaneamente o volume do sistema (/ dev / sda1) conforme necessário. 2.Se você perder a instância em execução, faça o seguinte: a.Crie um novo volume a partir do seu último backup de captura instantânea b.Inicie outra instância da AMI inicial (deve ser suportada pelo EBS). d. Desconecte o volume do sistema existente da nova instância interrompida e descarte. Anexe o volume recém-criado como volume do sistema (/ dev / sda1) à instância parada. f.Reinicie a nova instância. Eu testei isso algumas vezes e parece funcionar para mim.

Pergunta: Há algo de errado com essa abordagem?

John Miner
fonte

Respostas:

9

Sua abordagem parece muito boa - mas posso pensar em uma maneira possível de melhorá-la.

Para reduzir o impacto da perda de dados desde o último backup e a falha do volume EBS (improvável, mas ainda possível), você pode armazenar seus dados em um volume EBS separado dos arquivos do sistema e fazer backup do volume dos dados com mais frequência do que o volume do sistema .

Com sua estratégia atual, você perderá todos os dados criados entre a hora do último backup e a falha da instância. Com a nova abordagem, o volume de dados será gravado até a falha da instância, para que você possa anexá-lo novamente à nova instância assim que estiver em funcionamento.

gareth_bowles
fonte
Ponto excelente.
John Miner
4

Gero um instantâneo para cada volume da minha conta usando um script bash

#!/bin/bash

ec2-describe-volumes | awk '{ print $2 }' | sort -u >  /tmp/ebs_volumes

for i in $(cat /tmp/ebs_volumes); do
   echo $i;
   ec2-create-snapshot $i;
done
N Abramson
fonte
3
como você remove instantâneos antigos?
Rmalayter
1
+1 para inspiração. (Eu escrevi alguns scripts para fins semelhantes de minha própria: serverfault.com/questions/275245/... )
Jonik
0

Aqui está o script que criará o backup da AMI para todas as instâncias do ec2 na sua VPC

#!/bin/bash
#Script to Automate AMI backup

echo "----------------------------------\n   `date`   \n----------------------------------"

aws ec2 describe-instances --filters Name=vpc-id,Values=vpc-xxx |   awk '{ print $8 }' | sort -n   | grep  "i-" > /tmp/instanceid.txt

echo "Starting the Daily AMI creation: "

 #To create AMI from instance-id 

for i in $(cat /tmp/instanceid.txt); do
        echo "Creating AMI for Instance id $i ......."


echo "instance-`date +%d%b%y`-$i" > /tmp/aminame.txt

aws ec2 create-image --instance-id $i --name "`cat /tmp/aminame.txt`" --description "This is created by ami-backup.sh" --no-reboot | grep -ir ami | awk '{print $4}' > /tmp/amiID.txt

echo  "AMI Name is: `cat /tmp/aminame.txt`\n"

done

echo done
Ashish Karpe
fonte