Como alguém pode usar eficientemente o S3 para fazer backup de arquivos incrementalmente?

39

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

Existem algumas abordagens.

s3rsync (mas isso apenas liga o rsync ao s3). Direto. Não tenho certeza se quero depender de algo de terceiros. Eu gostaria que o s3 apenas suportasse o rsync.

Existem também alguns clones de rsync, como a duplicidade, que afirmam suportar o s3 sem o referido bolt-on. Mas como isso pode acontecer? Eles estão mantendo um arquivo de índice localmente? Não tenho certeza de como isso pode ser tão eficiente.

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

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

    
por Jaimie Sirovich 18.08.2012 / 23:13

7 respostas

35

Como esta pergunta foi respondida pela última vez, há uma nova ferramenta de linha de comando da AWS, aws .

Ele pode sincronizar , semelhante ao rsync, entre armazenamento local e 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
    
por 02.12.2014 / 15:38
16

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

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

O --skip-existing significa que ele não tenta comparar os arquivos existentes. Se já houver um arquivo com esse nome, ele irá pular rapidamente e seguir em frente. Existe também a opção --delete-removed que irá remover os arquivos que não existem localmente, mas eu quero continuar com o S3 mesmo que eu tenha limpado localmente para não usar isso.

    
por 28.12.2012 / 14:14
4

Não quero dizer a ninguém o que fazer, mas posso acenar uma bandeira por duplicidade? ou outra solução de backup incremental. Sincronizar é tudo muito bem, mas se você backup noite, o que acontece se você não notar o problema por dois dias? Resposta: É muito tarde, seus arquivos locais e seu backup são um espelho um do outro e nem os dados que você precisa. Você realmente deve considerar backups incrementais ou instantâneos para poder recuperar em um determinado momento e, para fazer isso com eficiência, você precisa de backups incrementais. E se perder seus dados é um fim do cenário mundial, então mantenha cópias em provedores diferentes, como você nunca sabe, então pode se perder, hackeado, quem sabe.

Eu uso duplicidade e s3, mas é muito intensivo. Mas faz backups incrementais. Em uma emergência quando você deseja restaurar um diretório ou um arquivo específico, como na última quarta-feira ou 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 faz full a cada x meses, caso contrário incremental e exclui mais do que x meses para manter os totais de armazenamento s3 inativos, finalmente faço o status da coleta para ser enviado todas as manhãs com o status. Você precisa ficar de olho nele regularmente para perceber quando o backup não está funcionando.

Requer espaço temporário local significativo para manter as assinaturas locais, portanto, configure o diretório temporário com cuidado. Este backups / mnt, excluindo vários dirs dentro de / mnt. Isso é bom para fazer o backup de dados, pois as partições do sistema usam ferramentas de captura de imagem ou de captura instantânea 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")
    
por 07.07.2015 / 21:59
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 (além da indexação) ou problemas com a ferramenta "terceiros".

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

O pessoal da Amazon também permite que você faça uma importação / exportação do seu disco rígido portátil para transferência de arquivos grandes para o S3 ou EBS - link que você pode usar para o primeiro upload.

Veja as melhores práticas da Amazon s3 aqui - link

No que diz respeito às ferramentas diferentes, experimente-as e veja o que funciona melhor para você. Em relação aos preços, os preços de redundância reduzidos são adequados às suas necessidades - link

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

UPDATE: Mencione sobre checksum no S3

Em relação ao S3 armazena dados em pares de valores-chave e não há nenhum 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 melhores práticas vinculam parte da Integridade de Dados a ele em detalhes. O S3 permite enviar / verificar e recuperar somas de verificação. Há muitas pessoas fazendo 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.

    
por 19.08.2012 / 06:06
2

Não tenho certeza se o rsync verdadeiro é adequado 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 para o cliente, o que significa que o cliente pode determinar quais blocos foram alterados e precisam fazendo o upload.

Isso causa dois problemas para a Amazon, uma vez que muitos hashes têm que ser enviados pela internet e também é preciso ter poder de processamento para calcular todos os hashes que aumentariam os custos da Amazon - o que provavelmente o deixa para terceiros. provedores que podem cobrar extra por esse recurso.

Quanto aos clones, eles estão obviamente armazenando os hashes em algum lugar e o 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 se fazer isso de qualquer forma. Se os hashes forem armazenados remotamente em arquivos individuais, pode ser caro recuperá-los continuamente. Se os hashes são armazenados em um banco de dados remotamente, esse banco de dados pode se tornar grande e pode ser caro recuperá-los e atualizá-los continuamente. Se os hashes são armazenados localmente, isso ajuda a reduzir custos, mas apresenta outras complicações e problemas.

(Claro que a Amazon tem outros serviços, então seria possível manter um banco de dados no Amazon DB)

Como exemplo, experimentei um clone rsync 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 desde que a Amazon cobrava por cada get, isso significava que enquanto a parte de armazenamento da minha conta caía drasticamente, a parte de transferência com balão.

What do I lose by using duplicity + s3 instead of rsync + s3rsync + s3?

Você perde o fato de que, com o rsync, você sabe que está comparando os 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 recomputar o hash ou atualizar o banco de dados de hash.

    
por 28.12.2012 / 18:50
2

Você pode, alternativamente, usar o minio client, também conhecido como mc . O comando 'mc mirror' fará o trabalho.

$ mc mirror share/sharegain/ s3/MyS3Bucket/share/sharegain 
  • mc: minio client
  • share / sharegain: diretório local
  • s3: alias para o link
  • MyS3Bucket: Meu bucket S3 remoto
  • share / sharegain: meu objeto em s3

Você pode escrever um script simples como cronjob, que manterá uma sincronização no intervalo periódico.

Espero que ajude.

    
por 08.01.2016 / 13:47
0

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

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

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

    
por 26.09.2013 / 10:37