Pliigante ujan densecon sur nodo uzante PFCACHE-teknologion

Pliigante ujan densecon sur nodo uzante PFCACHE-teknologion

Unu el la celoj de la gastiga provizanto estas maksimumigi la utiligon de ekzistantaj ekipaĵoj por provizi altkvalitan servon al finaj uzantoj. La rimedoj de finaj serviloj ĉiam estas limigitaj, sed la nombro da gastigitaj klientservoj, kaj en nia kazo ni parolas pri VPS, povas signife diferenci. Legu pri kiel grimpi la arbon kaj manĝi hamburgeron sub la tranĉo.

Kompakti VPS sur nodo tiel, ke klientoj tute ne sentas ĝin multe helpas pliigi la ekonomian rendimenton de iu ajn gastiganta provizanto. Kompreneble, nodo ne krevu ĉe la kudroj, se ĝi estas plenplena de ujoj, kaj ajna kresko de ŝarĝo tuj sentas ĉiujn klientojn.

Kiom da VPS povas esti gastigitaj sur unu nodo dependas de multaj faktoroj, tiaj evidentaj kiel:

1. Karakterizaĵoj de la aparataro de la nodo mem
2. VPS-grandeco
3. Naturo de la ŝarĝo sur la VPS
4. Programaj teknologioj kiuj helpas optimumigi densecon

En ĉi tiu kazo, ni dividos nian sperton uzi Pfcache-teknologion por Virtuozzo.
Ni uzas la 6-an branĉon, sed ĉio dirita validas ankaŭ por la 7-a.

Pfcache - Virtuozzo-mekanismo kiu helpas maldupliki IOPS kaj RAM en ujoj, asignante identajn dosierojn en ujoj en apartan komunan areon.

Fakte ĝi konsistas el:
1. Kernelkodo
2. Uzant-spaca demono
3. Uzant-spacaj utilecoj

Sur la noda flanko, ni asignas tutan sekcion en kiu dosieroj estos kreitaj, kiuj estos rekte uzataj de ĉiuj VPS sur la nodo. Bloka ploop aparato estas muntita en ĉi tiu sekcio. Tiam, kiam la ujo komenciĝas, ĝi ricevas referencon por ĉi tiu sekcio:

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

Jen proksimuma statistiko pri la nombro da dosieroj sur unu el niaj nodoj:

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

La principo de pfcache estas kiel sekvas:
• La uzantspaca demono Pfcached skribas la sha-1 hash de la dosiero al la xattr-atributo de ĉi tiu dosiero. Ne ĉiuj dosieroj estas prilaboritaj, sed nur en la dosierujoj /usr, /bin, /usr/sbin, /sbin, /lib, /lib64.

• Plej verŝajne la dosieroj en ĉi tiuj dosierujoj estos "dividitaj" kaj estos uzataj de pluraj ujoj;

• Pfcached periode kolektas statistikojn pri legado de dosieroj el la kerno, analizas ĝin kaj aldonas dosierojn al la kaŝmemoro se ili estas ofte uzataj;

• Ĉi tiuj dosierujoj povas esti malsamaj kaj estas agorditaj en agordaj dosieroj.

• Legante dosieron, oni kontrolas ĉu ĝi enhavas la specifitan haŝon en la etenditaj atributoj de xattr. Se ĝi enhavas, la "ĝenerala" dosiero estas malfermita anstataŭ la ujo dosiero. Ĉi tiu anstataŭigo okazas nerimarkite de la ujo-kodo kaj estas kaŝita en la kerno;

• Kiam oni skribas al dosiero, la hash estas malvalidigita. Tiel, la venontan fojon kiam vi malfermos ĝin, la ujo-dosiero mem estos malfermita, kaj ne ĝia kaŝmemoro.

Konservante komunajn dosierojn de /vz/pfcache en la paĝa kaŝmemoro, ni atingas ŝparojn en ĉi tiu kaŝmemoro mem, same kiel ŝparojn en IOPS.Anstataŭ legi dek dosierojn el disko, ni legas unu, kiu tuj iras al la paĝa kaŝmemoro.

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

La VMA-listo por la dosiero restas ununura (ni malduplikas memoron) kaj estas legita el disko malpli ofte (ŝparante iops). Nia komuna fonduso situas sur SSD - plia gajno en rapideco.

Ekzemplo por konservi la dosieron /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

Ni kalkulas la efikecon de uzo preta skripto.

Ĉi tiu skripto trairas ĉiujn ujojn sur la nodo, kalkulante la kaŝmemoritajn dosierojn de ĉiu ujo.

[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

Tiel, el memoro ni konservas ĉirkaŭ 40 gigabajtojn da dosieroj en ujoj; ili estos ŝarĝitaj el la kaŝmemoro.

Por ke ĉi tiu mekanismo funkciu eĉ pli bone, necesas meti la plej "identan" VPS sur la nodo. Ekzemple, tiuj al kiuj la uzanto ne havas radikan aliron kaj sur kiuj la medio de la deplojita bildo estas agordita.

Vi povas agordi pfcache per la agorda dosiero
/etc/vz/pfcache.conf

MINSIZE, MAXSIZE - minimuma/maksimuma dosiergrandeco por kaŝmemoro
TIMEOUT - timeout inter kaŝmemorprovoj

Vi povas vidi la plenan liston de parametroj ligilo.

fonto: www.habr.com

Aldoni komenton