Aumento da densidade de contedores nun nodo mediante a tecnoloxía PFCACHE

Aumento da densidade de contedores nun nodo mediante a tecnoloxía PFCACHE

Un dos obxectivos do provedor de hospedaxe é maximizar a utilización dos equipos existentes para ofrecer un servizo de alta calidade aos usuarios finais. Os recursos dos servidores finais son sempre limitados, pero o número de servizos de cliente aloxados, e no noso caso estamos a falar de VPS, pode diferir significativamente. Le sobre como subir á árbore e comer unha hamburguesa baixo o corte.

Compactar VPS nun nodo de forma que os clientes non o sintan en absoluto axuda moito a aumentar o rendemento económico de calquera provedor de hospedaxe. Por suposto, un nodo non debería explotar nas costuras se está cheo de contedores, e todos os clientes senten inmediatamente calquera aumento de carga.

A cantidade de VPS que se poden aloxar nun nodo depende de moitos factores, como os obvios:

1. Características do hardware do propio nodo
2. Tamaño VPS
3. Natureza da carga no VPS
4. Tecnoloxías de software que axudan a optimizar a densidade

Neste caso, compartiremos a nosa experiencia no uso da tecnoloxía Pfcache para Virtuozzo.
Usamos a rama 6, pero todo o dito tamén é certo para o 7.

Pfcache – un mecanismo Virtuozzo que axuda a deduplicar IOPS e RAM nos contedores, asignando ficheiros idénticos en contedores nunha área común separada.

De feito consta de:
1. Código do núcleo
2. Demo do espazo de usuario
3. Utilidades do espazo de usuario

No lado do nodo, asignamos toda unha sección na que se crearán ficheiros que serán utilizados directamente por todos os VPS do nodo. Nesta sección está montado un dispositivo de ploop de bloques. Despois, cando se inicia o contedor, recibe unha referencia para esta sección:

[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í tes estatísticas aproximadas sobre o número de ficheiros nun dos nosos nodos:

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

O principio de pfcache é o seguinte:
• O daemon de espazo de usuario Pfcached escribe o hash sha-1 do ficheiro no atributo xattr deste ficheiro. Non se procesan todos os ficheiros, senón só nos directorios /usr, /bin, /usr/sbin, /sbin, /lib, /lib64

• O máis probable é que os ficheiros destes directorios sexan “compartidos” e sexan utilizados por varios contedores;

• Pfcached recolle periodicamente estatísticas sobre a lectura de ficheiros do núcleo, analízao e engade ficheiros á caché se se usan con frecuencia;

• Estes directorios poden ser diferentes e están configurados en ficheiros de configuración.

• Ao ler un ficheiro, compróbase se contén o hash especificado nos atributos estendidos de xattr. Se contén, ábrese o ficheiro "xeral" en lugar do ficheiro contenedor. Esta substitución ocorre desapercibida polo código do contedor e está oculta no núcleo;

• Ao escribir nun ficheiro, o hash queda inválido. Así, a próxima vez que o abra, abrirase o propio ficheiro contenedor e non a súa caché.

Ao manter os ficheiros compartidos de /vz/pfcache na caché da páxina, conseguimos aforros nesta propia caché, así como aforros en IOPS.En lugar de ler dez ficheiros do disco, lemos un, que vai inmediatamente á caché da páxina.

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

A lista de VMA para o ficheiro segue sendo única (desduplicamos a memoria) e léase do disco con menos frecuencia (aforrando iops). O noso fondo común está situado nun SSD, unha ganancia adicional de velocidade.

Exemplo para almacenar na caché o ficheiro /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

Calculamos a eficiencia de uso guión preparado.

Este script pasa por todos os contedores do nodo, calculando os ficheiros almacenados na caché de cada contedor.

[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

Así, da memoria gardamos uns 40 gigabytes de ficheiros en contedores, que cargaranse desde a caché.

Para que este mecanismo funcione aínda mellor, é necesario colocar o VPS máis "idéntico" no nodo. Por exemplo, aqueles aos que o usuario non ten acceso root e nos que se configura o contorno da imaxe despregada.

Podes sintonizar pfcache a través do ficheiro de configuración
/etc/vz/pfcache.conf

MINSIZE, MAXSIZE: tamaño mínimo/máximo do ficheiro para almacenar na caché
TIMEOUT: tempo de espera entre os intentos de almacenamento na caché

Podes ver a lista completa de parámetros по ссылке.

Fonte: www.habr.com

Engadir un comentario