Zvýšení hustoty kontejneru na uzlu pomocí technologie PFCACHE

Zvýšení hustoty kontejneru na uzlu pomocí technologie PFCACHE

Jedním z cílů poskytovatele hostingu je maximalizovat využití stávajícího zařízení za účelem poskytování vysoce kvalitních služeb koncovým uživatelům. Zdroje koncových serverů jsou vždy omezené, ale počet hostovaných klientských služeb, a v našem případě mluvíme o VPS, se může výrazně lišit. Přečtěte si o tom, jak vylézt na strom a sníst hamburger pod řezem.

Zhutnění VPS na uzlu tak, aby to klienti vůbec nepocítili, výrazně pomáhá zvýšit ekonomickou výkonnost jakéhokoli poskytovatele hostingu. Uzel by samozřejmě neměl praskat ve švech, pokud je nacpaný plnými kontejnery a každý nárůst zátěže okamžitě pocítí všichni klienti.

Kolik VPS může být hostováno na jednom uzlu, závisí na mnoha faktorech, jako jsou ty zřejmé, jako jsou:

1. Charakteristika hardwaru samotného uzlu
2. Velikost VPS
3. Charakter zatížení VPS
4. Softwarové technologie, které pomáhají optimalizovat hustotu

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

Pfcache – mechanismus Virtuozzo, který pomáhá deduplikovat IOPS a RAM v kontejnerech a přiděluje identické soubory v kontejnerech do samostatné společné oblasti.

Ve skutečnosti se skládá z:
1. Kód jádra
2. Démon uživatelského prostoru
3. Nástroje uživatelského prostoru

Na straně uzlu alokujeme celou sekci, ve které se budou vytvářet soubory, které budou přímo používat všechny VPS na uzlu. V této sekci je namontováno blokové ploop zařízení. Poté, když se kontejner spustí, obdrží odkaz na tuto sekci:

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

Zde jsou přibližné statistiky 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 pfcache je následující:
• Démon uživatelského prostoru Pfcached zapíše hash sha-1 souboru do atributu xattr tohoto souboru. Ne všechny soubory jsou zpracovávány, ale pouze v adresářích /usr, /bin, /usr/sbin, /sbin, /lib, /lib64

• Je velmi pravděpodobné, že soubory v těchto adresářích budou „sdíleny“ a budou používány několika kontejnery;

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

• Tyto adresáře se mohou lišit a jsou konfigurovány v konfiguračních souborech.

• Při čtení souboru se kontroluje, zda obsahuje zadaný hash v rozšířených atributech xattr. Pokud obsahuje, otevře se místo kontejneru soubor „obecný“. K této záměně dochází bez povšimnutí kódem kontejneru a je skryta v jádře;

• Při zápisu do souboru je hash zrušen. Při příštím otevření se tedy otevře samotný soubor kontejneru, nikoli jeho mezipaměť.

Uchováváním sdílených souborů z /vz/pfcache v mezipaměti stránek dosáhneme úspory v této cache samotné a také úspory v IOPS místo čtení deseti souborů z disku čteme jeden, který jde okamžitě do cache stránky.

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

Seznam VMA pro soubor zůstává jediný (odstraňujeme duplicitní paměť) a čte se z disku méně často (šetříme iops). Náš společný fond je umístěn na SSD – další zvýšení rychlosti.

Příklad ukládání souboru /bin/bash do mezipaměti:

[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

Vypočítáme efektivitu využití hotový scénář.

Tento skript prochází všemi kontejnery v uzlu a vypočítává soubory v mezipaměti každého kontejneru.

[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

Z paměti tedy uložíme asi 40 gigabajtů souborů v kontejnerech, které budou načteny z mezipaměti.

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

pfcache můžete vyladit pomocí konfiguračního souboru
/etc/vz/pfcache.conf

MINSIZE, MAXSIZE – minimální/maximální velikost souboru pro ukládání do mezipaměti
TIMEOUT – časový limit mezi pokusy o uložení do mezipaměti

Můžete si prohlédnout úplný seznam parametrů по ссылке.

Zdroj: www.habr.com

Přidat komentář