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?
Respostas:
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:
Se o ambiente python do seu sistema estiver configurado corretamente, você poderá instalar o cliente da AWS usando
pip
:fonte
rsync
e levou uma média de 1 segundo, com apenas as alterações ocorrendo na minha conexão lenta.aws s3 sync
por outro lado, demorou cerca de 5 minutos, transferindo novamente cada arquivo.A ferramenta s3cmd tem uma ótima
sync
opção. Eu o uso para sincronizar backups locais, usando algo como:O
--skip-existing
meio 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-removed
opçã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.fonte
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:
fonte
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.
fonte
Como alternativa, você pode usar o minio client aka mc . O comando 'mc mirror' fará o trabalho.
Você pode escrever um script simples como cronjob, que manterá a sincronização em intervalos periódicos.
Espero que ajude.
fonte
-w
bandeira, que será usadafsnotify
para observar as alterações. Ele pode ser facilmente configurado como um serviço do sistema ou similar.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.
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.
fonte
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.
fonte