Comment utiliser efficacement S3 pour sauvegarder les fichiers de manière incrémentielle?

42

Je comprends comment rsync fonctionne à haut niveau, mais il y a 2 côtés. Avec S3, il n’ya pas de démon à proprement parler, mais il s’agit essentiellement de HTTP.

Il semble y avoir quelques approches.

s3rsync (mais cela ne fait que boulonner sur rsync à s3). Simple. Pas sûr que je veuille dépendre de quelque chose de tiers. Je souhaite que s3 prenne en charge rsync.

Il existe également des «clones» rsync, comme la duplicité, qui prétendent soutenir s3 sans ce boulon. Mais comment peut-il faire cela? Est-ce qu'ils gardent un fichier d'index localement? Je ne sais pas comment cela peut être aussi efficace.

Bien sûr, je veux utiliser s3 car il est fiable et peu coûteux, mais il existe des éléments pour lesquels rsync est l'outil, comme la sauvegarde d'un répertoire d'images géant.

Quelles sont les options ici? Qu'est-ce que je perds en utilisant duplicity + s3 au lieu de rsync + s3rsync + s3?

Jaimie Sirovich
la source
4
S3 est pas cher? C'est une nouvelle pour moi. Fiable? Bien sûr, mais pas bon marché.
EEAA
5
Eh bien, s3 est à 0,13 USD / Go ou moins si vous enregistrez plus ou souhaitez moins de redondance. Une recherche rapide révèle evbackup.com pour le stockage rsync. Beaucoup plus cher. Quoi de moins cher et a un certain niveau de redondance?
Jaimie Sirovich
Si je devais concevoir rsync, cela prendrait en charge les plugins afin que de nouveaux protocoles (par exemple, s3: //) puissent être ajoutés. Cependant, pour le moment, rsync ne prend pas cela en charge, je ne pense donc pas que rsync puisse être utilisé directement pour la sauvegarde sur S3.
Edward Falk
Le problème suivant est que je ne pense pas que S3 stocke des métadonnées telles que la propriété ou les autorisations. Par conséquent, utiliser par exemple "aws s3 sync" pour effectuer des sauvegardes fonctionnera, mais ne convient probablement pas pour une sauvegarde complète d'un système de fichiers Unix, car trop de données seraient perdues lors de la restauration. Je pense aussi que les liens symboliques, les liens durs et d’autres fichiers spéciaux seraient perdus.
Edward Falk le

Réponses:

39

Étant donné que cette question a été la dernière réponse, il y a un nouvel outil de ligne de commande AWS, aws.

Il peut se synchroniser , comme rsync, entre le stockage local et s3. Exemple d'utilisation:

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

Si l'environnement python de votre système est correctement configuré, vous pouvez installer le client AWS à l'aide de pip:

pip install awscli
Dan Pritts
la source
1
D'après mon expérience, cela télécharge tout, pas un simple delta de changements. Par exemple, je poussais un site statique sur un serveur de développement avec rsync, et cela prenait en moyenne 1 seconde, avec seulement les modifications apportées via ma connexion lente. aws s3 syncPar contre, cela a pris environ 5 minutes, retransférant chaque fichier.
Ryebread
2
Je vous crois que cela ne fonctionne pas, mais la documentation indique: "Un fichier local nécessitera un téléchargement si la taille du fichier local est différente de la taille de l'objet s3, la dernière heure de modification du fichier local est plus récente que celle du fichier." l'heure de la dernière modification de l'objet s3 ou le fichier local n'existe pas sous le compartiment et le préfixe spécifiés. " Assurez-vous de disposer de la dernière version de aws-cli. Si vous pouvez le reproduire, signalez-leur un bogue sur github. Ils étaient réactifs quand j'ai déposé un bogue il y a quelque temps.
Dan Pritts
La commande doit être: aws s3 sync / some / local / dir / s3: // mybucket
Carlo S
1
Carlos, je ne suis pas sûr de ce que vous voulez dire. Si vous voulez suggérer que mon exemple de commande est faux, nous avons tous les deux raison. La synchronisation s3 peut fonctionner dans les deux sens.
Dan Pritts
En retard pour la fête, mais voici ce qui se passe: lors du téléchargement sur S3, les règles de contrôle rapide s'appliquent (téléchargement si la taille ou la date a changé). Lors du téléchargement , il n’existe pas de règle de vérification rapide et tout est téléchargé inconditionnellement.
Edward Falk
16

L' outil s3cmd a une excellente syncoption. Je l'utilise pour synchroniser des sauvegardes locales, en utilisant quelque chose comme:

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

Les --skip-existingmoyens qu'il ne cherche pas à comparer la somme de contrôle des fichiers existants. S'il existe déjà un fichier portant ce nom, il le sautera rapidement et passera à autre chose. Il existe également une --delete-removedoption permettant de supprimer les fichiers n'existant pas localement, mais je souhaite conserver les fichiers S3, même ceux que j'ai nettoyés localement, afin de ne pas les utiliser.

Nic Cottrell
la source
5

Je ne veux pas dire quoi que ce soit à faire, mais puis-je brandir un drapeau pour la duplicité? ou une autre solution de sauvegarde incrémentielle. La synchronisation est une très bonne chose, mais si vous sauvegardez tous les soirs, que se passe-t-il si vous ne remarquez pas le problème pendant deux jours? Réponse: Il est trop tard, vos fichiers locaux et votre sauvegarde sont un miroir et les données dont vous avez besoin non plus. Vous devriez vraiment envisager des sauvegardes incrémentielles ou des instantanés afin de pouvoir récupérer à un moment donné et pour le faire efficacement, vous avez besoin de sauvegardes incrémentielles. Et si la perte de vos données est un scénario de fin du monde, conservez des copies chez différents fournisseurs, comme vous ne le savez jamais, vous risqueriez de vous perdre, piraté qui sait.

J'utilise la duplicité et s3, sa amende mais cpu intensif. Mais il effectue des sauvegardes incrémentielles. En cas d'urgence, lorsque vous souhaitez restaurer un répertoire ou un fichier particulier, comme c'était le mercredi ou le mois de janvier, sans restaurer les autres fichiers sur la même partition, vous avez besoin de sauvegardes incrémentielles et d'un outil permettant de demander uniquement les fichiers dont vous avez besoin.

J'ai un cron, qui est plein tous les x mois, sinon incrémentiel et supprime les plus vieux de x mois pour conserver les totaux de stockage s3, enfin fait le statut de la collecte afin que je reçoive chaque matin le statut avec le statut. Vous devez le surveiller régulièrement pour que vous remarquiez que votre sauvegarde ne fonctionne pas.

Il faut beaucoup d’espace temporaire local pour conserver les signatures locales, donc configurez soigneusement le répertoire temporaire. Ceci sauvegarde / mnt, en excluant divers répertoires à l'intérieur de / mnt. Ceci est utile pour la sauvegarde des données. Pour les partitions système, utilisez les outils de création d'image ou de capture instantanée d'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
la source
1
activez le contrôle de version pour le seau s3, puis conservera les anciennes copies
mcmillab
3

S3 est un système de stockage d’objets à usage général qui vous offre suffisamment de souplesse pour concevoir comment vous souhaitez l’utiliser.

D'après votre question, je ne suis pas sûr que vous rencontriez des problèmes avec rsync (autres que l'indexation) ou avec un outil 'tiers' que vous avez rencontré.

Si vous avez un grand ensemble de fichiers bien structurés, vous pouvez exécuter plusieurs synchronisations s3 sur vos sous-dossiers.

Les gens sympas d’Amazon vous permettent également d’importer / exporter depuis votre disque dur portable pour un transfert de fichiers volumineux vers S3 ou EBS - http://aws.amazon.com/importexport/ que vous pouvez utiliser pour le premier téléchargement.

Consultez les meilleures pratiques Amazon s3 ici - http://aws.amazon.com/articles/1904

En ce qui concerne différents outils, essayez-les et voyez ce qui vous convient le mieux. En ce qui concerne la tarification, la redondance est réduite si cela répond à vos besoins - http://aws.amazon.com/s3/pricing/

Recommandation générale - avoir un processeur multicœur rapide et un bon réseau.

UPDATE: Mention à propos du checksum sur S3

En ce qui concerne S3, les données sont stockées dans des paires de valeurs clés et il n’existe aucun concept de répertoires. S3sync vérifie la somme de contrôle (S3 dispose d'un mécanisme pour envoyer la somme de contrôle en tant qu'en-tête à des fins de vérification - en-tête Content-MD5). Les meilleures pratiques lient une partie de l’intégrité des données. S3 vous permet d’envoyer / vérifier et de récupérer des sommes de contrôle. Il y a beaucoup de gens qui font des sauvegardes incrémentielles avec duplicité. Même s'il n'y a pas de rsync sur S3, vous pouvez faire des checksums comme je le disais ici.

rsync est un outil éprouvé et la plupart des outils modernes utilisent le même algorithme ou la même bibliothèque rsync ou appellent rsync en externe.

Chida
la source
1
Je ne vois pas comment cela répond à la question. Je demandais comment la duplicité parvient à faire ce que rsync fait sans un démon de l'autre côté. Il n'a même pas la possibilité d'obtenir une somme de contrôle, ou peut-être, mais comment alors mettre à jour progressivement les fichiers?
Jaimie Sirovich
D'ACCORD. Donc, vous dites que Duplicity utilise ce hachage de S3, mais prétend également fonctionner par FTP. FTP n'a pas de mécanisme de hachage. J'ai tendance à privilégier la sécurité et à utiliser les outils «éprouvés». Rsync est prouvé, mais il ne fera pas de sauvegardes s3 sans le service supplémentaire s3, s3rsync. J'ai un peu peur de la duplicité, mais son protocole est plus attrayant si je peux obtenir un niveau de fonctionnalité similaire à rsync avec s3 sans le service accessoire fourni. Je ne comprends pas comment bien cela fonctionne (et peut - être différemment avec différents protocoles). Comment diable fait-il la synchronisation FTP? :)
Jaimie Sirovich
@ JaimieSirovich Testez-le et voyez. Si vous l'aviez fait, vous auriez su que Duplicity créait des fichiers "manifestes" plus rapidement qu'il ne vous en avait fallu pour taper tous ces commentaires sur ce qu'il pourrait faire.
ceejayoz
3

Vous pouvez également utiliser minio client aka mc. Utiliser la commande 'mc mirror' fera l'affaire.

$ mc mirror share/sharegain/ s3/MyS3Bucket/share/sharegain 
  • mc: client minio
  • share / sharegain: répertoire local
  • s3: alias pour https://s3.amazonaws.com
  • MyS3Bucket: mon seau distant S3
  • share / sharegain: Mon objet sur s3

Vous pouvez écrire un script simple sous la forme "cronjob" qui gardera une synchronisation périodique.

J'espère que ça aide.

Atul
la source
Il y a aussi un -wdrapeau maintenant, qui sera utilisé fsnotifypour surveiller les changements. Il peut facilement être configuré en tant que service système ou similaire.
alkar
2

Je ne suis pas sûr que la vraie rsync convienne parfaitement à Amazon.

D'après ce que je comprends, l'algorithme standard rsync signifie que le client calcule les hachages pour chaque bloc d'un fichier et que le serveur calcule les hachages pour sa copie et les envoie au client, ce qui signifie que le client peut déterminer quels blocs ont été modifiés et doivent être téléchargés.

Cela pose deux problèmes à Amazon en ce sens qu’un grand nombre de hachages doivent être envoyés sur Internet et qu’il faut également une puissance de traitement pour calculer tous ces hachages qui augmenteraient les coûts d’Amazon - ce qui explique probablement pourquoi ils la confient à des fournisseurs tiers qui peuvent le faire. frais supplémentaires pour cette fonctionnalité.

Quant aux clones, ils stockent évidemment les hachages quelque part et l’emplacement peut varier en fonction du clone. Il leur serait possible de stocker les hachages sous forme d'objet distinct par fichier sur Amazon ou sous forme de base de données stockée sur Amazon, ou de les stocker localement et à distance.

Cela présente des avantages et des inconvénients. Si les hachages sont stockés à distance dans des fichiers individuels, il peut être coûteux de les récupérer en permanence. Si les hachages sont stockés à distance dans une base de données, cette base de données peut devenir volumineuse et il peut être coûteux de les extraire et de les mettre à jour en permanence. Si les hachages sont stockés localement, cela contribue à réduire les coûts, mais introduit d'autres complications et problèmes.

(Bien entendu, Amazon dispose d'autres services, il serait donc possible de conserver une base de données dans Amazon DB)

Par exemple, j'ai essayé un clone rsync précoce il y a plusieurs années. Cela n’était pas écrit pour tenir compte de la structure de prix d’Amazon et émettait beaucoup d’objets http pour récupérer le hachage de chaque bloc et, comme Amazon facturait chaque get, cela signifiait que, même si la partie stockage de ma facture était en forte baisse, la partie transfert en ballon.

Qu'est-ce que je perds en utilisant duplicity + s3 au lieu de rsync + s3rsync + s3?

Vous perdez le fait qu'avec rsync, vous savez que vous comparez les fichiers source avec vos fichiers de sauvegarde. Avec la duplicité et d’autres clones, vous comparez vos fichiers source avec un hachage qui a été utilisé lors de la sauvegarde. Par exemple, il peut être possible d'accéder directement à S3 et de remplacer l'un de ses fichiers sans recalculer le hachage ni mettre à jour la base de données de hachage.

sgmoore
la source
0

Après avoir comparé plusieurs options mentionnées dans ce fil, j'ai décidé de choisir S3fs. Il vous permet de monter S3 en tant que système de fichiers local. Vous pouvez ensuite continuer et utiliser rsync comme vous le savez déjà.

Ceci est un bon tutoriel pour commencer: Amazon S3 avec Rsync

L'auteur utilisait auparavant le s3sync mentionné, mais a ensuite opté pour l'option avec S3F. Je l’aime bien car d’autres dossiers de sauvegarde sont également montés localement via SSHFS.

Hendrik
la source
12
Danger, Will Robinson! Cela coûte très cher, car vous ne tirez aucun avantage de la communication rsync à faible bande passante. S3fs finira par lire (puis par écrire, si cela change) tout le fichier, ce qui signifie qu'Amazon vous facturera deux fois. Pensez plutôt à utiliser une instance EC2 et à utiliser rsync à distance via ssh. Les transferts vers S3 à partir d'une instance EC2 étant gratuits, vous ne payez que pour la communication à faible bande passante de rsync de votre ordinateur local vers l'instance EC2. L'exécution d'une micro-instance EC2 à la demande ne coûte pratiquement rien.
David Donné
2
Cette! Il y a beaucoup de mauvais conseils pour ceux qui ne comprennent pas rsync et S3 ...
Mark
L'inconvénient est que vous devez maintenant gérer une micro-instance. Trivial si vous savez comment faire, mais une barrière à l’entrée pour beaucoup. Sur le plan positif, le stockage EBS attaché EC2 est environ la moitié du prix par octet de S3.
Dan Pritts
@DavidGiven Et si j'écrivais directement dans le s3fs monté sans utiliser rysnc, puis si je gérais la longévité via le cycle de vie?
Pense