Zvýšení hustoty kontejnerů na uzlu pomocí technologie PFCACHE

Zvýšení hustoty kontejnerů na uzlu pomocí technologie PFCACHE

Jedním z cílů poskytovatele hostingu je maximální využití dostupného vybavení pro poskytování kvalitních služeb koncovým uživatelům. Zdroje koncových serverů jsou vždy omezené, avšak počet umístěných klientských služeb, v našem případě mluvíme o VPS, se může významně lišit. O tom, jak se dostat na stromeček a sníst burger, čtěte dále.

Zahuštění VPS na uzlu tak, aby to klienti vůbec necítili, výrazně pomáhá zlepšovat ekonomické ukazatele každého poskytovatele hostingu. Nezbytně platí, že uzel nesmí prasknout ve švech, pokud je do něj natlačeno příliš mnoho kontejnerů, a jakýkoli nárůst zátěže okamžitě pocítí všichni klienti.

Kolik VPS může být umístěno na jednom uzlu, závisí na mnoha faktorech, z nichž některé jsou zřejmé, jako:

1. Vlastnosti hardwaru samotného uzlu
2. Velikost VPS
3. Povaha zátěže na VPS
4. Technologie softwaru, které pomáhají optimalizovat hustotu

V tomto případě se podělíme o zkušenosti s použitím technologie Pfcache pro Virtuozzo.
Používáme 6. větev, ale to, co bylo řečeno, platí také pro 7.

Pfcache – mechanismus Virtuozzo, který pomáhá deduplikovat IOPS a RAM v kontejnerech tím, že vyčleňuje shodné soubory v kontejnerech do samostatné sdílené zóny.

Fakticky se skládá z:
1. Kódu jádra
2. User-space démona
3. User-space utilit

Na straně uzlu vyčleňujeme celý oddíl, ve kterém budou vytvářeny soubory, kterými budou přímo používat všechny VPS na uzlu. Tento oddíl se montuje jako blokové zařízení ploop. Dále při spuštění kontejneru dostává referenci na tento oddíl:

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

Tady je přibližná statistika počtu souborů na jednom z našich uzlů:

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

Princip fungování pfcache je následující:
• User-space démon Pfcached zapisuje sha-1 hash souboru do xattr atributu tohoto souboru. Soubory se zpracovávají pouze v adresářích /usr, /bin, /usr/sbin, /sbin, /lib, /lib64.

• Je velmi pravděpodobné, že soubory v těchto adresářích budou "společné" a budou použity několika kontejnery;

• Pfcached pravidelně shromažďuje statistiky čtení souborů z jádra, analyzuje je a přidává soubory do cache, pokud jsou často používány;

• Cesta k adresářům může být jiná a nastavuje se v konfiguračních souborech.

• Při čtení souboru se kontroluje, zda obsahuje uvedený hash v rozšířených atributech xattr. Pokud ano, otevře se "společný" soubor místo kontejnerového souboru. Tento přechod se děje nepozorovaně pro kód kontejneru a skrývá se v jádře;

• Při zápisu do souboru se hash invaliduje. Při následném otevření se tedy otevře již přímo kontejnerový soubor, nikoli jeho cache.

Udržením společných souborů v stránkovém cache z /vz/pfcache dosahujeme úspor v této cache a také úspor IOPS. Místo čtení deseti souborů z disku čteme jeden, který jde přímo do stránkového cache.

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

Seznam VMA pro soubor zůstává jednotný (deduplikuje paměť) a z disku se čte méně často (šetríme iops). Náš "spolek" je umístěn na SSD – další výhoda v rychlosti.

Příklad pro cachování souboru /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

Účinnost využití se počítá hotovým skriptem.

Tento skript prochází všemi kontejnery na uzlu a počítá uložené soubory každého kontejneru.

[root@pcs16 ~]# /pcs/distr/pfcache-examine.pl
...
Pfcache cache používá 831 MB paměti
Celková spotřeba pfcached souborů v kontejnerech je 39837 MB paměti
Účinnost pfcache: 39006 MB

Tímto způsobem ušetříme asi 40 gigabajtů souborů v kontejnerech, které budou načítány z cache.

Aby tento mechanismus fungoval ještě lépe, je nutné umístit na uzel co nejvíce "stejných" VPS. Například ty, ke kterým uživatel nemá root přístup a na kterých je nastavena prostředí z rozšířeného obrazu.

Práci pfcache lze ladit přes konfigurační soubor
/etc/vz/pfcache.conf

MINSIZE, MAXSIZE – minimální/maximální velikost souboru pro cachování
TIMEOUT – timeout mezi pokusy o cachování

S kompletním seznamem parametrů se můžete seznámit na odkazu.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster