Jak efektywnie używać S3 do tworzenia kopii zapasowych plików przyrostowo?

42

Rozumiem, jak rsync działa na wysokim poziomie, ale są dwie strony. W przypadku S3 nie ma demona, o którym można mówić - no cóż, ale w zasadzie jest to tylko HTTP.

Istnieje kilka podejść.

s3rsync (ale to po prostu ściąga rsync do s3). Bezpośredni. Nie jestem pewien, czy chcę polegać na czymś zewnętrznym. Chciałbym, żeby s3 właśnie obsługiwał rsync.

Istnieje również kilka „klonów” rsync, takich jak duplikat, które twierdzą, że obsługują s3 bez wspomnianego bolt-on. Ale jak to zrobić? Czy przechowują plik indeksu lokalnie? Nie jestem pewien, jak to może być tak wydajne.

Oczywiście chcę używać s3, ponieważ jest tani i niezawodny, ale są rzeczy, do których rsync jest narzędziem, na przykład tworzenie kopii zapasowych ogromnego katalogu obrazów.

Jakie są tutaj opcje? Co stracę, używając duplikatu + s3 zamiast rsync + s3rsync + s3?

Jaimie Sirovich
źródło
4
S3 jest tani? To dla mnie wiadomość. Niezawodny? Na pewno, ale nie tanie.
EEAA
5
Cóż, s3 kosztuje 0,13 USD / gb lub mniej, gdy przechowujesz więcej lub chcesz mniej nadmiarowości. Szybkie wyszukiwanie ujawnia evbackup.com dla pamięci rsync. O wiele droższy. Co jest tańsze i ma pewien poziom redundancji?
Jaimie Sirovich,
Jeśli ja było zaprojektować rsync, to wsparcie wtyczek, tak aby nowe protokoły (np s3: //) można dodać. Jednak obecnie rsync nie obsługuje tego, więc nie sądzę, że rsync może być używany bezpośrednio do tworzenia kopii zapasowych na S3.
Edward Falk
Następnym problemem jest to, że nie sądzę, aby S3 przechowywał metadane, takie jak własność lub uprawnienia, więc używanie np. „Aws s3 sync” do wykonywania kopii zapasowych będzie działać, ale prawdopodobnie nie nadaje się do pełnej kopii zapasowej systemu plików Unix, ponieważ zbyt wiele danych zostanie utraconych podczas przywracania. Myślę też, że dowiązania symboliczne, dowiązania twarde i inne specjalne pliki zostaną utracone.
Edward Falk

Odpowiedzi:

39

Ponieważ ta ostatnia kwestia została odpowiedział pojawiła się nowa linia poleceń narzędzie AWS aws.

Może synchronizować , podobnie jak rsync, między pamięcią lokalną a s3. Przykładowe użycie:

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

Jeśli środowisko python w systemie jest poprawnie skonfigurowane, możesz zainstalować klienta AWS, używając pip:

pip install awscli
Dan Pritts
źródło
1
Z mojego doświadczenia wynika, że ​​przesyła to wszystko, a nie tylko różnicę zmian. Na przykład przepychałem statyczną stronę do serwera deweloperskiego rsynci zajęło mi to średnio 1 sekundę, a tylko zmiany zachodziły w trakcie mojego wolnego połączenia. aws s3 syncz drugiej strony zajęło około 5 minut, ponownie przesyłając każdy plik.
ryebread
2
Wierzę, że to nie działa, ale dokumenty mówią: „Plik lokalny będzie wymagał przesłania, jeśli rozmiar pliku lokalnego jest inny niż rozmiar obiektu s3, czas ostatniej modyfikacji pliku lokalnego jest nowszy niż czas ostatniej modyfikacji obiektu s3 lub plik lokalny nie istnieje pod określonym segmentem i przedrostkiem. " Upewnij się, że masz najnowszą wersję aws-cli - jeśli możesz to odtworzyć, zgłoś błąd na github. Odpowiadali, kiedy jakiś czas temu zgłosiłem błąd.
Dan Pritts,
Polecenie powinno brzmieć: aws s3 sync / some / local / dir / s3: // mybucket
Carlo S
1
Carlos, nie jestem pewien, o co ci chodzi. Jeśli chcesz zasugerować, że moje przykładowe polecenie jest nieprawidłowe, oboje mamy rację. Synchronizacja s3 może działać w dowolnym kierunku.
Dan Pritts,
Późno na imprezę, ale oto, co się dzieje: Podczas przesyłania do S3 obowiązują zasady szybkiej kontroli (przesyłanie, jeśli zmienił się rozmiar lub data). Podczas pobierania nie ma reguł szybkiego sprawdzania, a wszystko jest pobierane bezwarunkowo.
Edward Falk
16

S3cmd narzędzie ma wielkie syncmożliwości. Używam go do synchronizowania lokalnych kopii zapasowych, używając czegoś takiego:

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

Te --skip-existingśrodki nie starają się suma kontrolna porównać istniejące pliki. Jeśli istnieje już plik o tej nazwie, po prostu szybko go pominie i przejdzie dalej. Istnieje również --delete-removedopcja, która usunie pliki nieistniejące lokalnie, ale chcę zachować na S3 nawet te, które wyczyściłem lokalnie, więc nie używam tego.

Nic Cottrell
źródło
5

Nie chcesz nikomu mówić, co ma robić, ale czy mogę pomachać flagą w celu uzyskania informacji o duplikacie? lub inne rozwiązanie do tworzenia przyrostowych kopii zapasowych. Synchronizacja przebiega bardzo dobrze, ale jeśli wykonujesz kopię zapasową w nocy, co się stanie, jeśli nie zauważysz problemu przez dwa dni? Odpowiedź: Jest już za późno, twoje pliki lokalne i kopia zapasowa są dla siebie lustrzanym odbiciem i nie zawierają potrzebnych danych. Naprawdę powinieneś rozważyć przyrostowe kopie zapasowe lub migawki, abyś mógł odzyskać do określonego momentu w czasie i aby to zrobić skutecznie, potrzebujesz przyrostowych kopii zapasowych. A jeśli utrata danych jest scenariuszem końca świata, zachowaj kopie u różnych dostawców, o których nigdy nie wiesz, a potem możesz się zgubić, zhakować, kto wie.

Używam duplikatów i s3, jest w porządku, ale wymaga dużej mocy obliczeniowej. Ale robi przyrostowe kopie zapasowe. W sytuacji awaryjnej, gdy chcesz przywrócić katalog lub konkretny plik, jak to było w ostatnią środę lub w styczniu, bez przywracania innych plików na tej samej partycji, potrzebujesz przyrostowych kopii zapasowych i narzędzia, w którym możesz zażądać tylko tych plików, których potrzebujesz.

Mam crona, który wypełnia się co x miesięcy, w przeciwnym razie przyrostowy i usuwa starsze niż x miesięcy, aby utrzymać całkowite miejsce do przechowywania s3, w końcu robi status kolekcji, więc każdego ranka otrzymuję pocztę ze statusem. Musisz mieć to regularnie na oku, aby zauważyć, że kopia zapasowa nie działa.

Wymaga znacznej lokalnej przestrzeni tymczasowej, aby zachować lokalne podpisy, więc ostrożnie skonfiguruj katalog tymczasowy. To kopie zapasowe / mnt, z wyłączeniem różnych katalogów wewnątrz / mnt. Jest to dobre do tworzenia kopii zapasowych danych, do partycji systemowych używaj narzędzi do tworzenia obrazów Amazon lub migawek.

Skrypt PHP:

# 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")
Jacek
źródło
1
włącz wersjonowanie dla segmentu s3, a wtedy zachowa stare kopie
mcmillab
3

S3 to uniwersalny system przechowywania obiektów, który zapewnia wystarczającą elastyczność, abyś mógł zaprojektować sposób jego użycia.

Nie jestem pewien od twojego pytania problemów z rsync (innych niż indeksowanie) lub problemów z narzędziem „innej firmy”, na które natrafiłeś.

Jeśli masz duży zestaw plików o dobrej strukturze, możesz uruchomić wiele synchronizacji s3 w swoich podfolderach.

Mili ludzie z Amazon pozwalają również na import / eksport z przenośnego dysku twardego w celu przesłania dużego pliku do S3 lub EBS - http://aws.amazon.com/importexport/, którego można użyć do pierwszego przesłania.

Zobacz najlepsze praktyki Amazon s3 tutaj - http://aws.amazon.com/articles/1904

Jeśli chodzi o różne narzędzia, wypróbuj je i sprawdź, co będzie dla Ciebie najlepsze. Jeśli chodzi o ceny, istnieje obniżona cena za nadmiarowość, jeśli odpowiada ona Twoim potrzebom - http://aws.amazon.com/s3/pricing/

Ogólne zalecenia - mają szybki procesor wielordzeniowy i dobry potok sieciowy.

AKTUALIZACJA: Wzmianka o sumowaniu kontrolnym na S3

Odnośnie S3 przechowuje dane w parach kluczowych wartości i nie ma koncepcji katalogów. S3sync weryfikuje sumę kontrolną (S3 ma mechanizm wysyłania sumy kontrolnej jako nagłówka do weryfikacji - nagłówek Content-MD5). Najlepsze praktyki łączą część dotyczącą integralności danych, która zawiera ją szczegółowo. S3 pozwala wysyłać / weryfikować i pobierać sumy kontrolne. Jest wielu ludzi, którzy wykonują przyrostowe kopie zapasowe z podwójnością. Mimo że na S3 nie działa rsync, możesz robić sumy kontrolne, jak tu wspomniałem.

rsync to sprawdzone narzędzie, a większość nowoczesnych narzędzi używa tego samego algorytmu lub biblioteki rsync lub wywołuje zewnętrznie rsync.

Chida
źródło
1
Nie rozumiem, jak to odpowiada na pytanie. Pytałem, w jaki sposób duplikacja robi to, co robi rsync bez demona po drugiej stronie. Nie ma nawet możliwości uzyskania sumy kontrolnej, a może tak, ale w jaki sposób stopniowo aktualizowałby pliki?
Jaimie Sirovich
DOBRZE. Mówisz więc, że Duplicity używa tego skrótu z S3, ale twierdzi również, że działa przez FTP. FTP nie ma mechanizmu mieszającego. Zwykle mylę się po bezpiecznej stronie i używam „sprawdzonych” narzędzi. Udowodniono, że Rsync tak, ale nie będzie wykonywać kopii zapasowych s3 bez usługi dodatkowej s3 s3rsync. Trochę boję się dwulicowości, ale ma szerszy protokół, jeśli mogę uzyskać pewien poziom funkcjonalności podobnej do rsync z s3 bez wspomnianej usługi dodatkowej. Po prostu nie rozumiem, jak dobrze to działa (i być może inaczej z różnymi protokołami). Jak do cholery robi synchronizację FTP? :)
Jaimie Sirovich,
@JaimieSirovich Przetestuj i zobacz. Gdybyś tak wiedział, wiedziałbyś, że pliki „manifestu” Duplicity budują w krótszym czasie, niż napisanie wszystkich komentarzy na temat tego, co może robić.
ceejayoz
3

Możesz także użyć klienta minio, znanego również jako mc. Użycie polecenia „mc mirror” wykona zadanie.

$ mc mirror share/sharegain/ s3/MyS3Bucket/share/sharegain 
  • Klient mc: minio
  • share / sharegain: lokalny katalog
  • s3: Alias ​​dla https://s3.amazonaws.com
  • MyS3Bucket: Moje zdalne wiadro S3
  • udostępnij / sharegain: Mój obiekt na s3

Możesz napisać prosty skrypt jako cronjob, który będzie synchronizował okresowo.

Mam nadzieję, że to pomoże.

Atul
źródło
-wTeraz jest też flaga, która będzie używana fsnotifydo obserwowania zmian. Można go łatwo skonfigurować jako usługę systemową lub podobną.
alkar
2

Nie jestem pewien, czy true rsync dobrze pasuje do Amazon.

Jak rozumiem, standardowy algorytm rsync oznacza, że ​​klient oblicza skróty dla każdego bloku pliku, a serwer oblicza skróty dla swojej kopii i wysyła te skróty do klienta, co oznacza, że ​​klient może określić, które bloki się zmieniły i wymagają przesłania.

To powoduje dwa problemy dla Amazon, ponieważ wiele skrótów musi zostać wysłanych przez Internet, a także wymaga mocy obliczeniowej do obliczenia wszystkich skrótów, które zwiększyłyby koszty Amazon - prawdopodobnie dlatego pozostawiają to zewnętrznym dostawcom, którzy mogą pobiera dodatkową opłatę za tę funkcję.

Jeśli chodzi o klony, to oczywiście przechowują gdzieś skróty, a gdzieś mogą się różnić w zależności od klonu. Mogłyby one przechowywać skróty jako osobny obiekt dla pliku w Amazon lub jako baza danych przechowywana w Amazon lub mogą przechowywać je lokalnie i zdalnie.

Są zalety i wady robienia tego w obu przypadkach. Jeśli skróty są przechowywane zdalnie w poszczególnych plikach, ciągłe ich pobieranie może być kosztowne. Jeśli skróty są przechowywane w bazie danych zdalnie, baza ta może stać się duża i ciągłe ich pobieranie i aktualizacja może być kosztowne. Jeśli skróty są przechowywane lokalnie, pomaga to zmniejszyć koszty, ale wprowadza inne komplikacje i problemy.

(Oczywiście Amazon ma inne usługi, więc możliwe byłoby prowadzenie bazy danych w Amazon DB)

Jako przykład wypróbowałem jeden wczesny klon rsync wiele lat temu. Nie zostało to napisane, aby wziąć pod uwagę strukturę cenową Amazon, i wydawało dużo http, aby odzyskać skrót każdego bloku, a ponieważ opłata Amazon za każde pobranie, oznaczało to, że podczas gdy część magazynu mojego rachunku spadła gwałtownie, część przeniesienia balonikowany.

Co stracę, używając duplikatu + s3 zamiast rsync + s3rsync + s3?

Tracisz fakt, że dzięki rsync wiesz, że porównujesz pliki źródłowe z plikami kopii zapasowej. W przypadku duplikatów i innych klonów porównujesz pliki źródłowe z hashem, który został pobrany podczas tworzenia kopii zapasowej. Na przykład może być możliwy bezpośredni dostęp do S3 i zastąpienie jednego z jego plików bez ponownego obliczania skrótu lub aktualizacji bazy danych skrótu.

sgmoore
źródło
0

Po porównaniu wielu opcji wymienionych w tym wątku postanowiłem wybrać S3fs. Pozwala zamontować S3 jako lokalny system plików. Następnie możesz kontynuować i używać rsync w sposób, w jaki już go znasz.

To dobry tutorial na początek: Amazon S3 z Rsync

Autor wcześniej używał wspomnianego s3sync, ale następnie przeszedł na opcję S3F. Podoba mi się, ponieważ mam również inne foldery kopii zapasowych podłączone lokalnie przez SSHFS.

Hendrik
źródło
12
Niebezpieczeństwo, Will Robinson! Jest to naprawdę drogie, ponieważ nie zyskujesz żadnych korzyści z komunikacji o niskiej przepustowości rsync --- s3fs skończy czytać (a następnie pisać, jeśli zmieni) cały plik, co oznacza, że ​​Amazon obciąży cię dwa razy. Zamiast tego rozważ użycie instancji EC2 i zdalne użycie rsync przez ssh. Transfery do S3 z instancji EC2 są bezpłatne, więc płacisz tylko za niskopasmową komunikację rsync z komputera lokalnego do instancji EC2. Uruchomienie mikro instancji EC2 na żądanie kosztuje praktycznie nic.
David Biorąc pod uwagę
2
To! Istnieje wiele złych porad dla tych, którzy nie rozumieją rsync i S3 ...
Mark
Jedynym minusem tego jest to, że teraz masz mikro instancję do zarządzania. Trywialny, jeśli wiesz jak, ale dla wielu stanowi barierę wejścia. Plusem jest to, że pamięć masowa EBS podłączona do EC2 stanowi około połowę ceny bajtu S3.
Dan Pritts,
@DavidGiven Co jeśli napisałbym bezpośrednio do zamontowanych s3fs bez korzystania z rysnc, a następnie zarządzał długowiecznością poprzez cykl życia?
Myśliciel