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


Ich verstehe, wie rsync auf einer hohen Ebene funktioniert, aber es gibt 2 Seiten. Mit S3 gibt es keinen Dämon, von dem zu sprechen ist - nun ja, aber es ist im Grunde nur HTTP.

Es scheint ein paar Ansätze zu geben.

s3rsync (aber dies rastet nur auf rsync zu s3). Einfach. Ich bin mir nicht sicher, ob ich mich auf etwas Dritter verlassen möchte. Ich wünschte s3 unterstützt nur rsync.

Es gibt auch einige rsync "Klone" wie Duplizität, die behaupten, s3 ohne besagten 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 offensichtlich 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.

Was sind die Optionen hier? Was verliere ich durch die Verwendung von Duplizität + s3 anstelle von rsync + s3rsync + s3?


39
2017-08-18 23:13


Ursprung


S3 ist billig? Das ist neu für mich. Zuverlässig? Sicher, aber nicht billig. - EEAA
Nun, s3 ist $ 0,13 / g oder weniger, da Sie mehr speichern oder weniger Redundanz haben wollen. Eine schnelle Suche zeigt evbackup.de für Rsync-Speicher. Viel teurer. Was ist billiger und hat ein gewisses Maß an Redundanz? - Jaimie Sirovich


Antworten:


Da diese Frage zuletzt beantwortet wurde, gibt es ein neues AWS-Befehlszeilen-Tool, aws.

Es kann synchronisieren, rsync-like, zwischen lokalem Speicher und s3. Beispielverwendung:

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

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

pip install awscli

35
2017-12-02 15:38



Nach meiner Erfahrung lädt dies alles hoch, nicht nur ein Delta von Änderungen. Zum Beispiel habe ich eine statische Site auf einen Dev-Server mit verschoben rsync, und es dauerte durchschnittlich 1 Sekunde, wobei nur die Änderungen über meine langsame Verbindung hinausgingen. aws s3 sync auf der anderen Seite dauerte etwa 5 Minuten, um jede Datei neu zu übertragen. - ryebread
Ich glaube Ihnen, 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 modifizierte Zeit der lokalen Datei ist neuer als die Die letzte modifizierte Zeit des s3-Objekts oder die lokale Datei existiert nicht unter dem angegebenen Bucket und Präfix. " Stellen Sie sicher, dass Sie die neueste Version von aws-cli haben - wenn Sie dies reproduzieren können, melden Sie einen Fehler auf github. Sie reagierten, als ich vor einiger Zeit einen Bug ablegte. - Dan Pritts
Der Befehl sollte lauten: aws s3 sync / some / local / dir / s3: // mybucket - Carlo S
Carlos, ich bin mir nicht sicher, was dein Standpunkt ist. Wenn Sie meinen, dass mein Beispielbefehl falsch ist, dann haben wir beide recht. Die s3-Synchronisierung kann in beide Richtungen funktionieren. - Dan Pritts


Das s3cmd Werkzeug hat eine tolle Sache sync Möglichkeit. Ich benutze es, um lokale Backups zu synchronisieren.

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

Das --skip-existing bedeutet, es wird nicht versucht, die vorhandenen Dateien zu vergleichen. Wenn es bereits eine Datei mit diesem Namen gibt, wird sie einfach übersprungen und weiter gemacht. Es gibt auch --delete-removed Option, die Dateien entfernt, die lokal nicht vorhanden sind, aber ich möchte S3 beibehalten, auch solche, die ich lokal bereinigt habe, also benutze ich das nicht.


16
2017-12-28 14:14





Ich möchte niemandem sagen, was ich tun soll, aber darf ich eine Flagge wegen Duplizität winken? oder andere inkrementelle Backup-Lösung. Die Synchronisierung ist sehr gut, aber wenn Sie nachts Backups durchführen, was passiert, wenn Sie das Problem zwei Tage lang nicht bemerken? Antwort: Es ist zu spät, dass Ihre lokalen Dateien und Ihr Backup ein Spiegelbild sind und auch nicht die Daten haben, die Sie benötigen. Sie sollten wirklich inkrementelle Backups oder Snapshots in Erwägung ziehen, damit Sie zu einem bestimmten Zeitpunkt wiederherstellen können. Dazu benötigen Sie inkrementelle Backups. Und wenn der Verlust Ihrer Daten ein Ende der Welt-Szenario ist, dann halten Sie Kopien bei verschiedenen Anbietern, wie Sie nie wissen, dann könnte verloren gehen, gehackt wer weiß.

Ich benutze Duplizität und s3, es ist in Ordnung, aber ist CPU-intensiv. Aber es macht inkrementelle Backups. Im Notfall, wenn Sie ein Verzeichnis oder eine bestimmte Datei wiederherstellen möchten, wie es letzten Mittwoch oder letzten Januar war, ohne die anderen Dateien auf der gleichen Partition wiederherzustellen, benötigen Sie inkrementelle Backups und ein Tool, mit dem Sie nur die benötigten Dateien anfordern können.

Ich habe einen Cron, der alle x Monate voll ist, ansonsten inkrementell und löscht älter als x Monate, um den s3-Speicher auf Null zu halten, macht schließlich den Inkassostatus, so dass ich jeden Morgen mit dem Status verschickt werde. Sie müssen es regelmäßig im Auge behalten, damit Sie feststellen, wenn Ihr Backup nicht funktioniert.

Es erfordert einen beträchtlichen lokalen temporären Speicherplatz, um die lokalen Signaturen zu behalten, um das temporäre Verzeichnis sorgfältig einzurichten. Diese backups / mnt, mit Ausnahme verschiedener Dirs innerhalb / mnt. Dies ist gut für das Sichern von Daten geeignet, da Systempartitionen Amazon-Imaging- oder Snapshot-Tools verwenden.

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

4
2017-07-07 21:59





S3 ist ein universelles Objektspeichersystem, das genügend Flexibilität bietet, um die Art und Weise zu entwerfen, wie Sie es verwenden möchten.

Ich bin nicht sicher von Ihrer Frage die Probleme mit rsync (andere als Indexierung) oder Probleme mit "3rd Party" Tool, die Sie kennengelernt haben.

Wenn Sie große Dateienmengen gut strukturiert haben, können Sie mehrere s3-Synchronisierungen in Ihren Unterordnern ausführen.

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

Sehen Sie sich hier die Best Practices von Amazon s3 an - http://aws.amazon.com/articles/1904

Soweit verschiedene Tools, versuchen Sie sie und sehen Sie, was am besten für Sie funktioniert. In Bezug auf die Preisgestaltung gibt es reduzierte Preisreduktion, wenn es Ihren Bedürfnissen entspricht - http://aws.amazon.com/s3/pricing/

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

UPDATE: Erwähnen Sie das Checksummen in S3

Bezüglich S3 werden Daten in Schlüsselwertpaaren gespeichert und es gibt kein Konzept von Verzeichnissen. S3sync überprüft die Prüfsumme (S3 verfügt über einen Mechanismus zum Senden der Prüfsumme als Header für die Verifizierung - Content-MD5-Header). Die Best Practices Link Data Integrity Teil davon hat es im Detail. Mit S3 können Sie Prüfsummen senden / überprüfen und abrufen. Es gibt viele Leute, die inkrementelle Backups mit Duplizität machen. Obwohl auf S3 kein rsync ausgeführt wird, können Sie Prüfsummen wie hier erwähnt ausführen.

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


3
2017-08-19 06:06



Ich sehe nicht, wie das die Frage beantwortet. Ich fragte, wie Duplizität es schafft, was rsync ohne einen Daemon auf der anderen Seite macht. Es ist nicht in der Lage, sogar eine Prüfsumme zu bekommen, oder vielleicht auch, aber wie würde es dann die Dateien schrittweise aktualisieren? - Jaimie Sirovich
OK. Du sagst also, dass Duplicity diesen Hash von S3 verwendet, aber auch behauptet, dass er über FTP funktioniert. FTP hat keinen Hash-Mechanismus. Ich tendiere dazu, mich auf der sicheren Seite zu bewegen und die "bewährten" Tools zu verwenden. Rsync ist bewiesen ja, aber es wird keine s3-Backups ohne den s3-Add-On-Service s3rsync machen. Ich habe ein wenig Angst vor Doppelzüngigkeit, aber es hat einen größeren Protokoll-Appeal, wenn ich ein gewisses Maß an rsync-ähnlicher Funktionalität mit s3 ohne besagten Zubehör-Service erreichen kann. Ich verstehe einfach nicht wie Gut es funktioniert (und möglicherweise anders mit verschiedenen Protokollen). Wie zum Teufel macht es FTP-Synchronisierung? :) - Jaimie Sirovich
@JaimieSirovich Testen Sie es und sehen Sie. Wenn Sie das täten, hätten Sie gewusst, dass Duplicity in weniger Zeit "manifeste" Dateien erstellt, als Sie alle diese Kommentare eingeben mussten könnte tun. - ceejayoz


Ich bin mir nicht sicher, ob echtes rsync für Amazon gut ist.

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 berechnet und diese Hashes an den Client sendet, was bedeutet, dass der Client bestimmen kann, welche Blöcke sich geändert haben und hochgeladen werden müssen.

Das verursacht zwei Probleme für Amazon, da viele Hashes über das Internet gesendet werden müssen, und es braucht Rechenleistung, um all diese Hashes zu berechnen, die die Kosten von Amazon erhöhen würden - wahrscheinlich deshalb, weil sie es Drittanbietern überlassen Aufpreis für diese Funktion.

Was die Klone betrifft, speichern sie offensichtlich die Hashes irgendwo und die irgendwo kann je nach Klon variieren. Sie könnten die Hashes als separates Objekt pro Datei auf Amazon oder als Datenbank auf Amazon speichern oder lokal und remote speichern.

Es gibt Vorteile und Nachteile, dies zu tun. Wenn die Hashes remote in einzelnen Dateien gespeichert werden, kann es teuer sein, sie kontinuierlich abzurufen. Wenn die Hashwerte in einer Datenbank remote gespeichert werden, kann diese Datenbank groß werden und es kann teuer sein, sie kontinuierlich abzurufen und zu aktualisieren. Wenn die Hashes lokal gespeichert werden, hilft dies, die Kosten zu senken, führt jedoch zu weiteren Komplikationen und Problemen.

(Natürlich hat Amazon andere Dienste, so dass es möglich wäre, eine Datenbank in Amazon DB zu speichern)

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 gab viele HTTP-Gets, um den Hash-Wert von jedem Block abzurufen und seit Amazon Gebühr für jeden bekommen, bedeutete es, dass, während der Speicher Teil meiner Rechnung fiel scharf, die Übertragung Teil aufgebläht.

Was verliere ich durch die Verwendung von Duplizität + s3 anstelle von rsync + s3rsync + s3?

Sie verlieren die Tatsache, dass Sie mit rsync wissen, dass Sie Quelldateien mit Ihren Sicherungsdateien vergleichen. Bei Duplikaten und anderen Klonen vergleichen Sie Ihre Quelldateien mit einem Hash, der bei der Durchführung der Sicherung erstellt wurde. Zum Beispiel kann es möglich sein, direkt auf S3 zuzugreifen und eine seiner Dateien zu ersetzen, ohne den Hash erneut zu berechnen oder die Hash-Datenbank zu aktualisieren.


2
2017-12-28 18:50





Sie können alternativ auch den minio client aka verwenden mc 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
  • Teilen / Teilen: Mein Objekt auf s3

Sie können ein einfaches Skript als Cronjob schreiben, das in regelmäßigen Abständen synchronisiert.

Ich hoffe es hilft.


2
2018-01-08 13:47



Es gibt auch ein -w Fahne jetzt, die verwenden wird fsnotify auf Veränderungen achten. Es kann leicht als Systemdienst oder ähnliches eingerichtet werden. - alkar


Nach dem Vergleich mehrerer Optionen in diesem Thread entschied ich mich für S3fs zu gehen. Es ermöglicht Ihnen, S3 als lokales Dateisystem zu mounten. Sie können dann fortfahren und rsync so verwenden, wie Sie es bereits kennen.

Dies ist ein gutes Tutorial, um loszulegen: Amazon S3 mit Rsync

Der Autor hat zuvor den erwähnten s3sync verwendet, ist dann aber auf die Option mit S3Fs umgestiegen. Ich mag es, weil ich auch andere Backup-Ordner lokal über SSHFS gemountet habe.


0
2017-09-26 10:37



Gefahr, Will Robinson! Das ist sehr teuer, da Sie von der rsync-Kommunikation mit geringer Bandbreite keine Vorteile bekommen --- s3fs wird die gesamte Datei lesen (und dann schreiben, wenn sie sich ändert), was bedeutet, dass Amazon Ihnen zweimal Rechnung stellt. Verwenden Sie stattdessen eine EC2-Instanz und verwenden Sie rsync über ssh fern. Übertragungen von einer EC2-Instanz an S3 sind kostenlos. Sie bezahlen also nur die Kommunikation mit rsync mit geringer Bandbreite von Ihrer lokalen Maschine zur EC2-Instanz. Das Ausführen einer EC2-Mikroinstanz auf Abruf kostet praktisch nichts. - David Given
Diese! Es gibt viele schlechte Ratschläge für diejenigen, die rsync und S3 nicht verstehen ... - Mark
Der einzige Nachteil davon ist, dass Sie jetzt eine Micro-Instanz verwalten müssen. Trivial, wenn Sie wissen, wie, aber eine Barriere für den Eintritt für viele. Auf der positiven Seite, EC2-Attached EBS-Speicher ist etwa die Hälfte des Preises pro Byte von S3. - Dan Pritts
@DavidGiven Was ist, wenn ich direkt auf die gemountete s3fs geschrieben habe, ohne rysnc zu verwenden, und dann die Langlebigkeit über den Lebenszyklus verwaltet habe? - Forethinker