Aumente la densidad del contenedor en un nodo utilizando la tecnología PFCACHE



Uno de los objetivos del proveedor de alojamiento es la eliminación máxima posible de los equipos existentes para proporcionar un servicio de calidad a los usuarios finales. Los recursos de los servidores finales siempre son limitados, sin embargo, la cantidad de servicios de cliente alojados, y en nuestro caso estamos hablando de VPS, puede variar significativamente. Lea sobre cómo subirse a un árbol de Navidad y comer una hamburguesa debajo de un gato.

Consolidar un VPS en un nodo de tal manera que los clientes no lo sientan en absoluto ayuda mucho a aumentar el rendimiento económico de cualquier proveedor de alojamiento. Por supuesto, un nodo no debe agrietarse en las costuras si los contenedores se apiñan en los globos oculares, y todos los clientes sienten inmediatamente cualquier aumento en la carga.

La cantidad de VPS que se puede colocar en un nodo depende de muchos factores, tales como:

  1. Características del hierro del propio nodo.
  2. Tamaño de VPS
  3. Patrón de carga de VPS
  4. Tecnologías de software que ayudan a optimizar la densidad

En este caso, compartiremos nuestra experiencia utilizando la tecnología Pfcache para Virtuozzo.
Usamos la sexta rama, pero todo lo dicho es cierto para la séptima.

Pfcache es un mecanismo de Virtuozzo que ayuda a deduplicar IOPS y RAM en contenedores, asignando los mismos archivos en contenedores a una zona común separada.

De hecho, consiste en:

  1. Código del núcleo
  2. Demonio de espacio de usuario
  3. Utilidades de espacio de usuario

En el lado del nodo, destacamos una sección completa en la que se crearán los archivos que todos los VPS en el nodo usarán directamente. El dispositivo de bloqueo ploop se monta en esta sección. Además, al comienzo del contenedor, recibe una referencia a 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í hay estadísticas de muestra sobre la cantidad de archivos en uno de nuestros 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 

El principio de pfcache es el siguiente:

  • El daemon Pfcached del espacio de usuario escribe el hash sha-1 del archivo en el atributo xattr de este archivo. Los archivos no se procesan todos, sino solo en los directorios / usr, / bin, / usr / sbin, / sbin, / lib, / lib64
  • Es muy probable que los archivos en estos directorios sean "compartidos" y sean utilizados por varios contenedores;
  • Pfcached recopila periódicamente estadísticas sobre la lectura de archivos del kernel, lo analiza y agrega archivos a la memoria caché si su uso es frecuente;
  • Estos directorios pueden ser diferentes y están configurados en los archivos de configuración.
  • Al leer un archivo, se verifica si contiene el hash especificado en los atributos xattr extendidos. Si contiene, se abre el archivo "común", en lugar del archivo contenedor. Esta sustitución ocurre desapercibida por el código del contenedor y se oculta en el núcleo;
  • Al escribir en un archivo, el hash se invalida. Por lo tanto, en la próxima apertura, el archivo contenedor se abrirá directamente y no su caché.

Al mantener los archivos compartidos en la memoria caché de la página desde / vz / pfcache, estamos guardando esta memoria caché y guardando IOPS. En lugar de leer diez archivos del disco, leemos uno que va directamente a la memoria caché de la página.

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

La lista de VMA para el archivo sigue siendo la misma (memoria deduplicada) y se lee con menos frecuencia desde el disco (guardar iops). Nuestro "fondo común" está alojado en SSD, una ganancia adicional en velocidad.

Ejemplo para almacenar en caché el archivo / 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 la eficiencia de uso con un script listo para usar.

Este script pasa a través de todos los contenedores en el nodo, calculando los archivos en caché de cada contenedor.

 [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 

Por lo tanto, guardamos unos 40 gigabytes de archivos en contenedores de la memoria, se cargarán desde la memoria caché.

Para que este mecanismo funcione aún mejor, es necesario colocar el VPS "idéntico" máximo en el nodo. Por ejemplo, aquellos para los que el usuario no tiene acceso de root y en los que se configura el entorno de la imagen expandida.

Puede ajustar la operación de pfcache a través del archivo de configuración
/etc/vz/pfcache.conf

MINSIZE, MAXSIZE: tamaño de archivo mínimo / máximo para el almacenamiento en caché
TIMEOUT - tiempo de espera entre intentos de caché

Puede encontrar una lista completa de parámetros en el enlace .

Source: https://habr.com/ru/post/444696/


All Articles