Ich suche nach Ratschlägen oder bewährten Methoden zum Sichern des S3-Buckets.
Der Zweck des Sicherns von Daten aus S3 besteht darin, Datenverlust aus folgenden Gründen zu verhindern:
- S3 Problem
- Problem, bei dem ich diese Daten versehentlich aus S3 lösche
Nach einigen Nachforschungen sehe ich folgende Optionen:
- Verwenden Sie die Versionierung http://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html
- Kopieren Sie mit dem AWS SDK von einem S3-Bucket in einen anderen
- Backup auf Amazon Glacier http://aws.amazon.com/de/glacier/
- Sicherung auf dem Produktionsserver, der selbst gesichert wird
Welche Option soll ich wählen und wie sicher wäre es, Daten nur in S3 zu speichern? Möchten Sie Ihre Meinung hören.
Einige nützliche Links:
amazon-web-services
amazon-s3
backup
amazon-glacier
Sergey Alekseev
quelle
quelle
Antworten:
Synchronisieren Sie Ihren S3-Bucket regelmäßig mit einem EC2-Server
Dies kann leicht erreicht werden, indem mehrere Befehlszeilenprogramme verwendet werden, mit denen ein Remote-S3-Bucket mit dem lokalen Dateisystem synchronisiert werden kann.
s3cmd
Zunächst
s3cmd
sah sehr vielversprechend. Nachdem ich es jedoch an meinem riesigen S3-Eimer ausprobiert hatte, konnte es nicht skaliert werden und trat mit einem Fehler aufSegmentation fault
. Bei kleinen Eimern funktionierte es jedoch einwandfrei. Da es bei großen Eimern nicht funktionierte, machte ich mich auf die Suche nach einer Alternative.s4cmd
Die neuere Multithread-Alternative zu
s3cmd
. Es sah noch vielversprechender aus, aber ich bemerkte, dass immer wieder Dateien heruntergeladen wurden, die bereits im lokalen Dateisystem vorhanden waren. Das ist nicht das Verhalten, das ich vom Synchronisierungsbefehl erwartet habe. Es sollte prüfen, ob die Remote-Datei bereits lokal vorhanden ist (die Überprüfung der Hash- / Dateigröße wäre ordentlich) und sie beim nächsten Synchronisierungslauf im selben Zielverzeichnis überspringen. Ich habe ein Problem ( bloomreach / s4cmd / # 46 ) geöffnet , um dieses seltsame Verhalten zu melden. In der Zwischenzeit machte ich mich auf die Suche nach einer anderen Alternative.awscli
Und dann habe ich gefunden
awscli
. Dies ist die offizielle Befehlszeilenschnittstelle von Amazon für die Interaktion mit den verschiedenen Cloud-Diensten, einschließlich S3.Es bietet einen nützlichen Synchronisierungsbefehl, mit dem die Remote-Bucket-Dateien schnell und einfach in Ihr lokales Dateisystem heruntergeladen werden können .
Leistungen:
Versehentliches Löschen
Praktischerweise
sync
löscht der Befehl keine Dateien im Zielordner (lokales Dateisystem), wenn sie in der Quelle fehlen (S3-Bucket), und umgekehrt. Dies ist ideal für die Sicherung von S3 - falls Dateien aus dem Bucket gelöscht werden, werden sie durch erneutes Synchronisieren nicht lokal gelöscht. Und falls Sie eine lokale Datei löschen, wird diese auch nicht aus dem Quell-Bucket gelöscht.Einrichten von awscli unter Ubuntu 14.04 LTS
Beginnen wir mit der Installation
awscli
. Es gibt verschiedene Möglichkeiten , dies zu tun. Ich fand es jedoch am einfachsten, es über zu installierenapt-get
.Aufbau
Als Nächstes müssen wir
awscli
unsere Zugriffsschlüssel-ID und unseren geheimen Schlüssel konfigurieren , die Sie von IAM erhalten müssen , indem Sie einen Benutzer erstellen und die AmazonS3ReadOnlyAccess- Richtlinie anhängen . Dies verhindert auch, dass Sie oder jemand, der Zugriff auf diese Anmeldeinformationen erhält, Ihre S3-Dateien löschen. Stellen Sie sicher, dass Sie Ihre S3-Region eingeben, zus-east-1
.Vorbereitung
Bereiten wir das lokale S3-Sicherungsverzeichnis vor, vorzugsweise in
/home/ubuntu/s3/{BUCKET_NAME}
. Stellen Sie sicher, dass Sie{BUCKET_NAME}
durch Ihren tatsächlichen Bucket-Namen ersetzen .Erstsynchronisierung
Lassen Sie uns fortfahren und den Bucket zum ersten Mal mit dem folgenden Befehl synchronisieren:
Angenommen, der Bucket ist vorhanden, die AWS-Anmeldeinformationen und die Region sind korrekt und der Zielordner ist gültig.
awscli
Der gesamte Bucket wird in das lokale Dateisystem heruntergeladen.Abhängig von der Größe des Buckets und Ihrer Internetverbindung kann dies einige Sekunden bis Stunden dauern. Wenn dies erledigt ist, richten wir einen automatischen Cron-Job ein, um die lokale Kopie des Buckets auf dem neuesten Stand zu halten.
Einrichten eines Cron-Jobs
Fahren Sie fort und erstellen Sie eine
sync.sh
Datei in/home/ubuntu/s3
:Kopieren Sie den folgenden Code und fügen Sie ihn ein
sync.sh
:Stellen Sie sicher, dass Sie {BUCKET_NAME} zweimal im gesamten Skript durch Ihren S3-Bucket-Namen ersetzen .
Stellen
chmod
Sie als Nächstes sicher, dass das Skript von ausgeführt wirdcrontab
.Versuchen wir, das Skript auszuführen, um sicherzustellen, dass es tatsächlich funktioniert:
Die Ausgabe sollte ungefähr so aussehen:
Als nächstes bearbeiten wir die aktuellen Benutzer,
crontab
indem wir den folgenden Befehl ausführen:Wenn Sie dies zum ersten Mal ausführen
crontab -e
, müssen Sie einen bevorzugten Editor auswählen. Ich würde die Auswahl empfehlen,nano
da es für Anfänger am einfachsten ist, damit zu arbeiten.Synchronisierungsfrequenz
Wir müssen
crontab
durch Schreiben eines Befehls festlegen , wie oft unser Skript ausgeführt werden soll und wo sich das Skript im lokalen Dateisystem befindet. Das Format für diesen Befehl lautet wie folgt:Mit dem folgenden Befehl wird konfiguriert
crontab
, dass dassync.sh
Skript jede Stunde ausgeführt wird (angegeben über die Parameter Minute: 0 und Stunde: *) und die Ausgabe des Skripts an einesync.log
Datei in unserems3
Verzeichnis weitergeleitet wird:Sie sollten diese Zeile am Ende der
crontab
Datei hinzufügen, die Sie bearbeiten. Speichern Sie dann die Datei auf der Festplatte, indem Sie Strg + W und dann die Eingabetaste drücken . Sie können dann beenden,nano
indem Sie Strg + X drücken .crontab
führt nun stündlich die Synchronisierungsaufgabe aus.Alles bereit! Ihr S3-Bucket wird jetzt stündlich automatisch mit Ihrem EC2-Server synchronisiert, und Sie sollten bereit sein. Beachten Sie, dass Sie mit der Zeit, wenn Ihr S3-Bucket größer wird, möglicherweise die EBS-Volume-Größe Ihres EC2-Servers erhöhen müssen, um neue Dateien aufzunehmen. Sie können die Größe Ihres EBS-Volumes jederzeit erhöhen, indem Sie diese Anleitung befolgen .
quelle
awscli
Unterstützung dies nicht automatisch imaws s3 sync
Befehl synchronisiert . Es sieht so aus, als müssten Sie dies möglicherweise manuell implementieren.Unter Berücksichtigung des zugehörigen Links, der erklärt, dass S3 eine Haltbarkeit von 99,999999999% hat, würde ich Ihr Anliegen Nr. 1 verwerfen. Ernsthaft.
Wenn # 2 ein gültiger Anwendungsfall ist und ein echtes Problem für Sie darstellt, würde ich mich definitiv an die Optionen # 1 oder # 3 halten. Welcher von denen? Es kommt wirklich auf einige Fragen an:
Amazon Glacier is optimized for data that is infrequently accessed and for which retrieval times of several hours are suitable.
Passt das für dich?Wenn Ihr Speicherbedarf nicht wirklich groß ist, würde ich mich an die Bucket-Versionierung halten. Auf diese Weise benötigen Sie keinen zusätzlichen Code / Workflow, um Daten auf Glacier, in anderen Buckets oder sogar auf einem anderen Server zu sichern (was meiner Meinung nach wirklich eine schlechte Wahl ist, bitte vergessen Sie es).
quelle
Wie wäre es mit der sofort verfügbaren Funktion zur bereichsübergreifenden Replikation für die S3-Buckets selbst? Hier finden Sie einige nützliche Artikel zu dieser Funktion
quelle
Sie können Ihre S3-Daten mit den folgenden Methoden sichern
Planen Sie den Sicherungsprozess mithilfe der AWS-Datenleitung. Dies kann auf zwei unten beschriebene Arten erfolgen:
ein. Verwenden von copyActivity von datapipeline, mit der Sie von einem s3-Bucket in einen anderen s3-Bucket kopieren können.
b. Verwenden der Befehle ShellActivity of datapipeline und "S3distcp" zum Erstellen der rekursiven Kopie rekursiver s3-Ordner vom Bucket in einen anderen (parallel).
Verwenden Sie die Versionierung im S3-Bucket, um unterschiedliche Datenversionen zu verwalten
Verwenden Sie Gletscher zum Sichern Ihrer Daten (verwenden Sie diese, wenn Sie die Sicherung nicht schnell in den ursprünglichen Buckets wiederherstellen müssen (es dauert einige Zeit, bis die Daten vom Gletscher wiederhergestellt sind, da die Daten im komprimierten Format gespeichert sind) oder wenn Sie sie speichern möchten Diese Option kann leicht mithilfe der Lebenszyklusregel für den S3-Bucket festgelegt werden, für den Sie ein Backup erstellen möchten.
Option 1 bietet Ihnen mehr Sicherheit, wenn Sie beispielsweise versehentlich Ihren ursprünglichen s3-Bucket löschen. Ein weiterer Vorteil besteht darin, dass Sie Ihr Backup in datenweisen Ordnern in einem anderen s3-Bucket speichern können. Auf diese Weise wissen Sie, welche Daten Sie zu einem bestimmten Datum hatten und können Stellen Sie eine bestimmte Datumssicherung wieder her. Es hängt alles von Ihrem Anwendungsfall ab.
quelle
Sie würden denken, dass es jetzt eine einfachere Möglichkeit gibt, nur inkrementelle Sicherungen für eine Diff-Region durchzuführen.
Alle oben genannten Vorschläge sind keine wirklich einfachen oder eleganten Lösungen. Ich halte Gletscher nicht wirklich für eine Option, da ich denke, dass dies eher eine Archivierungslösung als eine Sicherungslösung ist. Wenn ich an Backup denke, denke ich an Disaster Recovery von einem Junior-Entwickler, der rekursiv einen Bucket oder einen Exploit oder Fehler in Ihrer App löscht, der Inhalte aus s3 löscht.
Für mich wäre die beste Lösung ein Skript, das nur einen Bucket in einer anderen Region sichert, einen täglich und einen wöchentlich, sodass Sie, wenn etwas Schreckliches passiert, einfach die Region wechseln können. Ich habe kein solches Setup, ich habe mich nur darum gekümmert, es zu tun, weil es ein bisschen Mühe kosten würde, dies zu tun, weshalb ich mir wünschte, es gäbe eine Standardlösung, die verwendet werden könnte.
quelle
Während diese Frage vor einiger Zeit gestellt wurde, hielt ich es für wichtig, den MFA-Löschschutz bei den anderen Lösungen zu erwähnen . Das OP versucht, das versehentliche Löschen von Daten zu beheben. Die Multi-Faktor-Authentifizierung (MFA) manifestiert sich hier in zwei verschiedenen Szenarien:
Objektversionen dauerhaft löschen - Aktivieren Sie die MFA-Löschung für die Versionierung des Buckets.
Versehentliches Löschen des Buckets selbst - Richten Sie eine Bucket-Richtlinie ein, die das Löschen ohne MFA-Authentifizierung verweigert.
In Verbindung mit der bereichsübergreifenden Replikation und Versionierung wird das Risiko eines Datenverlusts verringert und die Wiederherstellungsszenarien verbessert.
Hier ist ein Blog-Beitrag zu diesem Thema mit mehr Details.
quelle
Wenn ja, haben wir zu viele Daten. Wenn Sie bereits einen Bucket haben, dauert die Synchronisierung beim ersten Mal zu lange. In meinem Fall hatte ich 400 GB. Das erste Mal dauerte es 3 Stunden. Ich denke, wir können das Replikat zu einer guten Lösung für die S3-Bucket-Sicherung machen.
quelle