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.

Gorące migawki (live snapshot) w DigitalOcean

Kilka dni temu na Twitterze trafiłem na takie oto tweet:

digitalocean_twitter_live-snapshot_201607

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:

digitalocean_settings_snapshot-in-progress

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…

Nie masz jeszcze konta w DigitalOcean, a chciałbyś przetestować ich usługi/opisywane w tym artykule informacje? Załóż konto z tego linka i zgarnij 10 $, dzięki czemu będziesz mógł korzystastać z serwera nawet przez 2 miesiące zupełnie za darmo!

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).

Teoretycznie wykonywanie migawek na włączonym systemie nie powinno mieć wpływu na integralność danych, choć tworząc harmonogram tego typu operacji warto uwzględnić to, że może mieć to jakiś wpływ na obciążenie systemu/serwera.

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”:

digitalocean_settings_api01

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:

digitalocean_settings_api02

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
Wprawdzie nie jest to jedyna możliwość, to ja na potrzeby tego wpisu będę korzystał ze skryptu BASH i narzędzie cURL.

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
Pamiętajcie by po zapisaniu skryptu – jeśli jest to nowo utworzony plik – nadać mu atrybut wykonywalności:

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…

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Patryk