48 votes

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

Je comprends comment fonctionne rsync de manière générale, mais il y a 2 côtés. Avec S3, il n'y a pas de démon à proprement parler - enfin il y en a, mais c'est essentiellement juste HTTP.

Il semble qu'il y ait quelques approches.

s3rsync (mais cela ajoute simplement rsync à s3). Simple. Je ne suis pas sûr de vouloir dépendre d'un tiers. J'aimerais que s3 supporte simplement rsync.

Il y a aussi des 'clones' de rsync comme duplicity qui prétendent prendre en charge s3 sans cet ajout. Mais comment est-ce possible ? Gardent-ils un fichier d'index en local ? Je ne suis pas sûr que cela puisse être aussi efficace.

Je veux évidemment utiliser s3 car c'est bon marché et fiable, mais il y a des tâches pour lesquelles rsync est l'outil idéal, comme sauvegarder 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 ?

4 votes

S3 est bon marché ? C'est une nouvelle pour moi. Fiable ? Sans aucun doute, mais pas bon marché.

5 votes

Eh bien, s3 coûte 0,13 $/Go ou moins à mesure que vous stockez plus ou souhaitez moins de redondance. Une rapide recherche révèle evbackup.com pour le stockage rsync. Bien plus cher. Qu'est-ce qui est moins cher et a un certain niveau de redondance?

0 votes

Si je devais concevoir rsync, il prendrait en charge les plugins afin que de nouveaux protocoles (par exemple s3://) puissent être ajoutés. Cependant, à l'heure actuelle, rsync ne prend pas en charge cela, donc je ne pense pas que rsync puisse être utilisé directement pour sauvegarder vers S3.

45voto

Dan Pritts Points 3091

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

Il peut synchroniser, de manière similaire à 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 en utilisant pip :

pip install awscli

2 votes

Dans mon expérience, cela télécharge tout, pas seulement un delta des changements. Par exemple, j'étais en train de pousser un site statique vers un serveur de développement avec rsync, et cela prenait en moyenne 1 seconde, avec seulement les changements envoyés sur ma connexion lente. aws s3 sync, en revanche, a pris environ 5 minutes, retransférant chaque fichier.

3 votes

Je te crois quand tu dis que ça ne fonctionne pas, mais les documents disent "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, l'heure de la dernière modification du fichier local est plus récente que l'heure de la dernière modification de l'objet s3, ou si le fichier local n'existe pas dans le bucket et le préfixe spécifiés." Assurez-vous d'avoir la dernière version de aws-cli - si vous pouvez reproduire cela, signalez un bug avec eux sur github. Ils ont été réactifs quand j'ai signalé un bug il y a quelque temps.

1 votes

La commande doit être : aws s3 sync /some/local/dir/ s3://mybucket

17voto

user1850479 Points 111

Le 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 ne tente pas de comparer le checksum des fichiers existants. Si un fichier portant ce nom existe déjà, il le sautera simplement rapidement et passera à autre chose. Il y a également l'option --delete-removed qui supprimera les fichiers n'existant pas localement, mais je veux conserver sur S3 même ceux que j'ai nettoyés localement donc je ne l'utilise pas.

7voto

Atul Points 71

Vous pouvez alternativement utiliser le client minio alias mc En utilisant la commande 'mc mirror', cela 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 bucket S3 distant
  • share/sharegain : Mon objet sur s3

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

J'espère que cela aide.

0 votes

Il y a maintenant aussi un drapeau -w, qui utilisera fsnotify pour surveiller les modifications. Il peut facilement être configuré en tant que service système ou similaire.

6voto

Jack Points 69

Ne pas vouloir dire à personne quoi faire, mais puis-je défendre la duplicite? ou une autre solution de sauvegarde incrémentielle. La synchronisation est très bien, mais si vous sauvegardez toutes les nuits, 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 aucun des deux n'a 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 précis dans le temps et pour ce faire efficacement, vous avez besoin de sauvegardes incrémentielles. Et si perdre vos données est un scénario apocalyptique alors gardez des copies chez différents fournisseurs car on ne sait jamais, elles pourraient être perdues, piratées, qui sait.

J'utilise la duplicite et s3, c'est bien mais cela consomme beaucoup de CPU. Mais il réalise des sauvegardes incrémentielles. En cas d'urgence lorsque vous souhaitez restaurer un répertoire ou un fichier particulier, tel qu'il était 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 juste les fichiers dont vous avez besoin.

J'ai un cron, qui réalise une sauvegarde complète tous les x mois, sinon incrémentielle et supprime les fichiers plus anciens que x mois pour maintenir les totaux de stockage s3 à un niveau bas, enfin il vérifie l'état de la collection afin que je reçoive un email chaque matin avec le statut. Il faut garder un œil dessus régulièrement pour remarquer quand votre sauvegarde ne fonctionne pas.

Cela nécessite un espace temporaire local significatif pour conserver les signatures locales, donc configurez soigneusement le répertoire temporaire. Cela sauvegarde /mnt, excluant divers répertoires à l'intérieur de /mnt. C'est bon pour sauvegarder des données, pour les partitions système utilisez l'imagerie Amazon ou les outils de sauvegarde instantanée.

Code PHP :

# Sauvegardes Duplicite

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

$clé = "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";
$cible = " s3://s3-eu-west-1.amazonaws.com/mybucket";

# Nettoyage + Sauvegarde

system("$clé $aws /usr/bin/duplicity $ops --full-if-older-than 2M $exclure /mnt $cible");
system("$clé $aws /usr/bin/duplicity $ops remove-older-than 6M --force $cible");
system("$clé $aws /usr/bin/duplicity $ops cleanup --force --extra-clean $cible");
system("$clé $aws /usr/bin/duplicity $ops collection-status $cible")

2 votes

Activer la versioning pour le bucket s3, puis il conservera les anciennes copies

3voto

Chida Points 2461

S3 est un système de stockage d'objets à usage général qui offre assez de flexibilité pour que vous puissiez concevoir comment vous voulez l'utiliser.

Je ne suis pas sûr des problèmes liés à rsync (autre que l'indexation) ou des problèmes avec l'outil 'tiers' auquel vous avez été confronté.

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

Les gentils amis chez Amazon vous permettent également d'effectuer une importation/exportation depuis votre disque dur portable pour un transfert de gros fichiers vers S3 ou EBS -- http://aws.amazon.com/importexport/ que vous pouvez utiliser pour le premier téléchargement.

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

En ce qui concerne les différents outils, essayez-les et voyez ce qui fonctionne le mieux pour vous. En ce qui concerne la tarification, il y a une tarification de redondance réduite si cela correspond à vos besoins -- http://aws.amazon.com/s3/pricing/

Recommandation générale -- avoir un CPU multicœur rapide et une bonne connexion réseau.

MISE À JOUR: Mention sur la vérification des sommes de contrôle sur S3

En ce qui concerne S3 stocke des données sous forme de paires clé-valeur 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). Le lien des bonnes pratiques Data Integrity en parle en détail. S3 vous permet d'envoyer/vérifier et récupérer des sommes de contrôle. Beaucoup de gens font des sauvegardes incrémentielles avec duplicity. Même s'il n'y a pas de rsync en cours d'exécution sur S3, vous pouvez effectuer 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 bibliothèque rsync ou appellent rsync de manière externe.

2 votes

Je ne vois pas comment cela répond à la question. Je demandais comment la duplicity parvient à faire ce que rsync fait sans un démon de l'autre côté. Elle n'a même pas la capacité d'obtenir un checksum, ou peut-être que si, mais alors comment mettrait-elle à jour les fichiers de manière incrémentielle ?

0 votes

OK. Donc, vous dites que Duplicity utilise ce hachage de S3, mais il prétend aussi fonctionner sur FTP. FTP n'a pas de mécanisme de hachage. J'ai tendance à jouer la sécurité et à utiliser les outils "prouvés". Rsync est en effet prouvé, mais il ne fera pas de sauvegardes s3 sans le service complémentaire s3rsync. J'ai un peu peur de Duplicity, mais il a un attrait de protocole plus large si je peux obtenir un certain niveau de fonctionnalité similaire à rsync avec s3 sans ledit service accessoire. Je ne comprends tout simplement pas à quel point bien cela fonctionne (et éventuellement de manière différente avec différents protocoles). Comment diable synchronise-t-il FTP ? :)

0 votes

@JaimieSirovich Testez-le et voyez. Si vous l'aviez fait, vous auriez su que Duplicity construit des fichiers "manifeste" en moins de temps qu'il ne vous a fallu pour taper tous ces commentaires sur ce qu'il pourrait faire.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X