Cand ai de a face cu sisteme de stocare de tip SAN, dimensionarea acestora devine un pic mai interesanta in sensul ca trebuie luati in considerare mai multi factori, in functie de destinatia/destinatiile acelui sistem.
Pentru ca un SAN costa o caruta de bani si nu poti sa te duci sa-l schimbi cu altul mai mare sau mai frumos dupa 2 luni ca ti-a dat cu virgula prima oara, e bine sa stii de la inceput ce vrei.
Workload-ul pe un storage (SAN) poate fi de la cum facem sa avem un fileserver de 50TB pana la cum facem sa avem acces cat mai rapid la o baza de date de 3TB sau cum facem sa rulam de pe el 300 de masini virtuale care sunt folosite in diferite moduri.
In primul rand, trebuie evaluat cam cate IOPS (Input/Output Operations per Second) va trebuie sa suporte in mod sustinut sistemul de stocare. O operatie de citire reprezinta un IO, o operatie de scriere reprezinta un IO.
E foarte important de mentionat faptul ca IO nu are legatura cu rata de transfer in acest context. E posibil ca un singur disc sa poata citi cu 100MB/se si sa scrie cu 80MB/sec, insa asta se intampla doar daca se citesc/scriu date in mod secvential (de exemplu scrierea sau citirea unui fisier video de 100GB). Daca in schimb e nevoie de scris sau citit date aleator de pe disc, atunci rata de transfer poate ajunge la cativa MB si totul se va misca cu viteza melcului turbat.
Majoritatea producatorilor de software al carei performanta depinde de cat de rapid este sistemul de stocare ofera unelte prin care se pot estima numarul de IOPS-uri necesare pentru o functionare optima intr-un anume mediu de lucru.
De exemplu Exchange Server zice ca are nevoie in medie de cam 1-2 IOPS per utilizator, in conditiile in care utilizatorul primeste ~75 de mesaje si trimite 25. Daca ai 200 de utilizatori care se per total se incadreaza in aceasta medie, ai nevoie de un sistem de stocare care sa sustina 250 IOPS (am pus inca 50 pentru peak-uri).
Sa zicem ca mai avem nevoie ca acelasi SAN sa fie utilizat si de un server SQL care are nevoie de 500 IOPS in medie si cam de 700 in peak. Mai punem un filserver care are nevoie de 100 IOPS.
In total avem nevoie in medie de 250+500+100 = 850 IOPS in medie si cam 1050 IOPS in peak. Sa presupunem ca nu moare nimeni daca dureaza un query 20 de secunde in loc de 10 si sa zicem ca maximum cu tot ce avem nevoie sunt 1000 IOPS.
Al doilea lucru care trebuie luat in calcul, insa de obicei primul la care se gandeste toata lumea: capacitatea de stocare. Cate date poate stoca sistemul. Sa zicem ca in cazul asta e nevoie de 10TB de date (da, avem mailboxuri cu mult filmulete cu pisicute simpatice) si foarte multe poze si cateva baze de date mai maricele.
Acum, un SAN ofera si redundanta la date. Asta inseamna o matrice de tip RAID.
Iar ca lucrurile sa fie complicate, exista mai multe tipuri sau niveluri:
- RAID-0 (0 vine de la cantitatea de date recuperata in caz de probleme): asta inseamna ca scrierile si citirile se impart in mod egal pe numarul de discuri din matrice. Ofera cea mai mare viteza la scriere/citire, dar pe un asemenea tip de matrice trebuie puse date fara absolut nici o valoare.
- RAID-1: aceast tip de matrice ofera protectie prin duplicarea datelor pe un al doilea disc, iar oricare din discuri pica, mai ramane o copie.
- RAID-5: necesita minim 3 discuri si ofera spre utilizare capacitatea a doua din ele. In cazul folosirii matrici cu doar 3 discuri, pe fiecre disc sunt scrise doua treimi date si o treime informatii de paritate pentru celealte doua discuri. Astfel, oricare din cele 3 discuri poate pica, cele 2 discuri ramase contin suficiente informatii pentru recuperarea informatiilor de pe discul picat. Ofera o rata buna de citire (pentru se imparte pe toate discurile din matrice), insa are o penalitate de scriere, pentru ca trebuie sa scrie aceeasi informatie pe cel putin inca un disc pentru a o putea recupera mai tarziu daca e nevoie.
- RAID-6 functioneaza la fel ca RAID-5, insa suporta pierderea a doua discuri oarecare din matrice – informatiile de recuperare a datelor sunt stocate de 2 ori, pe discuri difrite.
- RAID-10: inseamna de fapt o matrice de tip RAID-0 peste mai multe matrici de tip RAID-1. Ofera cea mai mare viteza de scriere si citire a informatiilor, oferind si redundanta a datelor in acelasi timp. Se pierd toate datele daca perechea de discuri ce formeaza un grup RAID-1 pierde ambele discuri.
- RAID-50: RAID-0 peste mai multe matrici de tip RAID-5
- RAID-60: RAID-0 peste mai multe matrici de tip RAID-6
Pana acum avem ca si cerinte: 1000 IOPS si 10TB cpacitate.
Daca ne luam dupa Wikipedia, avem urmatoarele variante cand vorbim de hard disk-uri:
- 7200 RPM S-ATA: 75-100 IOPS
- 10K RPM S-ATA: 125-150 IOPS
- 10K RPM SAS: 140 IOPS
- 15K RPM SAS: 175-210 IOPS
Daca as folosi RAID-0 as avea nevoie de (iau in considerare cel mai mic numar de IOPS):
- 14 (13.33) dicuri S-ATA la 7200RPM
- 8 discuri S-ATA la 10K RPM
- 8 discuri (7.14) SAS la 10K RPM
- 6 discuri (5.71) SAS la 15K RPM
Ce n-am calculat, e ce capacitate sa aiba un disc. Un disc S-ATA normal are acum cam 1TB capacitate la un cost foarte rezonabil. Asta inseamna ca pentru a satisface numarul de IOPS necesar, o sa am o matrice RAID de 14TB pentru 10TB spatiu util.
Daca vreau sa iau discuri SAS la 15K RPM, imi trebuie vreo 12 sa ajung la 10TB din motiv ca cel mai mare disc SAS la 15K RPM pe care il stiu are 900GB.
Daca sunt paranoic si zic vreau protectie maxima, atunci o sa aleg o matrice de tip RAID-6 (presupun ca n-am bani de o matrice de tip RAID60) o sa am nevoie de aproximativ 39 de discuri S-ATA de 7200RPM pentru a ajunge la cam 1000 IOPS.
39!
Daca iau in considerare discuri de 1TB, o sa am aproximativ 36TB capacitate. Astea toate pentru 1000 IOPS si 10TB.
Daca ma gandesc la cel mai rapid disc, SAS la 15K RPM, atunci o sa am nevoie de doar 17 discuri si 14TB spatiu (900GB per disc).
Calculele de mai sus sunt facute in ideea in care avem 50% scrieri si 50% citiri. Si ca nu exista cache nicaieri.
Financiar vorbind, capacitatea e ieftina, IOPS-urile reprezinta cel mai mare cost.
Pentru a alevia o parte din probleme, toti producatorii de sisteme de stocare de tip SAN au memorie cache dedicata pentru controllere pentru a stoca datele cel mai de accesate si a mai lasa discurilor ceva “timp sa respire” intre scrieri si citiri.
Memoria cache e de obicei intre 1GB si 32/64GB, insa costa pe masura si nu poti pune 64GB cache in orice fel de sistem.
Mai nou (adica de vreo 1-2 ani asa), exista posibilitatea de a folosi discuri SSD ca si nivel de intermediar de cache.
Servere <-> memorie cache SAN <-> SSD <-> matrice RAID.
Asta inseamna ca poti avea unul sau mai multe SSD-uri de cativa zeci/sute GB care pot prelua valul de date si le pot tine pana cand discurile mai lente apuca sa le scrie. Un disc de tip SSD recent poate duce cam 50-80.000 IOPS fara probleme.
Si atunci intrebarea ar fi: de ce nu punem discuri SSD peste tot si nu mai batem capul cu IOPS-urile ? Pentru ca discurile SSD de tip Enterprise sunt inca foarte scumpe, de exemplu un disc de 400GB costa intre 4000 si 9000EUR in functie de producator si tehnologia folosita: SLC sau MLC. Si o sa devina interesant de explicat de ce vrei sa dai 100.000EUR pe 10TB de spatiu.
Ca si concluzie, in primul rand trebuie aflat care e necesarul de IOPS, in al doilea rand de ce capacitate e nevoie si in ultimul rand de ce tip de matrice RAID e necesara pentru protectia datelor (RAID nu inseamna backup, insa dormi mai linistit cu cat minimizezi sansele de a pierde date chiar daca pierzi un numar semnificativ de discuri).
M-am gandit sa scriu postul asta pentru ca am tot avut de a face cu oameni care se gandesc la capacitate si iau SAN-ul cu discuri S-ATA si dupa aia dau vina pe producator ca le merge de sta.