Øgning af containerens tæthed på noden ved hjælp af PFCACHE-teknologi

Øgning af containerens tæthed på noden ved hjælp af PFCACHE-teknologi

Et af målene for en hostingudbyder er at maksimere udnyttelsen af det tilgængelige udstyr for at levere en kvalitetsservice til slutbrugerne. Ressourcerne på de enkelte servere er altid begrænsede, men antallet af klientservices, og i vores tilfælde VPS, kan variere betydeligt. Læs om, hvordan man kan tilpasse sig og få det bedste ud af situationen.

At komprimere VPS på noden, så kunderne slet ikke føler det, hjælper betydeligt med at forbedre den økonomiske bundlinje for enhver hostingudbyder. Selvfølgelig må noden ikke sprække i sømmene, hvis den er fyldt til bristepunktet med containere, og enhver stigning i belastningen mærkes straks af alle kunder.

Hvor mange VPS der kan være placeret på én node, afhænger af mange faktorer, herunder de mest åbenlyse:

1. Noden hardware specifikationer
2. Størrelsen på VPS
3. Karakteren af belastningen på VPS
4. Softwareteknologier, der hjælper med at optimere tæthed

I dette tilfælde vil vi dele erfaringer med brugen af teknologien Pfcache til Virtuozzo.
Vi bruger den 6. version, men alt hvad der siges er også relevant for den 7.

Pfcache er en Virtuozzo-mekanisme, der hjælper med at deduplere IOPS og RAM i containere ved at tildele samme filer i containere til et separat fælles område.

Det består faktisk af:
1. Kernelkode
2. User-space daemon
3. User-space utility

På noden tildeler vi et helt partition, hvor filer, som alle VPS på noden vil bruge, vil blive oprettet. Dette partition monteres med blokkenheden ploop. Når containeren starter, får den en reference til denne afdeling:

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

Her er statistikken for antallet af filer på en af vores noder:

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

Driftsprincippet for pfcache er som følger:
• User-space daemon Pfcached skriver sha-1 hash af filen i xattr attributterne for den pågældende fil. Filer behandles ikke alle, men kun i mapperne /usr, /bin, /usr/sbin, /sbin, /lib, /lib64

• Det er mest sandsynligt, at filer i disse mapper vil være "fælles" og vil blive brugt af flere containere.

• Pfcached indsamler periodisk statistik om fillæsninger fra kernen, analyserer det og tilføjer filer til cachen, hvis de benyttes ofte;

• Mappedataene kan være forskellige og konfigureres i konfigurationsfiler.

• Ved læsning af en fil kontrolleres det, om den indeholder den angivne hash i de udvidede attributter xattr. Hvis den gør – åbnes en "fælles" fil i stedet for containerfilen. Denne substitution foregår uden, at containerkoden bemærker det, og skjules i kernen;

• Ved skrivning til en fil, invalides hash. Dermed vil den næste åbning finde sted direkte på containerfilen i stedet for dens cache.

Ved at have fælles filer i sidecachen fra /vz/pfcache opnår vi besparelser på denne cache samt IOPS. I stedet for at læse ti filer fra disken, læser vi én, som straks går til sidecachen.

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

VMA-listen for filen forbliver den samme (de-duplicerer hukommelse) og vi læser sjældnere fra disken (besparelser på iops). Vores "fælles" placering er på SSD – en ekstra gevinst i hastighed.

Eksempel på caching af filen /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

Effektivitet af brugen beregnes med et færdigt script.

Dette script gennemgår alle containere på noden og beregner cachede filer for hver container.

[root@pcs16 ~]# /pcs/distr/pfcache-examine.pl
...
Pfcache-cachen bruger 831 MB hukommelse
Det samlede brug af pfcachede filer i containere er 39837 MB hukommelse
Pfcache effektivitet: 39006 MB

Dermed sparer vi omkring 40 gigabyte hukommelse på filer i containere, som vil blive indlæst fra cachen.

For at dette mekanisme fungerer endnu bedre, er det nødvendigt at placere så "ensartede" VPS'er som muligt på noden. For eksempel dem, hvor brugeren ikke har root-adgang, og hvor miljøet er konfigureret ud fra et udtrukket billede.

Pfcache-arbejde kan tweaks gennem konfigurationsfilen
/etc/vz/pfcache.conf

MINSIZE, MAXSIZE – minimums-/maksimumsstørrelse for caching af filer
TIMEOUT – timeout mellem forsøg på caching

Du kan finde den fulde liste over specifikationer via linket.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster