Widać, że w DigitalOcean w ostatnim okresie przyspieszyli z dodawaniem nowych rzeczy (lub modyfikacjami w kredytach), bo dopiero co pisałem o gorących migawkach (live snapshot), a dziś jest kolejna okazja.

I wcale nie chodzi o nową lokalizację (San Francisco, czyli SFO2), ani nowe logo (stare chyba bardziej mi się podobało, ale może to kwestia przyzwyczajenia) a o możliwość dodania do swojego serwera dodatkowego dysku (albo wielu), dzięki czemu – przynajmniej w niektórych przypadkach – odejdzie konieczność montowania np. zasobów typu S3…

Block Storage w DigitalOcean

Dodatkowa przestrzeń na dane to chyba jeden z częściej poruszanych tematów na forum DigitalOcean. Często mocy mamy (jeszcze) w zapasie, ale przestrzeń szybko znika – czy to sam system, który zawsze ma tendencje do tycia, czy na kopie zapasowe, czy też po prostu na multimedia wykorzystywane na potrzeby strony internetowej.

Do niedawna w przypadku serwerów VPS w DigitalOcean w sytuacji, gdy kończyła nam się wolna przestrzeń – choć mało jej w standardzie nie ma, to jednak może się skończyć, zwłaszcza przy niektórych projektach – to albo migrowaliśmy serwer do wyższej opcji, tym samym oprócz większej ilości miejsca na dysku (SSD) otrzymywaliśmy więcej pamięci RAM, więcej mocy procesora (CPU), ale i większy rachunek miesięczny, lub korzystaliśmy np. z przestrzeni typu S3.

Od teraz w kilku prostych krokach (naprawdę nie wymaga to wielu umiejętności, jak za chwilę zobaczycie) możemy dodać do naszego serwera dodatkowy dysk – o ile mamy serwer w lokalizacji NYC1 lub SFO2 (ponoć lada chwila dojdzie do tego FRA1), bo – przynajmniej na razie – tylko w tych lokalizacjach jest dostępna ta opcja.

Kilka najważniejszych informacji

Dodatkowa przestrzeń kosztuje nas 0,10 $ za każdy gigabajt miesięcznie, czyli np. dodatkowe 21 GB będzie nas kosztować 2,1 $ miesięcznie. Dyski możemy tworzyć od 1 GB do 16 TB, czyli jest elastycznie (taki dodatkowy dysk 1 GB, np. na jakiś mały BackUp to 10 centów miesięcznie).

Dodatkowa pamięć znajduje się na dyskach SSD, choć szybki test za pomocą narzędzia SysBench wykazał, że jest sporo wolniejsza od podstawowej pamięci, która również bazuje na dyskach SSD.

Dyski można swobodnie przenosić między różnymi serwerami, ale tylko w obrębie danego regionu. Należy też pamiętać – niby oczywiste, ale – że w danym momencie dodatkowy dysk może być podpięty (przypisany) do jednego serwera, ale do każdego serwera można podpiąć wiele dysków (trochę tak, jak ma to miejsce w przypadku fizycznych napędów/dysków).

Transmisja między dodatkową przestrzenią a naszym serwerem jest szyfrowana i izolowana od reszty sieci (pewnie to też ma jakiś wpływ na mniejsza wydajność tej pamięci).

Tworzenie (i dodawanie do serwera) dodatkowego dysku

Na potrzeby testów musiałem utworzyć nowy serwer, bo wprawdzie mam w DigitalOcean kilka serwerów, w kilku lokalizacjach, to akurat nic w lokalizacjach, w których aktualnie jest dostępna usługa dodatkowej pamięci (NYC1 i SFO2), co ma też dobrą stronę – wydajność mogłem sprawdzić na całkowicie nieobciążonym serwerze…

W każdym razie, jeśli wejdziecie w ustawienia serwera znajdującego się w rejonie, w którym dostępna jest opcja dodatkowej przestrzeni, to w menu traficie na nową opcję – volumes:

digitalocean_block-storage01

Wystarczy kliknąć „attach a volume”, podać nazwę (istotna w dalszych krokach) i wybrać rozmiar dysku:

digitalocean_block-storage_attach-a-volume

Od razu można też zaznaczyć przypisanie pamięci do odpowiedniego serwera, dzięki czemu zaraz po utworzeniu dysku pojawią się informacje jak dodać dysk w serwerze:

digitalocean_block-storage_system-config-info

W tym momencie w panelu będzie już widać nowo utworzony dysk:

digitalocean_block-storage02

Z tego miejsca możemy też nim zarządzać – od odpięcia, zmiany rozmiaru, po skasowanie.

Warto mieć na uwadze, że zmianę rozmiaru możemy wykonać tylko w jedną stronę – w górę:

digitalocean_block-storage_resize-storage

Jeśli zajdzie potrzeba zmniejszenia dysku, to najprościej będzie chyba utworzyć nowy – o odpowiednim rozmiarze – na który następnie skopiujemy wszystkie dane (pliki) i podmienimy pierwotny dysk (ten o większym rozmiarze).

Konfiguracja serwera

Wprawdzie informacje o niezbędnej konfiguracji serwera macie dostępną w panelu, to dla zasady podam ją też poniżej – tak by zachować odpowiednią kolejność (najpierw tworzymy dysk, później montujemy go w systemie).

W naszym przypadku dysk nazywa się „hdd02”, tak więc zaczynamy:

sudo mkfs.ext4 -F /dev/disk/by-id/scsi-0DO_Volume_hdd02
sudo mkdir -p /mnt/hdd02
sudo mount -o discard,defaults /dev/disk/by-id/scsi-0DO_Volume_hdd02 /mnt/hdd02

Tym sposobem nasz nowy dysk mamy dostępny pod adresem:

/mnt/hdd02

Od razu warto dodać odpowiedni wpis do pliku fstab, dzięki czemu dysk będzie automatycznie montowany przy każdym uruchomieniu serwera:

echo '/dev/disk/by-id/scsi-0DO_Volume_hdd02 /mnt/hdd02 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab

Oczywiście można to zrobić również ręcznie:

sudo nano/fstab

I dodajemy wpis:

/dev/disk/by-id/scsi-0DO_Volume_hdd02 /mnt/hdd02 ext4 defaults,nofail,discard 0 0

Lista dysków – na nowym serwerze – bez dodatkowego dysku:

digitalocean_block-storage_vps_disk-list

I z dodatkowym dyskiem:

digitalocean_block-storage_vps_disk-list_block-storage

SysBench, czyli szybki test wydajności

Od razu postanowiłem sprawdzić jak prezentuje się pod względem wydajności dodatkowa pamięć, oczywiście w porównaniu z podstawowym dyskiem, do czego wykorzystałem opisywany jakiś czas temu program SysBench.

Poniższy test należy traktować tylko jako poglądowy, gdyż otrzymane wyniki mogą być różne w zależności od parametrów samego testu i/lub serwera, jak i narzędzia za pomocą którego test zostanie wykonany.

I z doświadczenia wiem, że nie zawsze wyniki uzyskane w różnych testach przekładają się na rzeczywistą wydajność w środowisku produkcyjnym…

Test został wykonany na nowym serwerze (a konkretnie 2) o następujących parametrach:

  • RAM: 512 MB
  • CPU: 1 rdzeń
  • Podstawowy dysk: 20 GB SSD
  • Lokalizacja: SFO2

Test 1 (serwer 1):

sysbench --test=fileio --file-total-size=15G prepare
sysbench --test=fileio --file-total-size=15G --file-test-mode=rndrw --max-time=30 --max-requests=100000 run

128 files, 120Mb each
15Gb total file size
Block size 16Kb

Test 2 (serwer 2):

sysbench --test=fileio --file-total-size=1G prepare
sysbench --test=fileio --file-total-size=1G --file-test-mode=rndrw --max-time=30 --max-requests=1000000 run

128 files, 8Mb each
1Gb total file size
Block size 16Kb

Test 1, pamięć standardowa:

Operations performed:  60000 Read, 40000 Write, 128000 Other = 228000 Total
Read 937.5Mb  Written 625Mb  Total transferred 1.5259Gb  (82.842Mb/sec)
5301.90 Requests/sec executed

Test execution summary:
total time:                          18.8612s
total number of events:              100000
total time taken by event execution: 8.1086
per-request statistics:
min:                                  0.00ms
avg:                                  0.08ms
max:                                 13.60ms
approx.  95 percentile:               0.15ms

Threads fairness:
events (avg/stddev):           100000.0000/0.00
execution time (avg/stddev):   8.1086/0.00

Test 1, pamięć dodatkowa:

Operations performed:  9300 Read, 6200 Write, 19714 Other = 35214 Total
Read 145.31Mb  Written 96.875Mb  Total transferred 242.19Mb  (8.0706Mb/sec)
516.52 Requests/sec executed

Test execution summary:
total time:                          30.0084s
total number of events:              15500
total time taken by event execution: 10.1615
per-request statistics:
min:                                  0.01ms
avg:                                  0.66ms
max:                                 16.01ms
approx.  95 percentile:               1.55ms

Threads fairness:
events (avg/stddev):           15500.0000/0.00
execution time (avg/stddev):   10.1615/0.00

Test 2, pamięć standardowa:

Operations performed:  117960 Read, 78640 Write, 251550 Other = 448150 Total
Read 1.7999Gb  Written 1.2Gb  Total transferred 2.9999Gb  (102.39Mb/sec)
6552.67 Requests/sec executed

Test execution summary:
total time:                          30.0030s
total number of events:              196600
total time taken by event execution: 8.1819
per-request statistics:
min:                                  0.00ms
avg:                                  0.04ms
max:                                 10.05ms
approx.  95 percentile:               0.12ms

Threads fairness:
events (avg/stddev):           196600.0000/0.00
execution time (avg/stddev):   8.1819/0.00

Test 2, pamięć dodatkowa:

Operations performed:  10320 Read, 6880 Write, 21889 Other = 39089 Total
Read 161.25Mb  Written 107.5Mb  Total transferred 268.75Mb  (8.9556Mb/sec)
573.16 Requests/sec executed

Test execution summary:
total time:                          30.0092s
total number of events:              17200
total time taken by event execution: 8.0178
per-request statistics:
min:                                  0.00ms
avg:                                  0.47ms
max:                                  7.04ms
approx.  95 percentile:               1.17ms

Threads fairness:
events (avg/stddev):           17200.0000/0.00
execution time (avg/stddev):   8.0178/0.00

Jak widać – każdorazowo pamięć standardowo dostępna okazywała się dużo szybsza, niż dodatkowy dysk – ale tego można się było spodziewać, i należy po prostu to uwzględnić planując wykorzystanie zasobów (stąd pisałem o tej pamięci w kontekście miejsca na kopie zapasowe, czy do przechowywania większych plików multimedialnych).

(!) 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