Was ist eine praktische Möglichkeit, einen Amazon S3-Bucket zu spiegeln?


9

Ich möchte meine Amazon S3-Buckets spiegeln. Ich möchte dies tun, weil 1) ich nicht möchte, dass alle meine Daten nur bei einem Anbieter vorhanden sind; und 2) im Falle eines Softwarefehlers oder einer Sicherheitsverletzung möchte ich, dass die Daten gesichert werden.

Ich kann mit der s3cmd-Synchronisierungsfunktion auf eine lokale Festplatte spiegeln, aber das lässt sich nicht für sehr große Buckets skalieren und ist für schnelle Backup-Wiederherstellungen nicht nützlich. Ich möchte meine Daten lieber an einen Konkurrenten wie Rackspace Cloud Files spiegeln lassen.

Hat jemand Vorschläge für eine einfache und robuste Methode, um diese Art der automatisierten Spiegelung auf einer Linux-Box zu ermöglichen?


Kann ich zu Recht davon ausgehen, dass keine der Antworten tatsächlich "1) Ich möchte nicht, dass alle meine Daten nur bei einem Anbieter vorhanden sind", weil sie alle nur Buckets innerhalb desselben Anbieters widerspiegeln?
Chris

Antworten:



5

Ich hatte das gleiche Problem, also habe ich ein kleines Programm entwickelt, das speziell dafür entwickelt wurde, einen S3-Bucket in einen anderen zu spiegeln. Ich nenne es s3s3mirror.

Ich habe zuerst den Ansatz "s3cmd sync" ausprobiert, aber ich hatte einen Bucket mit Hunderttausenden von Objekten darin, und "s3cmd sync" saß einfach da und verbrauchte nichts mehr, als immer mehr Speicher zu verbrauchen, bis mein System starb. Ich habe s3s3mirror entwickelt, um sofort loszulegen, 100 gleichzeitige Threads (konfigurierbar) zu verwenden und CPU und Speicher in bescheidenem Maße zu nutzen. Wenn ich es selbst sage, ist es ziemlich verdammt schnell.

Ich habe dies auf github unter einer Apache-Lizenz verfügbar gemacht. Wenn Sie sich entscheiden, es zu versuchen, lassen Sie mich bitte wissen, was Sie denken und ob es etwas gibt, das verbessert werden kann.

Hier ist der Link: https://github.com/cobbzilla/s3s3mirror

Vielen Dank!

  • Jonathan.

Vielen Dank für Ihre Arbeit, ich habe daraus einen Docker-Container ausführbar gemacht und verwende ihn bereits in der Produktion: github.com/pmoust/s3s3mirror-docker
Panagiotis Moustafellos

4

Amazon hat jetzt ein unterstütztes Tool, das aws cli .

Es kann in beide Richtungen zwischen lokal und remote oder zwischen zwei s3-Standorten gespiegelt werden.

Leider gibt es keine direkte Unterstützung für Nicht-S3-Standorte wie Rackspace, aber ich dachte, dies wäre eine nützliche Antwort für einige, die diese Frage finden. Wie ich, bevor ich es gefunden habe.

Bestimmtes,

aws s3 sync s3://some/s3/path /some/local/path

2

Schauen Sie sich Jungle Disk Server an . Es funktioniert sowohl mit Amazon S3- als auch mit Rackspace Cloud-Dateien. Sie können S3 und CF an verschiedenen Stellen in Ihrem Dateisystem bereitstellen und dann rsync zwischen den beiden verwenden.


Danke, aber ich hätte erwähnen sollen, dass ich nach einer Lösung suche, die ich als Cron-Job auf einer Linux-Box ausführen kann. Ich habe die Frage aktualisiert.
Ben

2

Sie können versuchen, die Eimer mit Sicherung mit s3fs zu montieren . Sobald dies erledigt ist, können Sie vom Mount-Punkt auf Ihre lokale Festplatte rsync.


1
+1 für s3fs, ich habe gerade einen Patch zur Unterstützung von Dateien mit einer Größe von bis zu 5 TB festgeschrieben.
Ben Lemasurier

1

Sie können Minio-Server , Open Source und S3-kompatible API einrichten. Sie können es auf EC2 oder einem beliebigen Cloud-Anbieter als alternativen Server einrichten und mit dem Befehl Minio-Clients mc mirror regelmäßig S3 spiegeln. Sie können das gleiche Schreiben eines einfachen Cron-Skripts automatisieren.

Ich hoffe es hilft. Haftungsausschluss: Ich arbeite für Minio


1

Für die Online-Synchronisierung von Buckets können Sie die regionübergreifende Replikation verwenden. Auf diese Weise werden alle Aktualisierungen des ursprünglichen Buckets automatisch mit dem S3-Bucket in einer anderen Region synchronisiert: https://docs.aws.amazon.com/AmazonS3/latest/dev/crr.html

Beachten Sie, dass für den Bucket eine aktivierte Versionierung erforderlich ist. Wenn Sie also Objekte in Buckets aktualisieren / löschen, sollten Sie die Lebenszyklusrichtlinie aktivieren, um alte Objekte zu löschen.


Wir haben uns für diese Option entschieden. Beachten Sie jedoch, dass die Replikation nicht mit der Spiegelung identisch ist. Der große Unterschied besteht darin, dass Löschvorgänge nicht zwischen Quelle und Ziel weitergegeben werden (das Ziel aktualisiert Dateien, die sich ändern, scheint sie jedoch niemals zu entfernen).
Scott Gartner
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.