Ceph Distributed File System¶
On decembrie 12, 2021 by adminCeph este un sistem de fișiere de rețea distribuit, conceput pentru a oferi performanțe, fiabilitate și scalabilitate bune.
Caracteristicile de bază includ:
- Semantica POSIX
- Eșalonare fără probleme de la 1 la mai multe mii de noduri
- Disponibilitate și fiabilitate ridicată. Fără un singur punct de eșec.
- Replicare N-way a datelor între nodurile de stocare
- Recuperare rapidă în caz de defecțiuni ale nodurilor
- Reechilibrare automată a datelor la adăugarea/îndepărtarea nodurilor
- Dezvoltare ușoară: majoritatea componentelor FS sunt demoni din spațiul utilizatorului
De asemenea,
- Instantanee flexibile (pe orice director)
- Contorizare recursivă (fișiere imbricate, directoare, octeți)
În contrast cu sistemele de fișiere cluster precum GFS, OCFS2 și GPFS, care se bazează pe accesul simetric al tuturor clienților la dispozitive de bloc partajate, Cephsepară gestionarea datelor și metadatelor în clustere de servere independente, similar cu Lustre. Cu toate acestea, spre deosebire de Lustre, nodurile de metadate și de stocare se execută în întregime ca demoni din spațiul utilizatorului. Datele din fișiere sunt împărțite în bucăți mari între nodurile de stocare pentru a distribui volumul de lucru și a facilita viteze mari. Atunci când nodurile de stocare eșuează, datele sunt replicate în mod distribuit de către nodurile de stocare însele (cu o coordonare minimă din partea unui monitor de cluster), ceea ce face ca sistemul să fie extrem de eficient și scalabil.
Serverele de metadate formează efectiv o memorie cache mare, coerentă, distribuită în memorie deasupra spațiului de nume de fișiere care este extrem de scalabilă, redistribută în mod dinamic metadatele ca răspuns la schimbările de sarcină de lucru și poate tolera eșecurile arbitrare (de fapt, nebizantine) ale nodurilor. Serverul de metadate adoptă o abordare oarecum neconvențională a stocării metadatelor pentru a îmbunătăți semnificativ performanța pentru sarcinile de lucru obișnuite. În special, inodele cu o singură legătură sunt directoare indirecte încorporate, ceea ce permite ca directoare întregi de dentare și inode să fie încărcate în memoria cache cu o singură operațiune de intrare/ieșire. Conținutul unor directoare extrem de mari poate fi fragmentat și gestionat de servere de metadate independente, permițând un acces simultan scalabil.
Sistemul oferă reechilibrarea/migrarea automată a datelor atunci când se trece de la un cluster mic de doar câteva noduri la mai multe sute, fără a fi nevoie ca un administrator să sculpteze setul de date în volume statice sau să treacă prin procesul anevoios de migrare a datelor între servere.Atunci când sistemul de fișiere se apropie de nivelul maxim, se pot adăuga cu ușurință noi noduri, iar lucrurile „vor funcționa pur și simplu.”
Ceph include un mecanism flexibil de instantanee care permite unui utilizator să creeze un instantaneu pe orice subdirector (și conținutul său aninat) din sistem. Crearea și ștergerea instantaneelor sunt la fel de simple ca „mkdir.snap/foo” și „rmdir .snap/foo”.
Ceph oferă, de asemenea, o anumită contabilitate recursivă pe directoare pentru fișiere și octeți imbricați. Adică, un ‘getfattr -d foo’ pe orice director din sistem va dezvălui numărul total de fișiere obișnuite imbricate și subdirectoare, precum și o însumare a dimensiunilor tuturor fișierelor imbricate. Acest lucru face ca identificarea marilor consumatori de spațiu mare pe disc să fie relativ rapidă, deoarece nu este necesară o scanare recursivă ‘du’ sau o scanare recursivă similară a sistemului de fișiere.
În cele din urmă, Ceph permite, de asemenea, stabilirea de cote pe orice director din sistem.Cota poate restricționa numărul de octeți sau numărul de fișiere stocate sub acel punct din ierarhia directoarelor. Cotele pot fi stabilite folosind atributele extinse „ceph.quota.max_files” și „ceph.quota.max_bytes”, de exemplu:
setfattr -n ceph.quota.max_bytes -v 100000000 /some/dirgetfattr -n ceph.quota.max_bytes /some/dir
O limitare a implementării actuale a cotelor este că se bazează pe cooperarea clientului care montează sistemul de fișiere pentru a opri scriitorii atunci când se atinge limita de alimentare. Un client modificat sau adversar nu poate fi împiedicat să scrie atâtea date câte are nevoie.
Mount Options¶
ip=A.B.C.D Specificați IP-ul și/sau portul la care clientul trebuie să se lege local.În mod normal, nu există prea multe motive pentru a face acest lucru. Dacă IP-ul nu este specificat, adresa IP a clientului este determinată uitându-se la adresa de la care provine conexiunea sa cu monitorul. wsize=X Specificați dimensiunea maximă de scriere în octeți. Valoarea implicită: 64 MB. rsize=X Specifică dimensiunea maximă de citire în octeți. Default: 64 MB. rasize=X Specifică dimensiunea maximă de citire în bytes. Valoarea implicită: 8 MB. mount_timeout=X Precizați valoarea timeout pentru montare (în secunde), în cazul unui sistem de fișiere Ceph care nu răspunde. Valoarea implicită este de 60 de secunde. caps_max=X Precizați numărul maxim de capace care trebuie păstrate. Capacele neutilizate sunt eliberate atunci când numărul de capace depășește limita. Valoarea implicită este 0 (nici o limită) rbytes Atunci când stat() este apelat pentru un director, setați st_size la „rbytes”, suma dimensiunilor fișierelor pentru toate fișierele care se află sub acel director. Aceasta este valoarea implicită. norbytes Atunci când stat() este apelat pentru un director, setează st_size la numărul de intrări din acel director. nocrc Dezactivează calculul CRC32C pentru scrierea datelor. Dacă este setat, nodul de stocare trebuie să se bazeze pe corecția erorilor TCP pentru a detecta corupția datelor în încărcătura de date. dcache Folosește conținutul dcache pentru a efectua căutări negative și pentru a citi directorul atunci când clientul are întregul conținut al directorului în memoria sa cache. (Acest lucru nu schimbă corectitudinea; clientul utilizează metadatele din cache numai atunci când un contract de închiriere sau o capacitate îi asigură validitatea.) nodcache Nu utilizați dcache ca mai sus. Acest lucru evită o cantitate semnificativă de cod complex, sacrificând performanța fără a afecta corectitudinea, și este util pentru depistarea erorilor. noasyncreaddir Nu folosiți dcache ca mai sus pentru readdir. noquotadf Raportați utilizarea globală a sistemului de fișiere în statfs în loc să folosiți cota directorului rădăcină. nocopyfrom Nu folosiți operația RADOS „copy-from” pentru a efectua copii de obiecte la distanță. În prezent, este utilizată doar în copy_file_range, care va reveni la implementarea VFS implicită dacă se utilizează această opțiune. recover_session=<no|clean>Stabilește modul de reconectare automată în cazul în care clientul se află pe o listă de blocare. Modurile disponibile sunt „no” și „clean”. Valoarea implicită este „no”.
- no: nu încearcă niciodată să se reconecteze atunci când clientul detectează că a fost blocat pe listă. Operațiunile vor eșua, în general, după ce au fost puse pe lista de blocare.
- clean: clientul se reconectează automat la clusterul ceph atunci cânddetectează că a fost pus pe lista de blocare. În timpul reconectării, clientul renunță la datele/metadatele murdare, invalidează memoria cache a paginilor și mânerele de fișiere inscriptibile.După reconectare, blocajele de fișiere devin vechi deoarece MDS pierde urma lor. Dacă un nod conține blocaje de fișiere învechite, nu este permisă citirea/scrierea pe acel nod până când aplicațiile nu eliberează toate blocajele de fișiere învechite.
Lasă un răspuns