Jeszcze kilka dni temu na większości serwerów w DigitalOcean miałem aktywną usługę kopii zapasowych, za którą od 1 lutego dopłacałem 20% ceny serwera miesięcznie (4 x 5%). Oczywiście oprócz tego stosuje dodatkowe metody zabezpieczające zarówno serwer jak i strony, m.in. kopie zapasowe plików/baz na S3, czy tzw. migawki (snapshot) dostępne bezpośrednio z panelu zarządzania VPSem.
Migawki są dość podobne do zintegrowanej usługi kopii zapasowej (BackUp), z tym, że o ile BackUp jest robiony automatycznie, trochę niezależnie od nas – raz w tygodniu – to w przypadku migawek to my sami wybieramy kiedy chcemy wykonać kopie serwera, a do tego (nadal) są bezpłatne – zarówno wykonanie, jak i przechowywanie na koncie.
Ktoś mógłby zapytać – po co w takim razie usługa BackUp, która nie dość, że jest płatna, to jeszcze wykonywana w terminach nie do końca od nas zależny? Dlatego, że do kopii zapasowej nie trzeba wyłączać serwera, a do migawek trzeba… było.
Spis treści w artykule
Gorące migawki (live snapshot) w DigitalOcean
Kilka dni temu na Twitterze trafiłem na takie oto tweet:
Live snapshotting is now available in all region – snapshot your server without powering-down!
Właściwie bez zbędnej zwłoki zalogowałem się na pierwsze lepsze konto by sprawdzić, czy faktycznie to działa – bo przyznam, że czekałem na to od dawna (chyba nawet bardziej mi na tym zależało niż na pływających/dynamicznych adresach IP, które bardzo cenie i przy każdym serwerze wykorzystuje).
I jak napisali, tak było:
Na powyższym zrzucie widać przykładowy serwer, który jest aktywny (włączony), a zarazem wykonuje się jego migawka (snapshot).
W tym momencie rodzą się co najmniej dwa pytania:
Po co (płatny) BackUp
Po co w tym momencie korzystać z usługi kopii zapasowych, które – jak już wspomniałem – nie dość, że kosztują dodatkowo 20% miesięcznej opłaty za serwer, to jeszcze nie mamy wpływu na to kiedy są wykonywane (raz na tydzień)?
W tej chwili chyba jedyną przewagą kopii zapasowych jest to, że są w pełni automatyczne, tak więc wystarczy raz uruchomić, i możemy zapomnieć o tej usłudze – przynajmniej do momentu jakiejś awarii… ;-)
Czyżby płatne migawki
Czy to oznacza, że niebawem czeka nas wprowadzenie opłaty za migawki, np. od każdego gigabajta zajmowanej przestrzeni?
Właściwie to taki zapis jest z cenniku od dawna, z tym, że obecnie nie jest egzekwowany, tj. nie są pobierane żadne opłaty, niezależnie od tego jak dużo mamy migawek (snapsotów) na koncie, i ile miejsca zajmują.
Bo przy aktualnym stanie – bezpłatne i wykonywane w dowolnym momencie – migawki właściwie powinny wyprzeć płatną opcję kopii zapasowych, a to oznacza mniej dolarów wpływ, a więc…
10 $ otrzymasz od razu gdy dodasz do swojego konta kartę płatniczą (do ew. przyszłych płatności). W przypadku gdy wybierzesz jako metodę płatności PayPal najpierw musisz zasilić konto w DigitalOcean za minimum 5 $ (w takiej sytuacji będziesz miał do wykorzystania 10 $ + kwota zasilenia).
Snapshot i API, czyli automatyczne kopie zapasowe
Zwłaszcza, że przy odrobinie wiedzy technicznej, i przy wykorzystaniu API dostępnego w DigitalOcean bez problemu, w kilku prostych krokach można zautomatyzować cały proces tworzenia migawek, dzięki czemu właściwie jedyna zaleta kopii zapasowych znika – a nawet dalej, bo w tym przypadku to my sami decydujemy jak często i kiedy będziemy robić migawki (kopie zapasowe).
Personal Access Token
Zaczynamy od wygenerowania klucza API, który będziemy wykorzystywali w skrypcie do autoryzacji w DigitalOcean naszych poleceń.
Po zalogowaniu do panelu wystarczy w głównym menu wybrać „API”, a następnie „generate new token”:
Jak nazwiecie swój token nie ma (dla skryptu) znaczenia, ważne byście zaznaczyli podczas generowania klucza opcję „write”, gdyż będziemy również zapisywać zmiany na naszym koncie:
Identyfikator kropelki (ID serwera)
Potrzebujemy jeszcze jedną uzyskać numer ID serwera (lub serwerów) którym będziemy zarządzać.
Najprościej w panelu zarządzania, na liście naszych serwerów najechać kursorem myszy (lub kliknąć, jak mamy tylko jeden) na nazwę wybranego serwera, i powinniście zobaczyć taki link:
https://cloud.digitalocean.com/droplets/[TU JEST ID SERWERA]/graphs
Ale jak ktoś z Was nie może się już doczekać wykorzystywania API, to może pobrać listę serwerów (wraz z ich identyfikatorami) za pomocą skryptu i API:
curl -X GET -H "Content-Type: application/json" \
-H "Authorization: Bearer [TU WSTAW KLUCZ API]" \
"https://api.digitalocean.com/v2/droplets"
;-)
Skrypt do wykonywania migawek serwera
Gdy już mamy klucz API (Personal Access Token) i ID serwera możemy przygotować prosty skrypt, którego uruchomienie spowoduje przesłanie polecenia wykonania migawki serwera:
sudo nano /usr/local/bin/digitalocean-snapshot
Jeśli nie macie w systemie narzędzia cURL, to możecie to szybko nadrobić za pomocą komendy:
sudo apt-get install curl
Przynajmniej w systemie Debian (oraz Ubuntu, Raspbian) z którego korzystam…
W wersji podstawowej (tylko jeden serwer, bez zabawy w zmienne) zawartość pliku może wyglądać tak:
#!/bin/bash
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer [TU WSTAW KLUCZ API]" \
-d '{"type":"snapshot","name":"[NAZWA MIGAWKI]"}' \
"https://api.digitalocean.com/v2/droplets/[TU WSTAW ID SERWERA]/actions"
exit 0
Czyli np.:
#!/bin/bash
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer e153121f2b2eb576ca3d3a11bd6c59340dOf059340a700a4fd94ab242eb9e1e3" \
-d '{"type":"snapshot","name":"20160708"}' \
"https://api.digitalocean.com/v2/droplets/12345678/actions"
exit 0
W odpowiedzi powinniście otrzymać coś w tym stylu:
{"action":{"id":[ID OPERACJI],"status":"in-progress","type":"snapshot","started_at":"2016-07-08T06:14:32Z","completed_at":null (...) }}
Co od razu można wykorzystać do rozbudowy skryptu np. o sprawdzenie, czy w odpowiedzi nie ma jakiegoś błędu i otrzymujemy poprawną odpowiedź dotyczącą rozpoczęcia tworzenia migawki:
"status":"in-progress","type":"snapshot"
Zresztą w podobny sposób – np. po godzinie – możemy pobrać listę ostatnich akcji, by sprawdzić czy migawka została wykonana:
curl -X GET -H "Content-Type: application/json" \
-H "Authorization: Bearer [TU WSTAW KLUCZ API]" \
"https://api.digitalocean.com/v2/droplets/[TU WSTAW ID SERWERA]/actions"
W odpowiedzi uzyskamy coś w tym stylu:
{"actions":[{"id":[ID OPERACJI],"status":"completed","type":"snapshot","started_at":"2016-07-08T06:14:32Z","completed_at":"2016-07-08T06:19:04Z","resource_id":[ID SERWERA],"resource_type":"droplet", (...) }}
Trochę bardziej rozbudowany skrypt
Od razu proponuje trochę rozbudować skrypt, dzięki czemu nie dość, że przygotowujecie się na dodatkowe serwery, to jeszcze zautomatyzujecie proces generowania nazwy, która może być tworzona np. na podstawie aktualnej daty:
#!/bin/bash
# Klucz API
VPS01API=e153121f2b2eb576ca3d3a11bd6c59340dOf059340a700a4fd94ab242eb9e1e3
# ID serwera
VPS01ID=12345678
# Aktualna data
DATA=$(date +"%Y%m%d")
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer $VPS01API" \
-d '{"type":"snapshot","name":'$DATA'}' \
"https://api.digitalocean.com/v2/droplets/$VPS01ID/actions"
exit 0
sudo chmod +x /usr/local/bin/digitalocean-snapshot
Harmonogram zadań
Skoro mamy już prosty skrypt za pomocą którego możemy zainicjować tworzenie migawki, to od razu warto go dodać do systemowego harmonogramu (CRON), tak by wykonywał się np. raz dziennie, np. o 3 nad ranem:
sudo nano /etc/crontab
I dodajemy np. taki wpis:
0 3 * * * root /usr/local/bin/digitalocean-snapshot >/dev/null 2>&1
Na koniec jeszcze restart CRONa:
sudo /etc/init.d/cron restart
I od tego momentu migawka naszego serwera powinna wykonywać się automatycznie, zgodnie z ustawieniami CRONa…
- Wakacje składkowe ZUS a zawieszenie działalności gospodarczej, czyli uważaj, bo być może nie będziesz mógł skorzystać (w 2024) - 1970-01-01
- Przykładowy kalkulator wyceny usługi druku 3D, czyli nie tylko materiał się liczy - 1970-01-01
- Home Assistant 2024.10, czyli nowa karta „nagłówek” i niedziałający TTS w ramach usługi Google Cloud - 1970-01-01