Sichern von in Amazon S3 gespeicherten Daten

16

Ich habe eine EC2-Instanz, auf der ein Webserver ausgeführt wird, auf dem die hochgeladenen Dateien der Benutzer in S3 gespeichert werden. Die Dateien werden einmal geschrieben und nie geändert, sondern gelegentlich von den Benutzern abgerufen. Wir werden wahrscheinlich ungefähr 200-500 GB Daten pro Jahr anhäufen. Wir möchten sicherstellen, dass diese Daten sicher sind, insbesondere vor versehentlichem Löschen, und möchten Dateien, die gelöscht wurden, ungeachtet des Grundes wiederherstellen können.

Ich habe die Versionierungsfunktion für S3-Buckets gelesen, kann jedoch nicht feststellen, ob die Wiederherstellung für Dateien ohne Änderungsverlauf möglich ist. Informationen zur Versionierung finden Sie in den AWS-Dokumenten hier:

http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectVersioning.html

In diesen Beispielen wird das Szenario nicht angezeigt, in dem Daten hochgeladen, jedoch nie geändert und anschließend gelöscht werden. Können in diesem Szenario gelöschte Dateien wiederhergestellt werden?

Dann dachten wir, wir könnten die S3-Dateien einfach mit Object Lifecycle Management auf Glacier sichern:

http://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html

Es scheint jedoch, dass dies bei uns nicht funktioniert, da das Dateiobjekt nicht in Glacier kopiert, sondern in Glacier verschoben wird (genauer gesagt, es handelt sich anscheinend um ein Objektattribut, das geändert wurde, aber trotzdem ...).

Es scheint also keine direkte Möglichkeit zu geben, S3-Daten zu sichern, und die Übertragung der Daten von S3 auf lokale Server kann zeitaufwändig sein und mit der Zeit erhebliche Übertragungskosten verursachen.

Schließlich dachten wir, wir würden jeden Monat einen neuen Bucket erstellen, der als monatliches vollständiges Backup dient, und die ursprünglichen Bucket-Daten an Tag 1 auf den neuen Bucket kopieren. Dann verwenden wir so etwas wie duplicity ( http://duplicity.nongnu.org/ ) Wir würden den Backup-Bucket jede Nacht synchronisieren. Am Ende des Monats haben wir den Inhalt des Backup-Buckets in den Glacier-Speicher gestellt und einen neuen Backup-Bucket mit einer neuen, aktuellen Kopie des ursprünglichen Buckets erstellt ... und wiederholen diesen Vorgang. Dies scheint zu funktionieren und die Speicher- / Übertragungskosten zu minimieren, aber ich bin mir nicht sicher, ob Duplizität die direkte Übertragung von Bucket zu Bucket zulässt, ohne dass die Daten zuerst an den steuernden Client weitergeleitet werden.

Ich schätze, hier gibt es ein paar Fragen. Erstens: Ermöglicht die S3-Versionierung die Wiederherstellung von Dateien, die nie geändert wurden? Gibt es eine Möglichkeit, Dateien von S3 nach Glacier zu "kopieren", die ich verpasst habe? Können Duplizitäten oder andere Tools Dateien direkt zwischen S3-Buckets übertragen, um Übertragungskosten zu vermeiden? Schließlich bin ich weit weg von der Marke in meinem Ansatz zum Sichern von S3-Daten?

Vielen Dank im Voraus für jeden Einblick, den Sie gewähren könnten!

Aktualisieren

Amazon gab kürzlich bekannt, dass die Versionierung jetzt mit Lebenszyklusregeln funktioniert

Fiver
quelle
aws.amazon.com/blogs/aws/archive-s3-to-glacier/... + dort am Boden schönes kurzen YouTube - Video ist s3 zum Gletscher erklären
equivalent8

Antworten:

10

Ich habe etwas über die Versionierungsfunktion für S3-Buckets gelesen, kann aber anscheinend nicht feststellen, ob die Wiederherstellung für Dateien ohne Änderungsverlauf möglich ist. Weitere Informationen finden Sie in den AWS-Dokumenten unter> Versionierung:

Ich habe es gerade versucht. Ja, Sie können von der Originalversion wiederherstellen. Wenn Sie die Datei löschen, wird eine Löschmarkierung erstellt, und Sie können die vorherige Version wiederherstellen, dh die einzige Revision.

Dann dachten wir, wir könnten die S3-Dateien einfach mit Object Lifecycle> Management auf Glacier sichern:

Es scheint jedoch, dass dies bei uns nicht funktioniert, da das Dateiobjekt nicht in Glacier kopiert, sondern> in Glacier verschoben wird (genauer gesagt, es handelt sich anscheinend um ein Objektattribut, das geändert wird, aber ohnehin ...).

Gletscher ist wirklich für die Langzeitlagerung gedacht, auf die nur sehr selten zugegriffen wird. Es kann auch sehr teuer werden, einen großen Teil Ihrer Daten auf einmal abzurufen, da dies nicht für die Wiederherstellung vieler Daten zu bestimmten Zeitpunkten gedacht ist (prozentual).

Schließlich dachten wir, wir würden jeden Monat einen neuen Bucket erstellen, der als monatliches> vollständiges Backup dient, und die ursprünglichen Bucket-Daten an Tag 1 in den neuen kopieren. Dann verwenden wir etwas> wie duplicity ( http: //duplicity.nongnu. org / ) Wir würden den Backup-Bucket jede Nacht synchronisieren.

Tun Sie dies nicht, Sie können nur 100 Buckets pro Konto haben. In 3 Jahren haben Sie also ein Drittel Ihres Bucket-Guthabens mit nur Backups verbraucht.

Ich schätze, hier gibt es ein paar Fragen. Erstens: Ermöglicht die S3-Versionierung die Wiederherstellung von> Dateien, die nie geändert wurden?

Ja

Gibt es eine Möglichkeit, Dateien von S3 nach Glacier zu "kopieren", die ich verpasst habe?

Nicht, dass ich davon Wüste

Sirex
quelle
Vielen Dank an Sirex, eine Klarstellung: Wir wollten immer nur einen Backup-Bucket (den aktuellen Monat), das Backup des letzten Monats auf Glacier archivieren und dann die Glacier-Kopien nach einer allgemeinen Aufbewahrungsrichtlinie löschen (dann jeden Monat für 3 Monate) vierteljährlich für ein Jahr). Glauben Sie, dass dies möglich ist, oder gibt es eine andere AWS-Einschränkung, die diese Strategie verhindert?
Fünfer
hmm, ich denke das ist vernünftig. Ich habe das allerdings nicht aus Wut versucht (oder Gletscher, wir verwenden Sydney und es war nicht verfügbar, als wir es uns anschauten)
Sirex
3

Ich mag es nicht, S3 zu mounten, weil es langsam ist und hängen kann und wie Old School NFS funktioniert. Besser einfach nach Bedarf hoch / runter.

http://s3tools.org/s3cmd

Es ist einfach zu skripten ... vergessen Sie nicht Ihre ~ / .s3cfg-Datei

nandoP
quelle
Wow, das sieht cool aus!
JakeGould
@nandoP +1 Ich hatte darüber nachgedacht, den s3cmd zu verwenden und meinen eigenen zu rollen
Fiver
1

Klingt so, als ob Sie S3FS benötigen, mit dem Ihre S3-Buckets im Grunde genommen wie lokale Dateisysteme gemountet werden:

http://code.google.com/p/s3fs/wiki/FuseOverAmazon

Ich bevorzuge diese gegabelte Version, da sie die gleiche Ordnerstruktur beibehält wie die, die in der Web-Systemsteuerung für Amazon S3 erstellt wurde:

https://github.com/tongwang/s3fs-c

Dann habe ich einige Shell-Skripte, die im Grunde genommen rsynczum Synchronisieren der Daten mit meinen lokalen Einstellungen verwendet werden.

Im Allgemeinen eignet sich S3FS am besten zum Lesen von Inhalten, die sich in Amazon S3-Buckets befinden. Schreiben ist nicht so konsequent. Zum Sichern von S3-Buckets eignet sich die Tony Wang-Gabel von S3FS jedoch hervorragend.

JakeGould
quelle
1
Das klingt nützlich. Überträgt es direkt zwischen Buckets, ohne auf den Client herunterzuladen?
Fiver
Möglicherweise ja. Ich benutze es hauptsächlich, um es auf einem lokalen Server zu mounten und auf unseren lokalen Rechnern zu sichern. Da es jedoch über Schreibfunktionen verfügt, würde ich nicht davon ausgehen, dass es als "Zwischenstation" zum Mischen von Daten zwischen Buckets verwendet wird. Montieren Sie grundsätzlich auf einer Zwischenmaschine einen Löffel an einem Montagepunkt. Montieren Sie dann den anderen Löffel als weiteren Montagepunkt. Und dann mache einfach einen Rsync. Aber wie gesagt, die Änderungszeiten / -daten können bei Amazon S3 komisch sein, da es sich nicht wirklich um ein Dateisystem handelt. Aber experimentiere.
JakeGould