Povećanje gustoće spremnika na čvoru pomoću PFCACHE tehnologije

Povećanje gustoće spremnika na čvoru pomoću PFCACHE tehnologije

Jedan od ciljeva hosting providera je maksimalno iskoristiti postojeću opremu kako bi krajnjim korisnicima pružio kvalitetnu uslugu. Resursi krajnjih poslužitelja uvijek su ograničeni, no broj hostiranih klijentskih usluga, au našem slučaju govorimo o VPS-u, može značajno varirati. Pročitajte kako se popeti na stablo i pojesti hamburger ispod posjekotine.

Sažimanje VPS-a na čvoru na takav način da ga klijenti uopće ne osjete uvelike pomaže u povećanju ekonomske učinkovitosti bilo kojeg pružatelja usluga hostinga. Naravno, čvor ne bi trebao pucati po šavovima ako je natrpan kontejnerima, a svaki porast opterećenja odmah osjete svi klijenti.

Koliko VPS-ova može biti hostirano na jednom čvoru ovisi o mnogim čimbenicima, kao što su očiti:

1. Karakteristike hardvera samog čvora
2. Veličina VPS-a
3. Priroda opterećenja na VPS
4. Softverske tehnologije koje pomažu optimizirati gustoću

U ovom slučaju, podijelit ćemo naše iskustvo korištenja Pfcache tehnologije za Virtuozzo.
Koristimo 6. granu, ali sve rečeno vrijedi i za 7. granu.

Pfcache – Virtuozzo mehanizam koji pomaže deduplicirati IOPS i RAM u spremnicima, dodjeljujući identične datoteke u spremnike zasebnom zajedničkom području.

Zapravo se sastoji od:
1. Kod kernela
2. Demon korisničkog prostora
3. Pomoćni programi korisničkog prostora

Na strani čvora dodjeljujemo cijeli odjeljak u kojem će se kreirati datoteke koje će izravno koristiti svi VPS-ovi na čvoru. Block ploop uređaj je montiran u ovom odjeljku. Zatim, kada se spremnik pokrene, prima referencu za ovaj odjeljak:

[root@pcs13 ~]# cat /proc/mounts
...
/dev/ploop62124p1 /vz/pfcache ext4 rw,relatime,barrier=1,data=ordered,balloon_ino=12 0 0
...
/dev/ploop22927p1 /vz/root/418 ext4 rw,relatime,barrier=1,data=ordered,balloon_ino=12,pfcache_csum,pfcache=/vz/pfcache 0 0
/dev/ploop29642p1 /vz/root/264 ext4 rw,relatime,barrier=1,data=ordered,balloon_ino=12,pfcache_csum,pfcache=/vz/pfcache 0 0
...

Evo približne statistike o broju datoteka na jednom od naših čvorova:

[root@pcs13 ~]# find /vz/pfcache -type f | wc -l
45851
[root@pcs13 ~]# du -sck -h /vz/pfcache
2.4G    /vz/pfcache
2.4G    total

Princip pfcache-a je sljedeći:
• Demon korisničkog prostora Pfcached zapisuje sha-1 hash datoteke u atribut xattr ove datoteke. Ne obrađuju se sve datoteke, već samo u direktorijima /usr, /bin, /usr/sbin, /sbin, /lib, /lib64

• Najvjerojatnije je da će datoteke u tim direktorijima biti "dijeljene" i koristit će ih nekoliko spremnika;

• Pfcached povremeno prikuplja statistiku o čitanju datoteka iz kernela, analizira je i dodaje datoteke u predmemoriju ako se često koriste;

• Ovi direktoriji mogu biti različiti i konfigurirani su u konfiguracijskim datotekama.

• Prilikom čitanja datoteke provjerava se sadrži li navedeni hash u proširenim atributima xattr. Ako sadrži, otvara se "opća" datoteka umjesto datoteke spremnika. Ova se zamjena događa neprimjećena od strane koda spremnika i skrivena je u kernelu;

• Prilikom pisanja u datoteku, hash je nevažeći. Dakle, sljedeći put kada ga otvorite, otvorit će se sama datoteka spremnika, a ne njezina predmemorija.

Držanjem zajedničkih datoteka iz /vz/pfcache u cacheu stranice postižemo uštede u samom cacheu, kao i uštede u IOPS-u.Umjesto da čitamo deset datoteka s diska, čitamo jednu koja odmah ide u cache stranice.

struct inode {
...
 struct file             *i_peer_file;
...
};
struct address_space {
...
 struct list_head        i_peer_list;
...
}

VMA popis za datoteku ostaje jedan (uklanjamo duplikate memorije) i rjeđe se čita s diska (štedimo iops). Naš zajednički fond nalazi se na SSD-u - dodatni dobitak u brzini.

Primjer za spremanje /bin/bash datoteke u predmemoriju:

[root@pcs13 ~]# ls -li /vz/root/2388/bin/bash
524650 -rwxr-xr-x 1 root root 1021112 Oct  7  2018 /vz/root/2388/bin/bash
[root@pcs13 ~]# pfcache dump /vz/root/2388 | grep 524650
8e3aa19fdc42e87659746f6dc8ea3af74ab30362 i:524650      g:1357611108  f:CP
[root@pcs13 ~]# sha1sum /vz/root/2388/bin/bash
8e3aa19fdc42e87659746f6dc8ea3af74ab30362  /vz/root/2388/bin/bash
[root@pcs13 /]# getfattr -ntrusted.pfcache /vz/root/2388/bin/bash
# file: vz/root/2388/bin/bash
trusted.pfcache="8e3aa19fdc42e87659746f6dc8ea3af74ab30362"
[root@pcs13 ~]# sha1sum /vz/pfcache/8e/3aa19fdc42e87659746f6dc8ea3af74ab30362
8e3aa19fdc42e87659746f6dc8ea3af74ab30362  /vz/pfcache/8e/3aa19fdc42e87659746f6dc8ea3af74ab30362

Izračunavamo učinkovitost korištenja gotova skripta.

Ova skripta prolazi kroz sve spremnike na čvoru, izračunavajući predmemorirane datoteke svakog spremnika.

[root@pcs16 ~]# /pcs/distr/pfcache-examine.pl
...
Pfcache cache uses 831 MB of memory
Total use of pfcached files in containers is 39837 MB of memory
Pfcache effectiveness: 39006 MB

Dakle, iz memorije spremamo oko 40 gigabajta datoteka u spremnike; one će se učitati iz predmemorije.

Da bi ovaj mehanizam još bolje funkcionirao, potrebno je na čvor postaviti „najidentičniji“ VPS. Na primjer, one kojima korisnik nema root pristup i na kojima je konfigurirano okruženje iz postavljene slike.

Pfcache možete podesiti putem konfiguracijske datoteke
/etc/vz/pfcache.conf

MINSIZE, MAXSIZE – minimalna/maksimalna veličina datoteke za predmemoriju
TIMEOUT – vremensko ograničenje između pokušaja predmemoriranja

Možete pogledati cijeli popis parametara по ссылке.

Izvor: www.habr.com

Dodajte komentar