web-dev-qa-db-fra.com

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

Je comprends comment rsync fonctionne à un niveau élevé, mais il y a 2 côtés. Avec S3, il n'y a pas de démon à proprement parler - bien sûr, mais c'est simplement HTTP.

Il semble y avoir quelques approches.

s3rsync (mais cela ne fait que boulonner rsync à s3). Simple. Je ne suis pas sûr de vouloir dépendre de quelque chose de tiers. Je souhaite que s3 supporte juste rsync.

Il existe également des "clones" rsync comme la duplicité qui prétendent prendre en charge s3 sans ledit boulon. Mais comment peut-il faire cela? Gardent-ils un fichier d'index localement? Je ne sais pas comment cela peut être aussi efficace.

Je veux évidemment utiliser s3 parce qu'il est bon marché et fiable, mais il y a des choses pour lesquelles rsync est l'outil, comme la sauvegarde d'un répertoire géant d'images.

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

42
Jaimie Sirovich

Depuis la dernière réponse à cette question, il existe un nouvel outil de ligne de commande AWS, aws .

Il peut sync , semblable à 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
39
Dan Pritts

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

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

Le --skip-existing signifie qu'il n'essaie pas de vérifier la somme des fichiers existants. S'il existe déjà un fichier portant ce nom, il le sautera rapidement et continuera. Il y a aussi --delete-removed option qui supprimera les fichiers qui n'existent pas localement, mais je veux conserver S3 même ceux que j'ai nettoyés localement, donc je ne les utilise pas.

16
Nic Cottrell

Vous ne voulez dire à personne quoi faire, mais puis-je agiter un drapeau pour la duplicité? ou toute autre solution de sauvegarde incrémentielle. La synchronisation est très bien, 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 l'un de l'autre et n'ont pas non plus les données dont vous avez besoin. Vous devriez vraiment envisager des sauvegardes incrémentielles ou des instantanés afin de pouvoir récupérer à un moment particulier et pour le faire efficacement, vous avez besoin de sauvegardes incrémentielles. Et si la perte de vos données est une fin du monde, conservez des copies chez différents fournisseurs comme vous ne le savez jamais, alors vous pourriez vous perdre, pirater qui sait.

J'utilise la duplicité et le s3, c'est bien, mais c'est un processeur 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 dernier ou en janvier dernier, sans restaurer les autres fichiers sur la même partition, vous avez besoin de sauvegardes incrémentielles et d'un outil où vous pouvez demander uniquement les fichiers dont vous avez besoin.

J'ai un cron, qui se remplit tous les x mois, sinon incrémentiel et supprime plus de x mois pour garder les totaux de stockage s3 bas, fait enfin le statut de la collection, donc je suis envoyé chaque matin avec le statut. Vous devez le surveiller régulièrement pour que vous remarquiez quand votre sauvegarde ne fonctionne pas.

Il nécessite un espace temporaire local important pour conserver les signatures locales, alors configurez soigneusement le répertoire temp. Cette sauvegarde/mnt, à l'exclusion de divers répertoires dans/mnt. C'est bon pour la sauvegarde des données, pour les partitions système, utilisez des outils de création d'image ou d'instantané 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")
5
Jack

Vous pouvez également utiliser le client minio aka mc L'utilisation de la commande 'mc mirror' fera le travail.

$ 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 compartiment S3 distant
  • share/sharegain: Mon objet sur s3

Vous pouvez écrire un script simple en tant que cronjob qui gardera une synchronisation à intervalle périodique.

J'espère que cela aide.

3
Atul

S3 est un système de stockage d'objets à usage général qui vous offre suffisamment de flexibilité pour concevoir la façon dont vous souhaitez l'utiliser.

Je ne suis pas sûr de votre question les problèmes avec rsync (autre que l'indexation) ou les problèmes avec l'outil "tiers" que vous avez rencontrés.

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'effectuer une importation/exportation depuis votre disque dur portable pour le transfert de gros fichiers vers S3 ou EBS - http://aws.Amazon.com/importexport/ que vous pouvez utiliser pour le premier téléchargement.

Voir les meilleures pratiques d'Amazon s3 ici - http://aws.Amazon.com/articles/1904

En ce qui concerne les différents outils, essayez-les et voyez ce qui vous convient le mieux. En ce qui concerne les prix, il y a des prix de redondance réduits si cela convient à vos besoins - http://aws.Amazon.com/s3/pricing/

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

MISE À JOUR: Mention sur la somme de contrôle sur S3

En ce qui concerne S3 stocke les données dans des paires de valeurs clés et il n'y a pas de concept de répertoires. S3sync vérifie la somme de contrôle (S3 a un mécanisme pour envoyer la somme de contrôle en tant qu'en-tête pour vérification - en-tête Content-MD5). Les meilleures pratiques lient la partie intégrité des données en détail. 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 en cours d'exécution sur S3, vous pouvez faire des sommes de contrôle comme je l'ai mentionné 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.

3
Chida

Je ne suis pas sûr que true rsync convienne à Amazon.

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

Cela pose deux problèmes à Amazon en ce sens que de nombreux hachages doivent être envoyés sur Internet et qu'il faut également de la puissance de traitement pour calculer tous ces hachages, ce qui augmenterait les coûts d'Amazon - c'est probablement pourquoi ils laissent le soin à des fournisseurs tiers qui peuvent frais supplémentaires pour cette fonctionnalité.

Quant aux clones, ils stockent évidemment les hachages quelque part et le quelque part peut varier selon le clone. Il leur serait possible de stocker les hachages en tant qu'objet distinct par fichier sur Amazon ou en tant que base de données stockée sur Amazon ou ils peuvent les stocker localement et à distance.

Il y a des avantages et des inconvénients à le faire de toute façon. 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 récupérer et de les mettre à jour en permanence. Si les hachages sont stockés localement, cela permet de réduire les coûts, mais introduit d'autres complications et problèmes.

(Bien sûr, Amazon a d'autres services, il serait donc possible de conserver une base de données dans Amazon DB)

Par exemple, j'ai essayé un des premiers clones rsync il y a plusieurs années. Cela n'a pas été écrit pour tenir compte de la structure de prix d'Amazon et émettait beaucoup de http obtient pour récupérer le hachage de chaque bloc et puisque Amazon facture pour chaque get, cela signifiait que bien que la partie stockage de ma facture ait fortement chuté, la partie transfert monta 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 des 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é pris 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.

2
sgmoore

Après avoir comparé plusieurs options mentionnées dans ce fil, j'ai décidé d'opter pour 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à.

C'est un bon tutoriel pour commencer: Amazon S3 avec Rsync

L'auteur a précédemment utilisé le s3sync mentionné, mais est ensuite passé à l'option avec S3Fs. Je l'aime parce que j'ai également d'autres dossiers de sauvegarde montés localement via SSHFS.

0
Hendrik