Szukam porady lub najlepszych praktyk, aby utworzyć kopię zapasową wiadra S3.
Celem tworzenia kopii zapasowych danych z S3 jest zapobieganie utracie danych z następujących powodów:
- Problem S3
- problem gdzie przypadkowo usunąłem te dane z S3
Po pewnym zbadaniu widzę następujące opcje:
- Użyj wersji http://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html
- Skopiuj z jednego zasobnika S3 do drugiego za pomocą AWS SDK
- Kopia zapasowa do Amazon Glacier http://aws.amazon.com/en/glacier/
- Kopia zapasowa na serwerze produkcyjnym, na którym jest tworzona kopia zapasowa
Jaką opcję powinienem wybrać i jak bezpieczne byłoby przechowywanie danych tylko na S3? Chcesz poznać swoje opinie.
Kilka przydatnych linków:
amazon-web-services
amazon-s3
backup
amazon-glacier
Sergey Alekseev
źródło
źródło
Odpowiedzi:
Okresowo synchronizuj swoje wiadro S3 z serwerem EC2
Można to łatwo osiągnąć, wykorzystując wiele narzędzi wiersza poleceń, które umożliwiają synchronizację zdalnego zasobnika S3 z lokalnym systemem plików.
s3cmd
Początkowo
s3cmd
wyglądał niezwykle obiecująco. Jednak po wypróbowaniu go na moim ogromnym wiadrze S3 - nie udało się skalować, błędnie z rozszerzeniemSegmentation fault
. Jednak działało dobrze na małych wiaderkach. Ponieważ nie działało to w przypadku dużych łyżek, postanowiłem znaleźć alternatywę.s4cmd
Nowsza, wielowątkowa alternatywa dla
s3cmd
. Wyglądało to jeszcze bardziej obiecująco, jednak zauważyłem, że ponownie pobierał pliki, które były już obecne w lokalnym systemie plików. Nie takiego zachowania oczekiwałem po poleceniu synchronizacji. Powinien sprawdzić, czy zdalny plik już istnieje lokalnie (sprawdzanie skrótu / rozmiaru pliku byłoby niezłe) i pominąć go podczas następnej synchronizacji w tym samym katalogu docelowym. Otworzyłem problem ( bloomreach / s4cmd / # 46 ), aby zgłosić to dziwne zachowanie. W międzyczasie postanowiłem znaleźć inną alternatywę.awscli
I wtedy znalazłem
awscli
. To jest oficjalny interfejs wiersza poleceń Amazon do interakcji z różnymi usługami w chmurze, w tym S3.Zapewnia przydatne polecenie synchronizacji, które szybko i łatwo pobiera zdalne pliki zasobnika do lokalnego systemu plików .
Korzyści:
Przypadkowe usunięcie
Dogodnie
sync
polecenie nie usunie plików w folderze docelowym (lokalny system plików), jeśli brakuje ich w źródle (zasobnik S3) i odwrotnie. Jest to idealne rozwiązanie do tworzenia kopii zapasowych S3 - w przypadku usunięcia plików z zasobnika, ponowna synchronizacja nie spowoduje ich usunięcia lokalnie. A jeśli usuniesz plik lokalny, nie zostanie on również usunięty z zasobnika źródłowego.Konfigurowanie awscli na Ubuntu 14.04 LTS
Zacznijmy od instalacji
awscli
. Istnieje kilka sposobów, aby to zrobić, jednak uważam, że to najłatwiej zainstalować go za pomocąapt-get
.Konfiguracja
Następnie musimy skonfigurować za
awscli
pomocą naszego identyfikatora klucza dostępu i tajnego klucza, które należy uzyskać od IAM , tworząc użytkownika i dołączając zasady AmazonS3ReadOnlyAccess . Uniemożliwi to również Tobie lub każdemu, kto uzyska dostęp do tych poświadczeń, usunięcie plików S3. Pamiętaj, aby wprowadzić swój region S3, taki jakus-east-1
.Przygotowanie
Przygotujmy lokalny katalog kopii zapasowych S3, najlepiej w formacie
/home/ubuntu/s3/{BUCKET_NAME}
. Pamiętaj, aby zastąpić{BUCKET_NAME}
rzeczywistą nazwą zasobnika.Synchronizacja początkowa
Zsynchronizujmy zasobnik po raz pierwszy za pomocą następującego polecenia:
Zakładając, że zasobnik istnieje, poświadczenia i region AWS są poprawne, a folder docelowy jest prawidłowy,
awscli
rozpocznie się pobieranie całego zasobnika na lokalny system plików.W zależności od rozmiaru wiadra i połączenia internetowego może to zająć od kilku sekund do godzin. Kiedy to zrobisz, skonfigurujemy automatyczne zadanie cron, aby zachować aktualność lokalnej kopii zasobnika.
Konfigurowanie zadania Cron
Śmiało i utwórz
sync.sh
plik w/home/ubuntu/s3
:Skopiuj i wklej następujący kod do
sync.sh
:Pamiętaj, aby dwukrotnie zastąpić {BUCKET_NAME} nazwą swojego zasobnika S3 w całym skrypcie.
Następnie upewnij się,
chmod
że skrypt może zostać wykonany przezcrontab
.Spróbujmy uruchomić skrypt, aby upewnić się, że faktycznie działa:
Wynik powinien być podobny do tego:
Następnie edytujmy bieżącego użytkownika,
crontab
wykonując następujące polecenie:Jeśli uruchamiasz go po raz pierwszy
crontab -e
, musisz wybrać preferowany edytor. Polecam wybrać,nano
ponieważ jest to najłatwiejsze do pracy dla początkujących.Częstotliwość synchronizacji
Musimy powiedzieć,
crontab
jak często uruchamiać nasz skrypt i gdzie znajduje się skrypt w lokalnym systemie plików, pisząc polecenie. Format tego polecenia jest następujący:Następujące polecenie konfiguruje
crontab
uruchamianiesync.sh
skryptu co godzinę (określone przez parametry minut: 0 i godzina: *) i przesyła dane wyjściowe skryptu dosync.log
pliku w naszyms3
katalogu:Powinieneś dodać tę linię na dole
crontab
edytowanego pliku. Następnie kontynuuj i zapisz plik na dysku, naciskając Ctrl + W, a następnie Enter . Następnie można wyjśćnano
wciskając Ctrl + X .crontab
będzie teraz uruchamiać zadanie synchronizacji co godzinę.Wszystko gotowe! Twój zasobnik S3 będzie teraz automatycznie synchronizowany z serwerem EC2 co godzinę i powinieneś być gotowy. Należy pamiętać, że z biegiem czasu, gdy Twój zasobnik S3 będzie się powiększał, może być konieczne zwiększenie rozmiaru wolumenu EBS serwera EC2, aby pomieścić nowe pliki. Zawsze możesz zwiększyć rozmiar wolumenu EBS, postępując zgodnie z tym przewodnikiem .
źródło
awscli
podpory synchronizują to automatycznie waws s3 sync
poleceniu. Wygląda na to, że być może trzeba będzie to zaimplementować ręcznie.Biorąc pod uwagę powiązany link, który wyjaśnia, że S3 ma trwałość 99,999999999%, odrzuciłbym Twoje obawy # 1. Poważnie.
Teraz, jeśli # 2 jest prawidłowym przypadkiem użycia i prawdziwym problemem dla ciebie, zdecydowanie trzymałbym się opcji # 1 lub # 3. Który z nich? To naprawdę zależy od kilku pytań:
Amazon Glacier is optimized for data that is infrequently accessed and for which retrieval times of several hours are suitable.
Zgadzasz się z tym?O ile twoje wykorzystanie pamięci nie jest naprawdę duże, trzymałbym się wersji wiadro. W ten sposób nie będziesz potrzebować żadnego dodatkowego kodu / przepływu pracy do tworzenia kopii zapasowych danych w Glacier, innych zasobnikach lub nawet na jakimkolwiek innym serwerze (co jest naprawdę złym wyborem IMHO, zapomnij o tym).
źródło
Możesz wykonać kopię zapasową danych S3, korzystając z następujących metod
Zaplanuj proces tworzenia kopii zapasowej za pomocą linii danych AWS, można to zrobić na 2 sposoby wymienione poniżej:
za. Korzystanie z copyActivity z datapipeline, za pomocą którego można kopiować z jednego segmentu s3 do drugiego segmentu s3.
b. Użycie ShellActivity datapipeline i poleceń „S3distcp” w celu wykonania rekurencyjnej kopii rekurencyjnych folderów s3 z zasobnika do innego (równolegle).
Używaj wersjonowania w zasobniku S3, aby zachować różne wersje danych
Użyj lodowca do tworzenia kopii zapasowych danych (użyj go, gdy nie musisz szybko przywracać kopii zapasowej do oryginalnych zasobników (odzyskanie danych z lodowca zajmuje trochę czasu, ponieważ dane są przechowywane w formacie skompresowanym) lub gdy chcesz zapisać pewne koszty, unikając użycia innego zasobnika s3 do tworzenia kopii zapasowych), tę opcję można łatwo ustawić za pomocą reguły cyklu życia zasobnika s3, z którego chcesz wykonać kopię zapasową.
Opcja 1 może zapewnić większe bezpieczeństwo, powiedzmy w przypadku przypadkowego usunięcia oryginalnego zasobnika s3, a kolejną korzyścią jest to, że możesz przechowywać kopię zapasową w folderach datewise w innym zasobniku s3, dzięki czemu wiesz, jakie dane posiadałeś w określonym dniu i możesz przywrócić kopię zapasową z określoną datą. Wszystko zależy od twojego przypadku użycia.
źródło
A co powiesz na użycie łatwo dostępnej funkcji replikacji między regionami w samych łyżkach S3? Oto kilka przydatnych artykułów na temat tej funkcji
źródło
Można by pomyśleć, że do tej pory byłby łatwiejszy sposób, aby po prostu przechowywać jakieś przyrostowe kopie zapasowe w regionie różnic.
Wszystkie powyższe sugestie nie są tak naprawdę prostymi ani eleganckimi rozwiązaniami. Naprawdę nie uważam lodowca za opcję, ponieważ uważam, że jest to bardziej rozwiązanie archiwalne niż rozwiązanie do tworzenia kopii zapasowych. Kiedy myślę o kopii zapasowej, myślę o odzyskiwaniu po awarii od młodszego programisty, który rekursywnie usuwa wiadro lub być może exploit lub błąd w twojej aplikacji, który usuwa rzeczy z s3.
Dla mnie najlepszym rozwiązaniem byłby skrypt, który po prostu tworzy kopie zapasowe jednego zasobnika w innym regionie, raz dziennie i raz co tydzień, tak że jeśli wydarzy się coś strasznego, możesz po prostu zmienić region. Nie mam takiej konfiguracji, przyjrzałem się, że po prostu nie zabrałem się za zrobienie tego, ponieważ zrobienie tego wymagałoby trochę wysiłku, dlatego chciałbym, aby było jakieś rozwiązanie zapasowe do użycia.
źródło
Chociaż to pytanie zostało opublikowane jakiś czas temu, pomyślałem, że ważne jest, aby wspomnieć o ochronie przed usunięciem MFA z innymi rozwiązaniami. OP próbuje rozwiązać problem przypadkowego usunięcia danych. Uwierzytelnianie wieloskładnikowe (MFA) manifestuje się tutaj w dwóch różnych scenariuszach -
Trwałe usuwanie wersji obiektów - Włącz usuwanie MFA w wersji zasobnika.
Przypadkowe usunięcie samego zasobnika - skonfiguruj zasadę zasobnika, która zabrania usuwania bez uwierzytelniania MFA.
Połącz z replikacją między regionami i wersjonowaniem, aby zmniejszyć ryzyko utraty danych i ulepszyć scenariusze odzyskiwania.
Oto bardziej szczegółowy post na blogu na ten temat.
źródło
Jeśli mamy za dużo danych. Jeśli masz już wiadro to za pierwszym razem Synchronizacja zajmie zbyt dużo czasu, w moim przypadku miałem 400 GB. Za pierwszym razem zajęło to 3 godziny. Myślę więc, że możemy sprawić, że replika jest dobrym rozwiązaniem do tworzenia kopii zapasowych S3 Bucket.
źródło