Kopia zapasowa AWS Glacier

Ludzie dzielą się na dwie grupy: tych, co robią kopie zapasowe i tych, co zaczną je robić. Z własnego doświadczenia wiem, że backup działającego serwera to zawsze ostatnia rzecz, o której się myśli. Dlatego chcę pokazać, że można to robić łatwo, szybko i tanio.

Z pomocą przychodzi usługa Amazon Glacier, która charakteryzuje się bardzo niskimi cenami związanymi z przechowaniem dużych ilości danych (ok. 1 cent za GB) w zamian za długie czasy wydobywania plików z archiwum (nawet do 5 godzin).

Jeśli potrzebujemy mieć możliwości błyskawicznego odtworzenia danych, to dobrze jest zorganizować szybsze, podręczne archiwum, np. przy użyciu usługi S3, a z Glacier’a korzystać tylko do bezpiecznej, długoterminowej kopii zapasowej.

Konfiguracja AWS Glacier

Zakładam, że posiadasz konto na AWS i możesz zalogować się do konsoli. Wybierz usługę Glacier i utwórz nowy vault:

Nadaj mu jakąś przyjazną nazwę, np. kopia-zapasowa i przejdź do kolejnego kroku:

W tym kroku można ustawić powiadomienia o zakończeniu tworzenia dziennika i wydobywania archiwum. Te czynności trwają długo  –  zamiast sprawdzać, czy są gotowe, można zostać automatycznie powiadomionym o archiwum gotowym do pobrania.

Uprawnienia dostępu

Proponuję do każdego serwera utworzyć nowy, osobny dostęp, albo przynajmniej jednego użytkownika z prawami do tworzenia kopii zapasowych. W tym celu w konsoli wybierz usługą IAM i utwórz nowego użytkownika (Users -> Create new users):

W przykładzie nazwałem użytkownika backup. Po utworzeniu zobaczysz klucze dostępowe do konta:

Ważne: Zapisz te informacje (na dole jest możliwość pobrania w pliku) – więcej się nie pojawią. Dane widoczne na screenie nie działają 🙂

Po utworzeniu użytkownika wybierz go z listy i dołącz mu odpowiednie uprawnienia (Attach Policy, wyszukaj „Glacier”, zaznacz pełny dostęp i potwierdź):

W tym momencie użytkownik już ma już dostęp do usługi. Można w tym miejscu ograniczyć dostęp użytkownika tylko do wybranych vaultów modyfikując wartość pola Resource (domyślnie ma wartość „*”).

Konfiguracja kopii zapasowej

Na początek potrzebujemy dostępu do usług AWS z linii poleceń. Można się bawić narzędziami od Amazon’a, można też skorzystać z prostszych w użyciu, np. napisanego w Pythonie amazon-glacier-cmd-interface.

Szybka instalacja:

$ git clone https://github.com/uskudnik/amazon-glacier-cmd-interface $ cd amazon-glacier-cmd-interface 
$ python setup.py install

Jeśli ostatnie polecenie nie zadziała, zainstaluj brakującą paczkę:

$ apt-get install python-setuptools

W tym momencie mamy do dyspozycji polecenie glacier-cmd. Pozostaje skonfigurowanie dostępów, w pliku /etc/glacier-cmd.conf:

[aws] 
access_key=TUTAJ_MOJ_ACCEES_KEY 
secret_key=TUTAJ_MOJ_SECRET
[glacier] 
region=eu-west-1 
bookkeeping=False 
logfile=~/.glacier-cmd.log 
loglevel=INFO 
output=print

Jeżeli wybrałeś inny region niż eu-west-1 to popraw tę informacje. Po zapisaniu pliku możemy już wykonać próbę połączenia:

$ glacier-cmd lsvault

Powinniśmy zobaczyć mniej więcej coś takiego:

| Size | ARN | Created | Vault name | | 0 | arn:aws:glacier:eu-west-x:xxxxxxxxxxxx:vaults/kopia-zapasowa | 2015-02-21T13:27:53.922Z | kopia-zapasowa |

Jeżeli zobaczysz komunikat o problemie z dostępem, upewnij się, że access_key i secret są poprawnie ustawione, w razie czego wygeneruj nowe access keys w konsoli IAM.

Jeżeli wszystko zadziałało to możemy utworzyć i skopiować do vaulta swoje pierwsze archiwum:

mysqldump -u root -p –all-databases > dump.sql
gzip dump.sql
now=$(date +”%m_%d_%Y”)
glacier-cmd upload kopia-zapasowa dump.sql.gz –description „Kopia bazy mysql z dnia $now”

Oczywiście warto z tego zrobić jakiś skrypt, włączyć jego uruchamianie w cronie, dodać usuwanie archiwów starszych niż ileśtam dni – ale to tematy na inny wpis.

Odtwarzanie plików z archiwum

Jeżeli nie trzymasz rejestru identyfikatorów utworzonych archiwów, to na początku musisz wydobyć listę plików:

$ glacier-cmd inventory kopia-zapasowa

Jej przygotowanie trwa od 3 do 5 godzin. Ponownym wywołaniem tego polecenia można sprawdzić, czy się jeszcze robi, czy jest już gotowe. Jak będzie gotowe zobaczysz listę zawierającą Archive ID, opis, datę wprowadzania i wielkość pliku:

Znając Archive ID można zlecić wydobycie pliku z vaulta:

$ glacier-cmd getarchive kopia-zapasowa TUTAJ_ARCHIVE_ID

W odpowiedzi zobaczysz:

Ponowne wywołanie polecenia pokaże więcej informacji:

Po zakończeniu przygotowywania archiwum do pobrania status powinien zmienić się na Succeeded:

W tym momencie można już pobrać archiwum i zapisać w pliku:

$ glacier-cmd download kopia-zapasowa ARCHIVE_ID > nazwa_pliku

Pamiętaj, że w/w operacje trwają po 3-5 godzin każda  -  jeżeli potrzebujesz szybszego dostępu do danych – skorzystaj z usługi S3.

Uaktualnienie

Po powstaniu tego artykułu Amazon udostępnił usługę S3, którą można skonfigurować tak, aby rzadko używane pliki były automatycznie przenoszone do Glaciera.

1 thought on “Kopia zapasowa AWS Glacier

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *