Como alguém pode usar o S3 com eficiência para fazer backup de arquivos incrementalmente?

42

Entendo como o rsync funciona em alto nível, mas existem dois lados. Com o S3, não há daemon para falar - bem, existe, mas é basicamente apenas HTTP.

Parece haver algumas abordagens.

s3rsync (mas isso só depende do rsync no s3). Direto. Não tenho certeza se quero depender de algo de terceiros. Desejo s3 apenas suportado rsync.

Também existem alguns 'clones' do rsync, como duplicidade, que pretendem suportar o s3 sem o referido acesso. Mas como isso pode ser feito? Eles estão mantendo um arquivo de índice localmente? Não tenho certeza de como isso pode ser tão eficiente.

Obviamente, eu quero usar o s3 porque é barato e confiável, mas há algumas coisas para as quais o rsync é a ferramenta, como fazer backup de um diretório gigante de imagens.

Quais são as opções aqui? O que eu perco usando duplicidade + s3 em vez de rsync + s3rsync + s3?

Jaimie Sirovich
fonte
4
S3 é barato? Isso é novidade para mim. Confiável? Com certeza, mas não é barato.
EEAA
5
Bem, s3 custa US $ 0,13 / gb ou menos, à medida que você armazena mais ou deseja menos redundância. Uma pesquisa rápida revela evbackup.com para armazenamento rsync. Muito mais caro. O que é mais barato e tem algum nível de redundância?
Jaimie Sirovich 19/08/2012
Se eu fosse projetar o rsync, ele suportaria plugins para que novos protocolos (por exemplo, s3: //) pudessem ser adicionados. No entanto, no momento, o rsync não suporta isso, então não acredito que o rsync possa ser usado diretamente para fazer backup no S3.
Edward Falk
A próxima questão é que eu não acho que o S3 armazene metadados como propriedade ou permissões; portanto, usar, por exemplo, "aws s3 sync" para fazer backups funcionará, mas provavelmente não é adequado para um backup completo de um sistema de arquivos Unix, pois muitos dados seriam perdidos na restauração. Também acho que links simbólicos, hardlinks e outros arquivos especiais seriam perdidos.
Edward Falk

Respostas:

39

Desde que esta pergunta foi respondida pela última vez, existe uma nova ferramenta de linha de comando da AWS aws,.

Ele pode sincronizar , como o rsync, entre o armazenamento local e o s3. Exemplo de uso:

aws s3 sync s3://mybucket /some/local/dir/

Se o ambiente python do seu sistema estiver configurado corretamente, você poderá instalar o cliente da AWS usando pip:

pip install awscli
Dan Pritts
fonte
1
Na minha experiência, isso carrega tudo, não apenas um delta de mudanças. Por exemplo, eu estava enviando um site estático para um servidor de desenvolvimento rsynce levou uma média de 1 segundo, com apenas as alterações ocorrendo na minha conexão lenta. aws s3 syncpor outro lado, demorou cerca de 5 minutos, transferindo novamente cada arquivo.
Ryebread 16/03/16
2
Acredito que você não funcione, mas os documentos dizem "Um arquivo local exigirá o upload se o tamanho do arquivo local for diferente do tamanho do objeto s3, a hora da última modificação do arquivo local é mais recente que a hora da última modificação do objeto s3 ou o arquivo local não existe no intervalo e no prefixo especificados ". Verifique se você possui a versão mais recente do aws-cli - se você pode reproduzir isso, registre um bug com eles no github. Eles foram responsivos quando eu arquivei um bug há um tempo atrás.
Dan Pritts
O comando deve ser: aws s3 sync / some / local / dir / s3: // mybucket
Carlo S
1
Carlos, não sei ao certo qual é o seu ponto. Se você pretende sugerir que meu comando de exemplo esteja errado, nós dois estamos certos. A sincronização s3 pode funcionar em qualquer direção.
Dan Pritts
Tarde para a festa, mas eis o que está acontecendo: Ao fazer o upload para o S3, as regras de verificação rápida se aplicam (faça o upload se o tamanho ou a data tiver sido alterado). Ao fazer o download , não há regras de verificação rápida e tudo é baixado incondicionalmente.
Edward Falk
16

A ferramenta s3cmd tem uma ótima syncopção. Eu o uso para sincronizar backups locais, usando algo como:

s3cmd sync --skip-existing $BACKUPDIR/weekly/ s3://MYBACKUP/backup/mysql/

O --skip-existingmeio que ele não tenta soma de verificação compara os arquivos existentes. Se já houver um arquivo com esse nome, ele o ignorará rapidamente e seguirá em frente. Também existe a --delete-removedopção que removerá os arquivos que não existem localmente, mas eu quero continuar no S3, mesmo os que limpei localmente, para não usá-lo.

Nic Cottrell
fonte
5

Não quero dizer a ninguém o que fazer, mas posso acenar uma bandeira por duplicidade? ou outra solução de backup incremental. A sincronização é muito boa, mas se você fizer backup noturno, o que acontecerá se você não perceber o problema por dois dias? Resposta: É tarde demais, seus arquivos locais e seu backup são um espelho um do outro e os dados de que você não precisa são os mesmos. Você realmente deve considerar backups incrementais ou instantâneos para poder recuperar para um determinado momento no tempo e, para fazer isso com eficiência, precisa de backups incrementais. E se a perda de dados for um cenário de fim do mundo, mantenha cópias em diferentes fornecedores, como você nunca sabe, e poderá se perder, invadir quem sabe.

Eu uso duplicidade e s3, é bom, mas é cpu intensivo. Mas faz backups incrementais. Em caso de emergência, quando você deseja restaurar um diretório ou arquivo específico, como na quarta-feira passada ou em janeiro passado, sem restaurar os outros arquivos na mesma partição, você precisa de backups incrementais e de uma ferramenta na qual você pode solicitar apenas os arquivos necessários.

Eu tenho um cron, que fica cheio a cada x meses, caso contrário incremental e exclui mais de x meses para manter os totais de armazenamento s3 baixos, finalmente faz o status da coleção, para que eu seja enviado todas as manhãs com o status. Você precisa ficar de olho nele regularmente para perceber quando seu backup não está funcionando.

Requer um espaço temporário local significativo para manter as assinaturas locais, portanto, configure o diretório temporário com cuidado. Isso faz backups / mnt, excluindo vários diretórios dentro de / mnt. Isso é bom para fazer backup de dados, pois as partições do sistema usam as ferramentas de imagem ou instantâneo da amazon.

Script PHP:

# Duplicity Backups

$exclude  = "--exclude /mnt/ephemeral ".
            "--exclude /mnt/logs ".
            "--exclude /mnt/service ".
            "--exclude /mnt/mail ".
            "--exclude /mnt/mysql ";

$key = "PASSPHRASE=securegpgpassphrase";

$tmp = "/mnt/mytempdir";

system("mkdir -p $tmp");

# Amazon

$aws = "AWS_ACCESS_KEY_ID=xxxxxx ".
       "AWS_SECRET_ACCESS_KEY=xxxxxx ";

$ops = "-v5 --tempdir=$tmp --archive-dir=$tmp --allow-source-mismatch --s3-european-buckets --s3-use-new-style --s3-use-rrs";
$target = " s3://s3-eu-west-1.amazonaws.com/mybucket";

# Clean + Backup

system("$key $aws /usr/bin/duplicity $ops --full-if-older-than 2M $exclude /mnt $target");
system("$key $aws /usr/bin/duplicity $ops remove-older-than 6M --force $target");
system("$key $aws /usr/bin/duplicity $ops cleanup --force --extra-clean $target");
system("$key $aws /usr/bin/duplicity $ops collection-status $target")
Jack
fonte
1
ativar o controle de versão para o bucket s3, e ele manterá cópias antigas
mcmillab
3

O S3 é um sistema de armazenamento de objetos de uso geral que fornece flexibilidade suficiente para você projetar como deseja usá-lo.

Não tenho certeza da sua pergunta sobre os problemas com o rsync (exceto a indexação) ou com a ferramenta 'de terceiros' que você encontrou.

Se você tiver um grande conjunto de arquivos bem estruturado, poderá executar várias sincronizações s3 nas suas subpastas.

O pessoal legal da Amazon também permite que você importe / exporte do seu disco rígido portátil para transferência de arquivos grandes para S3 ou EBS - http://aws.amazon.com/importexport/, que você pode usar para o primeiro upload.

Consulte as práticas recomendadas do Amazon s3 aqui - http://aws.amazon.com/articles/1904

Quanto a ferramentas diferentes, experimente-as e veja o que funciona melhor para você. Em relação aos preços, há preços redundantes reduzidos se atenderem às suas necessidades - http://aws.amazon.com/s3/pricing/

Recomendação geral - tenha uma CPU multicore rápida e um bom canal de rede.

UPDATE: Menção sobre soma de verificação no S3

Em relação ao S3, os dados são armazenados em pares de valores-chave e não há conceito de diretórios. O S3sync verifica a soma de verificação (o S3 tem um mecanismo para enviar a soma de verificação como um cabeçalho para verificação - cabeçalho Content-MD5). As práticas recomendadas vinculam a parte de Integridade de Dados a detalhes. O S3 permite enviar / verificar e recuperar somas de verificação. Muitas pessoas fazem backups incrementais com duplicidade. Mesmo que não haja rsync em execução no S3, você pode fazer somas de verificação como mencionei aqui.

O rsync é uma ferramenta comprovada e a maioria das ferramentas modernas usa o mesmo algoritmo ou biblioteca rsync ou chama o rsync externamente.

Chida
fonte
1
Não vejo como isso responde à pergunta. Eu estava perguntando como a duplicidade consegue fazer o que o rsync faz sem um daemon do outro lado. Ele não tem nem a capacidade de obter uma soma de verificação, ou talvez sim, mas como atualizaria os arquivos de forma incremental?
Jaimie Sirovich
ESTÁ BEM. Então você está dizendo que o Duplicity usa esse hash do S3, mas também afirma trabalhar com FTP. O FTP não possui mecanismo de hash. Costumo errar no lado seguro e usar as ferramentas 'comprovadas'. O Rsync está comprovado sim, mas não fará backups s3 sem o serviço adicional s3 s3rsync. Estou com um pouco de medo da duplicidade, mas ele tem um apelo mais amplo ao protocolo, se eu puder obter algum nível de funcionalidade semelhante ao rsync com o s3, sem o referido serviço acessório. Eu simplesmente não entendo o quão bem ele funciona (e possivelmente de maneira diferente com vários protocolos). Como diabos ele faz a sincronização de FTP? :)
Jaimie Sirovich
@JaimieSirovich Teste e veja. Se você tivesse, sabia que o Duplicity cria arquivos "manifestos" em menos tempo do que o necessário para digitar todos esses comentários sobre o que poderia estar fazendo.
ceejayoz
3

Como alternativa, você pode usar o minio client aka mc . O comando 'mc mirror' fará o trabalho.

$ mc mirror share/sharegain/ s3/MyS3Bucket/share/sharegain 
  • mc: cliente minio
  • share / sharegain: diretório local
  • s3: Alias ​​para https://s3.amazonaws.com
  • MyS3Bucket: Meu balde S3 remoto
  • share / sharegain: Meu objeto no s3

Você pode escrever um script simples como cronjob, que manterá a sincronização em intervalos periódicos.

Espero que ajude.

Atul
fonte
Agora também há uma -wbandeira, que será usada fsnotifypara observar as alterações. Ele pode ser facilmente configurado como um serviço do sistema ou similar.
Alkar
2

Não tenho certeza se o verdadeiro rsync é um bom ajuste para a Amazon.

Pelo que entendi, o algoritmo rsync padrão significa que o cliente calcula hashes para cada bloco de um arquivo e o servidor calcula hashes para sua cópia e envia esses hashes ao cliente, o que significa que o cliente pode determinar quais blocos foram alterados e precisam ser carregados.

Isso causa dois problemas para a Amazon: muitos hashes precisam ser enviados pela Internet e também é preciso poder de processamento para calcular todos os hashes que aumentariam os custos da Amazon - e é provavelmente por isso que eles deixam para fornecedores terceirizados que podem cobrar extra por esse recurso.

Quanto aos clones, eles obviamente estão armazenando os hashes em algum lugar e esse lugar pode variar dependendo do clone. Seria possível para eles armazenar os hashes como um objeto separado por arquivo na Amazon ou como um banco de dados armazenado na Amazon, ou eles podem armazená-los local e remotamente.

Existem vantagens e desvantagens de fazê-lo de qualquer maneira. Se os hashes forem armazenados remotamente em arquivos individuais, pode ser caro recuperá-los continuamente. Se os hashes forem armazenados em um banco de dados remotamente, esse banco de dados poderá se tornar grande e pode ser caro recuperar e atualizá-los continuamente. Se os hashes são armazenados localmente, isso ajuda a reduzir custos, mas introduz outras complicações e problemas.

(É claro que a Amazon possui outros serviços, portanto, seria possível manter um banco de dados no Amazon DB)

Como exemplo, experimentei um clone do rsync mais antigo, há muitos anos. Isso não foi escrito para levar em conta a estrutura de preços da Amazon e estava emitindo muitos http para recuperar o hash de cada bloco e, uma vez que a Amazon cobra por cada get, isso significava que, enquanto a parte do armazenamento da minha conta caía acentuadamente, a parte da transferência balão.

O que eu perco usando duplicidade + s3 em vez de rsync + s3rsync + s3?

Você perde o fato de que, com o rsync, você sabe que está comparando arquivos de origem com seus arquivos de backup. Com duplicidade e outros clones, você está comparando seus arquivos de origem com um hash que foi obtido quando o backup foi realizado. Por exemplo, pode ser possível acessar o S3 diretamente e substituir um de seus arquivos sem recalcular o hash ou atualizar o banco de dados de hash.

sgmoore
fonte
0

Depois de comparar várias opções mencionadas neste tópico, decidi usar o S3fs. Ele permite que você monte o S3 como um sistema de arquivos local. Você pode prosseguir e usar o rsync da maneira que você já conhece.

Este é um bom tutorial para começar: Amazon S3 with Rsync

O autor usou anteriormente o s3sync mencionado, mas depois mudou para a opção com S3Fs. Gosto porque também tenho outras pastas de backup montadas localmente via SSHFS.

Hendrik
fonte
12
Perigo, Will Robinson! Isso é muito caro, pois você não obtém nenhum benefício da comunicação de baixa largura de banda do rsync --- o s3fs acaba lendo (e depois escrevendo, se mudar) o arquivo inteiro, o que significa que a Amazon cobrará duas vezes. Em vez disso, considere usar uma instância do EC2 e usar o rsync remotamente para isso via ssh. As transferências para o S3 de uma instância do EC2 são gratuitas; portanto, tudo o que você paga é pela comunicação de baixa largura de banda do rsync da sua máquina local para a instância do EC2. A execução de uma micro instância EC2 sob demanda praticamente não custa nada.
David Dada
2
Este! Há um monte de maus conselhos lá fora, para aqueles que não entendem rsync e S3 ...
Mark
A única desvantagem disso é que agora você tem uma micro instância para gerenciar. Trivial se você souber como, mas uma barreira para a entrada de muitos. No lado positivo, o armazenamento EBS conectado ao EC2 é cerca de metade do preço por byte do S3.
Dan Pritts
@DavidGiven E se eu escrevesse diretamente para os s3fs montados sem usar o rysnc e depois gerisse a longevidade através do ciclo de vida?
Forethinker