Konteinerio tankio didinimas mazge naudojant PFCACHE technologiją

Konteinerio tankio didinimas mazge naudojant PFCACHE technologiją

Vienas iš prieglobos paslaugų teikėjo tikslų yra maksimaliai išnaudoti esamą įrangą, siekiant teikti aukštos kokybės paslaugas galutiniams vartotojams. Galutinių serverių resursai visada yra riboti, tačiau talpinamų klientų paslaugų skaičius, o mūsų atveju kalbame apie VPS, gali labai skirtis. Skaitykite apie tai, kaip lipti į medį ir valgyti mėsainį po pjūviu.

VPS sutankinimas mazge taip, kad klientai to visiškai nepajustų, labai padeda padidinti bet kurio prieglobos paslaugų teikėjo ekonominius rezultatus. Žinoma, mazgas neturėtų plyšti prie siūlių, jei jis prigrūstas konteinerių, o bet kokį apkrovos padidėjimą iškart pajunta visi klientai.

Kiek VPS gali būti talpinama viename mazge, priklauso nuo daugelio veiksnių, tokių akivaizdžių kaip:

1. Pačio mazgo techninės įrangos charakteristikos
2. VPS dydis
3. VPS apkrovos pobūdis
4. Programinės įrangos technologijos, padedančios optimizuoti tankį

Tokiu atveju mes pasidalinsime savo patirtimi naudojant Pfcache technologiją Virtuozzo.
Mes naudojame 6-tą šaką, bet viskas, kas pasakyta, tinka ir 7-am.

Pfcache – Virtuozzo mechanizmas, padedantis panaikinti IOPS ir RAM dubliavimą konteineriuose, paskirstant identiškus failus konteineriuose į atskirą bendrą sritį.

Tiesą sakant, jis susideda iš:
1. Branduolio kodas
2. Vartotojo-erdvės demonas
3. Vartotojo erdvės komunalinės paslaugos

Mazgo pusėje skiriame visą skyrių, kuriame bus kuriami failai, kuriuos tiesiogiai naudos visi mazgo VPS. Šiame skyriuje sumontuotas bloko blokavimo įtaisas. Tada, kai konteineris paleidžiamas, jis gauna nuorodą į šią skiltį:

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

Štai apytikslė vieno iš mūsų mazgų failų skaičiaus statistika:

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

pfcache principas yra toks:
• Vartotojo erdvės demonas Pfcached įrašo failo sha-1 maišą į šio failo atributą xattr. Ne visi failai apdorojami, bet tik kataloguose /usr, /bin, /usr/sbin, /sbin, /lib, /lib64

• Labiausiai tikėtina, kad šiuose kataloguose esantys failai bus „bendrinami“ ir bus naudojami keliuose konteineriuose;

• Pfcached periodiškai renka statistiką apie failų nuskaitymą iš branduolio, analizuoja juos ir prideda failus į talpyklą, jei jie dažnai naudojami;

• Šie katalogai gali skirtis ir yra sukonfigūruoti konfigūracijos failuose.

• Skaitant failą patikrinama, ar jame xattr išplėstiniuose atributuose yra nurodyta maiša. Jei jame yra, atidaromas „bendras“ failas, o ne konteinerio failas. Šis pakeitimas įvyksta nepastebėtas konteinerio kodo ir yra paslėptas branduolyje;

• Įrašant į failą maiša panaikinama. Taigi, kai kitą kartą atidarysite, bus atidarytas pats konteinerio failas, o ne jo talpykla.

Puslapio talpykloje laikant bendrinamus failus iš /vz/pfcache, sutaupome ir pačioje talpykloje, ir sutaupome IOPS. Užuot nuskaitę dešimt failų iš disko, nuskaitome vieną, kuris iš karto patenka į puslapio talpyklą.

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

Failo VMA sąrašas išlieka vienas (atsiimame atminties dubliavimą) ir rečiau nuskaitomas iš disko (taupome IOPS). Mūsų bendras fondas yra SSD diske – tai papildomas greičio padidėjimas.

Failo /bin/bash saugojimo talpykloje pavyzdys:

[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

Apskaičiuojame naudojimo efektyvumą paruoštas scenarijus.

Šis scenarijus eina per visus mazgo konteinerius, apskaičiuodamas kiekvieno konteinerio talpykloje esančius failus.

[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

Taigi iš atminties talpyklose išsaugome apie 40 gigabaitų failų, jie bus įkeliami iš talpyklos.

Kad šis mechanizmas veiktų dar geriau, būtina ant mazgo įdėti patį „identiškiausią“ VPS. Pavyzdžiui, tie, prie kurių vartotojas neturi root prieigos ir kuriose yra sukonfigūruota aplinka iš įdiegto vaizdo.

Galite suderinti pfcache per konfigūracijos failą
/etc/vz/pfcache.conf

MINSIZE, MAXSIZE – mažiausias/maksimalus failo dydis talpykloje
TIMEOUT – skirtasis laikas tarp bandymų išsaugoti talpyklą

Galite peržiūrėti visą parametrų sąrašą по ссылке.

Šaltinis: www.habr.com

Добавить комментарий