
Uno de los objetivos de un proveedor de hosting es maximizar la utilización del equipo disponible para ofrecer un servicio de calidad a los usuarios finales. Los recursos de los servidores finales siempre son limitados, sin embargo, la cantidad de servicios de clientes, en nuestro caso VPS, puede variar significativamente. Para conocer más sobre cómo encajar en un árbol de Navidad y comer una hamburguesa, lea más abajo.
Consolidar VPS en el nodo de tal manera que los clientes no lo sientan ayuda considerablemente a mejorar los indicadores económicos de cualquier proveedor de hosting. Por supuesto, el nodo no debe estar a punto de colapsar si está lleno de contenedores, y cualquier aumento en la carga es inmediatamente sentido por todos los clientes.
Cuántos VPS pueden estar alojados en un solo nodo depende de muchos factores, algunos de los cuales son evidentes, tales como:
1. Características del hardware del propio nodo
2. Tamaño del VPS
3. Tipo de carga en el VPS
4. Tecnologías de software que ayudan a optimizar la densidad
En este caso, compartiremos nuestra experiencia en el uso de la tecnología Pfcache para Virtuozzo.
Utilizamos la versión 6, pero todo lo mencionado es aplicable también a la 7.
es un mecanismo de Virtuozzo que ayuda a desduplicar IOPS y RAM en contenedores, asignando archivos idénticos en los contenedores a una zona común separada.
De hecho, consiste en:
1. Código del núcleo
2. Demonio de espacio de usuario
3. Utilidad de espacio de usuario
En el lado del nodo, se asigna una partición dedicada donde se crearán los archivos que serán utilizados directamente por todos los VPS en el nodo. A esta partición se monta el dispositivo de bloque ploop. Luego, al iniciar el contenedor, obtiene una referencia a esta partició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 una estadística aproximada de 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 funcionamiento de pfcache es el siguiente:
• El demonio de espacio de usuario Pfcached escribe el hash sha-1 del archivo en el atributo xattr de dicho archivo. No se procesan todos los archivos, solo aquellos en los directorios /usr, /bin, /usr/sbin, /sbin, /lib, /lib64
• Es muy probable que los archivos en estos directorios sean "comunes" y sean utilizados por varios contenedores;
• Pfcached recopila periódicamente estadísticas de lectura de archivos del núcleo, las analiza y añade archivos a la caché si su uso es frecuente;
• Los datos del directorio pueden ser diferentes y se configuran en los archivos de configuración.
• Al leer el archivo, se verifica si contiene el hash especificado en los atributos extendidos xattr. Si lo contiene, se abre un archivo 'compartido' en lugar del archivo contenedor. Este reemplazo ocurre sin que el código del contenedor lo note, y se oculta en el núcleo;
• Al escribir en el archivo, se invalida el hash. Así, al abrirlo posteriormente, se abrirá directamente el archivo contenedor, en lugar de su caché.
Manteniendo archivos compartidos en la caché de página desde /vz/pfcache logramos economizar esta misma caché, así como ahorrar IOPS. En lugar de leer diez archivos del disco, leemos uno que va directamente a la caché de página.
struct inode {
...
struct file *i_peer_file;
...
};
struct address_space {
...
struct list_head i_peer_list;
...
}
La lista VMA para el archivo permanece unida (desduplicamos la memoria) y leemos menos del disco (ahorramos iops). Nuestro 'común' está ubicado en SSD – una ventaja adicional en velocidad.
Ejemplo para el almacenamiento en caché del 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
La eficacia del uso se calcula .
Este script recorre todos los contenedores en el nodo, calculando los archivos en caché de cada contenedor.
[root@pcs16 ~]# /pcs/distr/pfcache-examine.pl
...
La caché de Pfcache utiliza 831 MB de memoria
El uso total de archivos pfcached en los contenedores es de 39837 MB de memoria
Efectividad de Pfcache: 39006 MB
Así, ahorramos alrededor de 40 gigabytes de archivos en los contenedores en memoria, se cargarán desde la caché.
Para que este mecanismo funcione aún mejor, es necesario alojar en el nodo VPS lo más 'similares' posibles. Por ejemplo, aquellos para los que el usuario no tenga acceso root y en los que se haya configurado un entorno a partir de una imagen desplegada.
Se puede ajustar el funcionamiento de pfcache a través del archivo de configuración
/etc/vz/pfcache.conf
MINSIZE, MAXSIZE – tamaño mínimo/máximo del archivo para el almacenamiento en caché
TIMEOUT – tiempo de espera entre intentos de almacenamiento en caché
Puede consultar la lista completa de parámetros. .
Fuente: habr.com
