Wie kann man S3 effizient verwenden, um Dateien inkrementell zu sichern?


42

Ich verstehe, wie Rsync auf hoher Ebene funktioniert, aber es gibt zwei Seiten. Mit S3 gibt es keinen Dämon, von dem die Rede sein könnte - na ja, aber im Grunde ist es nur HTTP.

Es scheint einige Ansätze zu geben.

s3rsync (aber das schraubt nur rsync an s3 an). Einfach. Ich bin mir nicht sicher, ob ich auf etwas drittes angewiesen bin. Ich wünschte, S3 unterstützt nur Rsync.

Es gibt auch einige rsync "Klone" wie Duplicity, die behaupten, s3 ohne das besagte Bolt-On zu unterstützen. Aber wie kann es das tun? Halten sie eine Indexdatei lokal? Ich bin mir nicht sicher, wie das so effizient sein kann.

Ich möchte natürlich s3 verwenden, weil es billig und zuverlässig ist, aber es gibt Dinge, für die rsync das Werkzeug ist, wie das Sichern eines riesigen Verzeichnisses von Bildern.

Welche Möglichkeiten gibt es hier? Was verliere ich durch die Verwendung von duplicity + s3 anstelle von rsync + s3rsync + s3?


4
S3 ist billig? Das sind Neuigkeiten für mich. Zuverlässig? Sicher, aber nicht billig.
EEAA,

5
Nun, s3 kostet 0,13 USD / GB oder weniger, wenn Sie mehr speichern oder weniger Redundanz wünschen. Eine schnelle Suche zeigt evbackup.com für den rsync-Speicher an. Weitaus teurer. Was ist billiger und hat ein gewisses Maß an Redundanz?
Jaimie Sirovich

Wenn ich rsync entwerfen würde, würde es Plugins unterstützen, so dass neue Protokolle (zB s3: //) hinzugefügt werden könnten. Derzeit unterstützt rsync dies jedoch nicht, sodass ich nicht glaube, dass rsync direkt zum Sichern auf S3 verwendet werden kann.
Edward Falk

Das nächste Problem ist, dass S3 meiner Meinung nach keine Metadaten wie Eigentumsrechte oder Berechtigungen speichert. Daher funktioniert die Verwendung von zB "aws s3 sync" für Sicherungen, ist aber wahrscheinlich nicht für eine vollständige Sicherung eines Unix-Dateisystems geeignet, da Bei der Wiederherstellung gehen zu viele Daten verloren. Ich denke auch, dass Symlinks, Hardlinks und andere spezielle Dateien verloren gehen würden.
Edward Falk

Antworten:


39

Da diese Frage dort wurde zuletzt beantwortet, ist ein neues AWS Kommandozeilen - Tool, aws.

Es kann rsync-ähnlich zwischen lokalem Speicher und s3 synchronisieren . Anwendungsbeispiel:

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

Wenn die Python-Umgebung Ihres Systems ordnungsgemäß eingerichtet ist, können Sie den AWS-Client folgendermaßen installieren pip:

pip install awscli

1
Meiner Erfahrung nach lädt dies alles hoch, nicht nur ein Delta von Änderungen. Zum Beispiel habe ich eine statische Site mit auf einen Entwickler-Server gepusht rsyncund es dauerte durchschnittlich 1 Sekunde, wobei nur die Änderungen über meine langsame Verbindung hinausgingen. aws s3 syncAuf der anderen Seite dauerte es ungefähr 5 Minuten, bis alle Dateien erneut übertragen wurden.
Rogebread

2
Ich glaube Sie, dass es nicht funktioniert, aber die Dokumentation sagt "Eine lokale Datei muss hochgeladen werden, wenn die Größe der lokalen Datei von der Größe des s3-Objekts abweicht. Die letzte Änderung der lokalen Datei ist neuer als die letzte Änderungszeit des S3-Objekts oder die lokale Datei ist unter dem angegebenen Bucket und Präfix nicht vorhanden. " Stellen Sie sicher, dass Sie die neueste Version von aws-cli haben - wenn Sie dies reproduzieren können, melden Sie einen Fehler mit ihnen auf github. Sie reagierten, als ich vor einer Weile einen Bug reichte.
Dan Pritts

Der Befehl sollte lauten: aws s3 sync / some / local / dir / s3: // mybucket
Carlo S

1
Carlos, ich bin mir nicht sicher, was du meinst. Wenn Sie vorschlagen möchten, dass mein Beispielbefehl falsch ist, haben wir beide Recht. Die S3-Synchronisierung kann in beide Richtungen ausgeführt werden.
Dan Pritts

Verspätet zur Party, aber Folgendes passiert: Beim Hochladen auf S3 gelten die Regeln für die Schnellüberprüfung (Hochladen, wenn sich Größe oder Datum geändert haben). Beim Herunterladen gibt es keine Schnellprüfungsregeln und alles wird bedingungslos heruntergeladen.
Edward Falk

16

Das s3cmd-Tool hat eine großartige syncOption. Ich verwende es, um lokale Backups zu synchronisieren, mit etwas wie:

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

Das --skip-existingbedeutet, es wird nicht versucht, die vorhandenen Dateien mit einer Prüfsumme zu vergleichen. Wenn es bereits eine Datei mit diesem Namen gibt, überspringt sie diese schnell und fährt fort. Es gibt auch eine --delete-removedOption, mit der nicht lokal vorhandene Dateien entfernt werden, aber ich möchte S3 auch dann beibehalten, wenn ich sie lokal bereinigt habe, damit ich sie nicht verwende.


5

Ich möchte niemandem sagen, was zu tun ist, aber darf ich eine Fahne wegen Doppelspurigkeit schwenken? oder eine andere inkrementelle Sicherungslösung. Die Synchronisierung funktioniert einwandfrei. Wenn Sie jedoch nachts ein Backup durchführen, was passiert, wenn Sie das Problem zwei Tage lang nicht bemerken? Antwort: Es ist zu spät, Ihre lokalen Dateien und Ihr Backup sind ein Spiegel von einander und haben weder die Daten, die Sie benötigen. Sie sollten wirklich inkrementelle Sicherungen oder Snapshots in Betracht ziehen, damit Sie sich zu einem bestimmten Zeitpunkt erholen können. Um dies effizient zu tun, benötigen Sie inkrementelle Sicherungen. Und wenn der Verlust Ihrer Daten das Ende des Weltszenarios darstellt, bewahren Sie Kopien bei verschiedenen Anbietern auf, da Sie nie wissen, dass sie verloren gehen und gehackt werden können, wer weiß.

Ich benutze Duplicity und S3, es ist in Ordnung, aber CPU-intensiv. Es werden jedoch inkrementelle Sicherungen durchgeführt. In einem Notfall, wenn Sie ein Verzeichnis oder eine bestimmte Datei wiederherstellen möchten, wie es am vergangenen Mittwoch oder im letzten Januar war, ohne die anderen Dateien auf derselben Partition wiederherzustellen, benötigen Sie inkrementelle Sicherungen und ein Tool, mit dem Sie nur die Dateien anfordern können, die Sie benötigen.

Ich habe einen Cron, der alle x Monate voll ist, andernfalls inkrementell und löscht alle Daten, die älter als x Monate sind, um die Gesamtsumme des s3-Speichers niedrig zu halten. Sie müssen es regelmäßig im Auge behalten, damit Sie feststellen können, dass Ihr Backup nicht funktioniert.

Es ist ein erheblicher lokaler Speicherplatz erforderlich, um die lokalen Signaturen beizubehalten. Richten Sie daher das temporäre Verzeichnis sorgfältig ein. Diese Backups / mnt, ohne verschiedene Verzeichnisse innerhalb / mnt. Dies ist gut zum Sichern von Daten geeignet. Verwenden Sie für Systempartitionen Amazon Imaging- oder Snapshot-Tools.

PHP-Skript:

# 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")

1
schalte die versionierung für den s3 bucket ein, dann werden alte
kopien aufbewahrt

3

S3 ist ein universelles Objektspeichersystem, das Ihnen genügend Flexibilität bietet, um zu planen, wie Sie es verwenden möchten.

Ich bin mir aufgrund Ihrer Frage nicht sicher, auf welche Probleme mit rsync (außer der Indizierung) oder mit dem Drittanbieter-Tool Sie gestoßen sind.

Wenn Sie eine große Anzahl von Dateien haben, die gut strukturiert sind, können Sie mehrere S3-Synchronisierungen in Ihren Unterordnern ausführen.

Die netten Leute bei Amazon ermöglichen Ihnen auch den Import / Export von Ihrer tragbaren Festplatte für die Übertragung großer Dateien zu S3 oder EBS - http://aws.amazon.com/importexport/, die Sie für den ersten Upload verwenden können.

Hier finden Sie bewährte Vorgehensweisen für Amazon s3: http://aws.amazon.com/articles/1904

Probieren Sie die verschiedenen Tools aus und finden Sie heraus, welche für Sie am besten geeignet sind. In Bezug auf die Preisgestaltung gibt es reduzierte Redundanzpreise, wenn dies Ihren Anforderungen entspricht - http://aws.amazon.com/s3/pricing/

Allgemeine Empfehlung - Haben Sie eine schnelle Multicore-CPU und eine gute Netzwerk-Pipe.

UPDATE: Hinweis zur Prüfsumme in S3

In Bezug auf S3 werden Daten in Schlüsselwertpaaren gespeichert, und es gibt kein Konzept für Verzeichnisse. S3sync überprüft die Prüfsumme (S3 hat einen Mechanismus zum Senden der Prüfsumme als Header zur Überprüfung - Content-MD5-Header). Die Best Practices für die Verknüpfung von Datenintegrität enthalten detaillierte Informationen. Mit S3 können Sie Prüfsummen senden / überprüfen und abrufen. Es gibt viele Leute, die inkrementelle Backups mit Dubletten durchführen. Obwohl auf S3 kein rsync ausgeführt wird, können Sie Prüfsummen erstellen, wie hier erwähnt.

rsync ist ein bewährtes Tool und die meisten modernen Tools verwenden denselben Algorithmus oder dieselbe rsync-Bibliothek oder rufen rsync extern auf.


1
Ich verstehe nicht, wie dies die Frage beantwortet. Ich habe gefragt, wie Duplicity das schafft, was rsync ohne einen Daemon auf der anderen Seite macht. Es kann nicht einmal eine Prüfsumme abrufen, oder vielleicht auch, aber wie würden die Dateien dann schrittweise aktualisiert?
Jaimie Sirovich

OKAY. Du sagst also, dass Duplicity diesen Hash aus S3 verwendet, behauptet aber auch, über FTP zu funktionieren. FTP hat keinen Hashing-Mechanismus. Ich neige dazu, auf der sicheren Seite zu irren und die "bewährten" Werkzeuge zu verwenden. Rsync ist ja bewiesen, aber ohne den s3-Add-On-Dienst s3rsync werden keine s3-Sicherungen durchgeführt. Ich habe ein bisschen Angst vor Doppelspurigkeit, aber es hat eine größere Protokollattraktivität, wenn ich mit s3 ein gewisses Maß an rsync-ähnlicher Funktionalität ohne den genannten Zusatzservice erreichen kann. Ich verstehe nur nicht, wie gut es funktioniert (und möglicherweise anders mit verschiedenen Protokollen). Wie zum Teufel macht es die FTP-Synchronisation? :)
Jaimie Sirovich

@JaimieSirovich Testen und sehen. Wenn Sie dies getan hätten, hätten Sie gewusst, dass Duplicity "Manifest" -Dateien in kürzerer Zeit erstellt, als Sie für die Eingabe all dieser Kommentare zu den möglichen Aktionen erforderlich waren.
Ceejayoz

3

Sie können alternativ auch den Minio-Client aka mc verwenden. Mit dem Befehl 'mc mirror' erledigen Sie die Aufgabe.

$ mc mirror share/sharegain/ s3/MyS3Bucket/share/sharegain 
  • mc: minio client
  • share / sharegain: lokales Verzeichnis
  • s3: Alias ​​für https://s3.amazonaws.com
  • MyS3Bucket: Mein Remote-S3-Bucket
  • share / sharegain: Mein Objekt auf s3

Sie können ein einfaches Skript als Cronjob schreiben, das in regelmäßigen Abständen eine Synchronisierung durchführt.

Ich hoffe es hilft.


Es gibt -wjetzt auch eine Flagge, mit der fsnotifynach Änderungen gesucht werden kann. Es kann einfach als Systemdienst oder ähnliches eingerichtet werden.
Alkar

2

Ich bin nicht sicher, ob echtes Rsync gut zu Amazon passt.

Wie ich es verstehe, bedeutet der Standard-Rsync-Algorithmus, dass der Client Hashes für jeden Block einer Datei berechnet und der Server Hashes für seine Kopie sendet und diese Hashes an den Client sendet, was bedeutet, dass der Client bestimmen kann, welche Blöcke geändert wurden und hochgeladen werden müssen.

Dies führt zu zwei Problemen für Amazon, da viele Hashes über das Internet gesendet werden müssen und außerdem Rechenleistung für die Berechnung all der Hashes benötigt wird, die die Kosten für Amazon erhöhen würden. Dies ist wahrscheinlich der Grund, warum sie es Drittanbietern überlassen, die dies können Für diese Funktion wird eine zusätzliche Gebühr erhoben.

Was die Klone betrifft, speichern sie die Hashes offensichtlich irgendwo und das irgendwo kann abhängig vom Klon variieren. Es wäre für sie möglich, die Hashes als separates Objekt pro Datei bei Amazon oder als Datenbank bei Amazon zu speichern, oder sie könnten sie lokal und remote speichern.

Es gibt Vor- und Nachteile, es so oder so zu machen. Wenn die Hashes remote in einzelnen Dateien gespeichert werden, kann es kostspielig sein, sie kontinuierlich abzurufen. Wenn die Hashes remote in einer Datenbank gespeichert werden, kann diese Datenbank sehr umfangreich werden und es kann kostspielig sein, sie kontinuierlich abzurufen und zu aktualisieren. Wenn die Hashes lokal gespeichert werden, trägt dies zur Kostensenkung bei, führt jedoch zu weiteren Komplikationen und Problemen.

(Natürlich hat Amazon noch andere Dienste, daher wäre es möglich, eine Datenbank in Amazon DB zu führen.)

Als Beispiel habe ich vor vielen Jahren einen frühen rsync-Klon ausprobiert. Dies wurde nicht geschrieben, um die Preisstruktur von Amazon zu berücksichtigen, und es wurden viele http-Zugriffe ausgegeben, um den Hash jedes Blocks abzurufen. Da Amazon für jeden Zugriff eine Gebühr berechnet, bedeutete dies, dass der Speicherteil meiner Rechnung stark abfiel, der Übertragungsteil aufgebläht.

Was verliere ich durch die Verwendung von duplicity + s3 anstelle von rsync + s3rsync + s3?

Sie verlieren die Tatsache, dass Sie mit rsync wissen, dass Sie Quelldateien mit Ihren Sicherungsdateien vergleichen. Mit duplicity und anderen Klonen vergleichen Sie Ihre Quelldateien mit einem Hash, der bei der Sicherung erstellt wurde. Beispielsweise kann es möglich sein, direkt auf S3 zuzugreifen und eine seiner Dateien zu ersetzen, ohne den Hash neu zu berechnen oder die Hash-Datenbank zu aktualisieren.


0

Nachdem ich mehrere in diesem Thread erwähnte Optionen verglichen hatte, entschied ich mich für S3fs. Sie können S3 als lokales Dateisystem einbinden. Sie können dann fortfahren und rsync so verwenden, wie Sie es bereits kennen.

Dies ist ein gutes Tutorial für den Einstieg: Amazon S3 mit Rsync

Der Autor verwendete zuvor das erwähnte s3sync, wechselte dann aber zur Option mit S3Fs. Ich mag es, weil ich auch andere Sicherungsordner lokal über SSHFS bereitgestellt habe.


12
Gefahr, Will Robinson! Dies ist sehr teuer, da Sie keinen Nutzen aus der rsync-Kommunikation mit geringer Bandbreite ziehen können. S3fs liest (und schreibt dann, wenn es sich ändert) die gesamte Datei, was bedeutet, dass Amazon Ihnen zweimal eine Rechnung ausstellt. Verwenden Sie stattdessen eine EC2-Instanz und verwenden Sie dazu rsync remote über ssh. Die Übertragung von einer EC2-Instanz zu S3 ist kostenlos. Sie zahlen also nur für die Kommunikation von rsync mit niedriger Bandbreite von Ihrem lokalen Computer zur EC2-Instanz. Das Ausführen einer EC2-Mikroinstanz auf Abruf kostet praktisch nichts.
David Given

2
Diese! Es gibt viele schlechte Ratschläge für diejenigen, die rsync und S3 nicht verstehen ...
Mark

Der Nachteil dabei ist, dass Sie jetzt eine Mikroinstanz verwalten müssen. Trivial, wenn man weiß wie, aber für viele eine Eintrittsbarriere. Auf der positiven Seite ist der an EC2 angeschlossene EBS-Speicher ungefähr halb so teuer wie der Preis pro Byte von S3.
Dan Pritts

@DavidGiven Was wäre, wenn ich direkt auf das gemountete s3fs geschrieben hätte, ohne rysnc zu verwenden, und dann die Langlebigkeit über den Lebenszyklus verwaltet hätte?
Forethinker
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.