Aumente a densidade do contêiner em um nó usando a tecnologia PFCACHE



Um dos objetivos do provedor de hospedagem é o descarte máximo possível dos equipamentos existentes para fornecer um serviço de qualidade aos usuários finais. Os recursos dos servidores finais são sempre limitados; no entanto, o número de serviços de clientes hospedados e, no nosso caso, estamos falando de VPS, pode variar significativamente. Leia sobre como subir em uma árvore de Natal e comer um hambúrguer embaixo de um gato.

A consolidação de um VPS em um nó de forma que os clientes não sintam isso ajuda muito a aumentar o desempenho econômico de qualquer provedor de hospedagem. Obviamente, um nó não deve estourar nas costuras se os contêineres estiverem amontoados nos globos oculares, e todos os clientes sentirem imediatamente qualquer aumento na carga.

Quantos VPS podem ser colocados em um nó depende de muitos fatores, como óbvios:

  1. Características do ferro do próprio nó
  2. Tamanho VPS
  3. Padrão de carga VPS
  4. Tecnologias de software que ajudam a otimizar a densidade

Nesse caso, compartilharemos nossa experiência usando a tecnologia Pfcache para Virtuozzo.
Usamos o 6º ramo, mas tudo o que foi dito é verdadeiro para o 7º.

O Pfcache é um mecanismo do Virtuozzo que ajuda a desduplicar IOPS e RAM em contêineres, alocando os mesmos arquivos em contêineres para uma zona comum separada.

De fato, consiste em:

  1. Código do Kernel
  2. Daemon de espaço do usuário
  3. Utilitários de espaço do usuário

No lado do nó, destacamos uma seção inteira na qual os arquivos serão criados que todos os VPS no nó usarão diretamente. O dispositivo de bloco de ploop está montado nesta seção. Além disso, no início do contêiner, ele recebe uma referência a esta seção:

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

Aqui estão exemplos de estatísticas sobre o número de arquivos em um de nossos nós:

 [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 princípio do pfcache é o seguinte:

  • O daemon Pfcached no espaço do usuário grava o hash do arquivo sha-1 no atributo xattr desse arquivo. Os arquivos não são processados ​​todos, mas apenas nos diretórios / usr, / bin, / usr / sbin, / sbin, / lib, / lib64
  • É mais provável que os arquivos nesses diretórios sejam "compartilhados" e sejam utilizados por vários contêineres;
  • O Pfcached coleta periodicamente estatísticas sobre a leitura de arquivos do kernel, analisa-o e adiciona arquivos ao cache se seu uso for frequente;
  • Esses diretórios podem ser diferentes e estão configurados nos arquivos de configuração.
  • Ao ler um arquivo, é verificado se ele contém o hash especificado nos atributos xattr estendidos. Se ele contiver, o arquivo "comum" será aberto, em vez do arquivo de contêiner. Essa substituição ocorre despercebida pelo código do contêiner e oculta no kernel;
  • Ao gravar em um arquivo, o hash é invalidado. Assim, na próxima abertura, o arquivo do contêiner será aberto diretamente, e não seu cache.

Ao manter os arquivos compartilhados no cache da página em / vz / pfcache, estamos salvando esse cache e também o IOPS.Em vez de ler dez arquivos do disco, lemos um que vai diretamente para o cache da página.

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

A lista VMA para o arquivo permanece a mesma (memória com eliminação de duplicação) e é lida com menos frequência no disco (salve o IOP). Nosso "fundo comum" está hospedado no SSD - um ganho adicional de velocidade.

Exemplo para armazenar em cache o arquivo / 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 eficiência do uso com um script pronto .

Esse script passa por todos os contêineres no nó, calculando os arquivos em cache de cada contêiner.

 [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 

Assim, economizamos cerca de 40 gigabytes de arquivos em contêineres da memória, eles serão carregados do cache.

Para que esse mecanismo funcione ainda melhor, é necessário colocar o VPS "idêntico" máximo no nó. Por exemplo, aqueles para os quais o usuário não tem acesso root e no qual o ambiente da imagem expandida está configurado.

Você pode ajustar a operação do pfcache através do arquivo de configuração
/etc/vz/pfcache.conf

MINSIZE, MAXSIZE - tamanho mínimo / máximo do arquivo para armazenamento em cache
TIMEOUT - tempo limite entre tentativas de cache

Uma lista completa de parâmetros pode ser encontrada no link .

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


All Articles