PFCACHE технологиясын пайдаланып түйіндегі контейнер тығыздығын арттыру

PFCACHE технологиясын пайдаланып түйіндегі контейнер тығыздығын арттыру

Хостинг провайдерінің мақсаттарының бірі соңғы пайдаланушыларға жоғары сапалы қызмет көрсету үшін бар жабдықты барынша пайдалану болып табылады. Соңғы серверлердің ресурстары әрқашан шектеулі, бірақ орналастырылған клиенттік қызметтердің саны, ал біздің жағдайда VPS туралы айтып отырмыз, айтарлықтай ерекшеленуі мүмкін. Ағашқа шығу және кесілген жердің астындағы бургерді қалай жеу туралы оқыңыз.

Түйіндегі VPS-ті клиенттер оны мүлдем сезбейтін етіп ықшамдау кез келген хостинг провайдерінің экономикалық өнімділігін арттыруға айтарлықтай көмектеседі. Әрине, түйін контейнерлерге толы болса, тігістерде жарылып кетпеуі керек және жүктеменің кез келген көтерілуін барлық клиенттер бірден сезінеді.

Бір түйінде қанша VPS орналастыруға болатыны көптеген факторларға байланысты, мысалы:

1. Түйіннің өзінің аппараттық құралдарының сипаттамасы
2. VPS өлшемі
3. VPS жүктемесінің сипаты
4. Тығыздықты оңтайландыруға көмектесетін бағдарламалық қамтамасыз ету технологиялары

Бұл жағдайда біз Virtuozzo үшін Pfcache технологиясын пайдалану тәжірибемізбен бөлісеміз.
Біз 6-шы тармақты қолданамыз, бірақ айтылғандардың бәрі 7-ші үшін де дұрыс.

Pfcache – Контейнерлердегі бірдей файлдарды бөлек ортақ аймаққа бөле отырып, контейнерлердегі IOPS және ЖЖҚ қайталануына көмектесетін Virtuozzo механизмі.

Іс жүзінде ол мыналардан тұрады:
1. Ядро коды
2. Пайдаланушы-кеңістік жын
3. Пайдаланушы-кеңістік утилиталары

Түйін жағында біз файлдар жасалатын тұтас бөлімді бөлеміз, оны түйіндегі барлық VPS тікелей пайдаланатын болады. Бұл бөлімде блок-плооп құрылғысы орнатылған. Содан кейін, контейнер іске қосылғанда, ол осы бөлімге сілтеме алады:

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

Міне, біздің түйіндеріміздің біріндегі файлдар санының шамамен статистикасы:

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

pfcache принципі келесідей:
• Pfcached пайдаланушы кеңістігі демоны файлдың sha-1 хэшін осы файлдың xattr атрибутына жазады. Барлық файлдар өңделмейді, бірақ /usr, /bin, /usr/sbin, /sbin, /lib, /lib64 каталогтарында ғана өңделеді.

• Бұл каталогтардағы файлдардың «ортақ» болуы және бірнеше контейнерлер пайдалануы ықтимал;

• Pfcached мезгіл-мезгіл ядродан файлдарды оқу статистикасын жинайды, оны талдайды және файлдарды олар жиі пайдаланылса, кэшке қосады;

• Бұл каталогтар әртүрлі болуы мүмкін және конфигурация файлдарында конфигурацияланған.

• Файлды оқу кезінде xattr кеңейтілген атрибуттарында көрсетілген хэштің бар-жоғы тексеріледі. Онда бар болса, контейнер файлының орнына «жалпы» файл ашылады. Бұл ауыстыру контейнер коды байқамай жүреді және ядрода жасырылады;

• Файлға жазу кезінде хэш жарамсыз болып табылады. Осылайша, келесі жолы оны ашқанда, кэш емес, контейнер файлының өзі ашылады.

Бет кэшінде /vz/pfcache ортақ файлдарын сақтау арқылы біз осы кэштің өзінде үнемдеуге, сонымен қатар IOPS-те үнемдеуге қол жеткіземіз.Дисктен он файлды оқудың орнына, біз бірден бет кэшіне өтетін біреуін оқимыз.

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

Файлға арналған VMA тізімі жалғыз болып қалады (біз жадты қайталаймыз) және дискіден сирек оқылады (IOPS сақтау). Біздің ортақ қорымыз SSD-де орналасқан - бұл қосымша жылдамдықты арттыру.

/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

Қолдану тиімділігін есептейміз дайын сценарий.

Бұл сценарий әрбір контейнердің кэштелген файлдарын есептей отырып, түйіндегі барлық контейнерлерден өтеді.

[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

Осылайша, жадтан біз контейнерлерде шамамен 40 гигабайт файлдарды сақтаймыз, олар кэштен жүктеледі.

Бұл механизм одан да жақсы жұмыс істеуі үшін түйінге ең «бірдей» VPS орналастыру керек. Мысалы, пайдаланушының түбірлік қатынасы жоқ және орналастырылған кескіндегі орта конфигурацияланғандар.

Сіз pfcache файлын конфигурациялау файлы арқылы баптай аласыз
/etc/vz/pfcache.conf

MINSIZE, MAXSIZE – кэштеу үшін ең аз/максималды файл өлшемі
TIMEOUT – кэштеу әрекеттері арасындағы күту уақыты

Параметрлердің толық тізімін көруге болады байланыс.

Ақпарат көзі: www.habr.com

пікір қалдыру