
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:- Características do ferro do próprio nó
- Tamanho VPS
- Padrão de carga VPS
- 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:- Código do Kernel
- Daemon de espaço do usuário
- 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 .