Augment de la densitat del contenidor en un node mitjançant la tecnologia PFCACHE

Augment de la densitat del contenidor en un node mitjançant la tecnologia PFCACHE

Un dels objectius del proveïdor d'allotjament és maximitzar la utilització dels equips existents per oferir un servei d'alta qualitat als usuaris finals. Els recursos dels servidors finals sempre són limitats, però el nombre de serveis de client allotjats, i en el nostre cas estem parlant de VPS, pot variar molt. Llegeix sobre com pujar a l'arbre i menjar una hamburguesa sota el tall.

Compactar VPS en un node de manera que els clients no ho sentin gens ajuda molt a augmentar el rendiment econòmic de qualsevol proveïdor d'allotjament. Per descomptat, un node no hauria d'esclatar a les costures si està ple de contenidors, i tots els clients senten immediatament qualsevol augment de càrrega.

Quants VPS es poden allotjar en un node depèn de molts factors, com ara:

1. Característiques del maquinari del propi node
2. Mida del VPS
3. Naturalesa de la càrrega del VPS
4. Tecnologies de programari que ajuden a optimitzar la densitat

En aquest cas, compartirem la nostra experiència d'utilitzar la tecnologia Pfcache per a Virtuozzo.
Utilitzem la 6a branca, però tot el que es diu també és cert per a la 7a.

Pfcache – un mecanisme Virtuozzo que ajuda a desduplicar IOPS i RAM als contenidors, assignant fitxers idèntics als contenidors a una àrea comuna separada.

De fet consta de:
1. Codi del nucli
2. Dimoni de l'espai d'usuari
3. Utilitats de l'espai d'usuari

Al costat del node, assignem una secció sencera en la qual es crearan fitxers que seran utilitzats directament per tots els VPS del node. En aquesta secció es munta un dispositiu de ploop de blocs. Aleshores, quan s'inicia el contenidor, rep una referència per a aquesta secció:

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

Aquí hi ha estadístiques aproximades sobre el nombre de fitxers en un dels nostres nodes:

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

El principi de pfcache és el següent:
• El dimoni d'espai d'usuari Pfcached escriu el hash sha-1 del fitxer a l'atribut xattr d'aquest fitxer. No es processen tots els fitxers, sinó només als directoris /usr, /bin, /usr/sbin, /sbin, /lib, /lib64

• El més probable és que els fitxers d'aquests directoris siguin “compartits” i seran utilitzats per diversos contenidors;

• Pfcached recopila periòdicament estadístiques sobre la lectura de fitxers del nucli, les analitza i afegeix fitxers a la memòria cau si s'utilitzen amb freqüència;

• Aquests directoris poden ser diferents i es configuren en fitxers de configuració.

• Quan es llegeix un fitxer, es comprova si conté el hash especificat en els atributs estès de xattr. Si conté, s'obre el fitxer "general" en lloc del fitxer contenidor. Aquesta substitució passa desapercebuda pel codi del contenidor i s'amaga al nucli;

• Quan s'escriu en un fitxer, el hash s'invalida. Així, la propera vegada que l'obris, s'obrirà el propi fitxer contenidor, i no la seva memòria cau.

En mantenir els fitxers compartits de /vz/pfcache a la memòria cau de la pàgina, aconseguim estalvis en aquesta mateixa memòria cau, així com estalvis en IOPS. En lloc de llegir deu fitxers del disc, en llegim un, que immediatament va a la memòria cau de la pàgina.

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

La llista VMA del fitxer continua sent única (desduplicam la memòria) i es llegeix des del disc amb menys freqüència (estalviant iops). El nostre fons comú es troba en un SSD: un guany addicional en velocitat.

Exemple per a la memòria cau del fitxer /bin/bash:

[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

Calculem l'eficiència d'ús guió ja fet.

Aquest script passa per tots els contenidors del node, calculant els fitxers a la memòria cau de cada contenidor.

[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

Així, des de la memòria desem uns 40 gigabytes d'arxius en contenidors; es carregaran des de la memòria cau.

Perquè aquest mecanisme funcioni encara millor, cal col·locar el VPS més "idèntic" al node. Per exemple, aquells als quals l'usuari no té accés root i en els quals es configura l'entorn de la imatge desplegada.

Podeu ajustar pfcache mitjançant el fitxer de configuració
/etc/vz/pfcache.conf

MINSIZE, MAXSIZE: mida mínima/màxima del fitxer per a la memòria cau
TIMEOUT: temps d'espera entre els intents d'emmagatzematge a la memòria cau

Podeu veure la llista completa de paràmetres по ссылке.

Font: www.habr.com

Afegeix comentari