Оё суръати нигоҳдорӣ барои etcd мувофиқ аст? Биёед аз фио пурсем

Оё суръати нигоҳдорӣ барои etcd мувофиқ аст? Биёед аз фио пурсем

Ҳикояи кӯтоҳ дар бораи fio ва ғайра

Фаъолияти кластер ва ғайра бештар ба кори нигахдории он вобаста аст. etcd баъзе ченакҳоро ба Prometheusбарои таъмин намудани маълумоти иҷрои нигоҳдории шумо лозим аст. Масалан, метрикӣ wal_fsync_duration_seconds. Дар ҳуҷҷатҳои etcd гуфта мешавад: Барои он ки нигоҳдорӣ ба қадри кофӣ зуд ҳисобида шавад, фоизи 99-уми ин метрика бояд аз 10 мс камтар бошад. Агар шумо ният дошта бошед, ки кластери etcd-ро дар мошинаҳои Linux идора кунед ва хоҳед, ки санҷед, ки захираи шумо (масалан, SSD) кофӣ зуд аст, шумо метавонед истифода баред fio асбоби маъмул барои санҷиши амалиёти I/O аст. Фармони зеринро иҷро кунед, ки дар он ҷо test-data феҳристи зери нуқтаи васлкунии нигаҳдорӣ аст:

fio --rw=write --ioengine=sync --fdatasync=1 --directory=test-data --size=22m --bs=2300 --name=mytest

Шумо танҳо лозим аст, ки ба натиҷаҳо назар кунед ва санҷед, ки 99 фоизи давомнок аст fdatasync камтар аз 10 мс. Агар ҳа, шумо захираи кофӣ зуд доред. Дар ин ҷо як мисоли натиҷаҳост:

  sync (usec): min=534, max=15766, avg=1273.08, stdev=1084.70
  sync percentiles (usec):
   | 1.00th=[ 553], 5.00th=[ 578], 10.00th=[ 594], 20.00th=[ 627],
   | 30.00th=[ 709], 40.00th=[ 750], 50.00th=[ 783], 60.00th=[ 1549],
   | 70.00th=[ 1729], 80.00th=[ 1991], 90.00th=[ 2180], 95.00th=[ 2278],
   | 99.00th=[ 2376], 99.50th=[ 9634], 99.90th=[15795], 99.95th=[15795],
   | 99.99th=[15795]

ёддошт

  • Мо арзишҳои параметрҳои -size ва -bs -ро барои сенарияи мушаххаси худ фармоиш додем. Барои ба даст овардани натиҷаҳои муфид аз fio, арзишҳои худро ворид кунед. Ман онҳоро аз куҷо гирифта метавонам? Хондан, чӣ тавр мо конфигуратсияи fio-ро ёд гирифтем.
  • Ҳангоми санҷиш, ҳама бори I/O аз fio меояд. Дар сенарияи воқеии воқеӣ, эҳтимол дорад, ки дархостҳои дигари навиштан ба анбор нисбат ба онҳое, ки бо wal_fsync_duration_seconds алоқаманданд, ворид шаванд. Сарбории иловагӣ арзиши wal_fsync_duration_secondsро зиёд мекунад. Ҳамин тавр, агар фоизи 99-ум қариб 10 мс бошад, нигоҳдории шумо ба қадри кофӣ зуд нест.
  • Версияро гиред fio на камтар аз 3.5 (дар пештара фоизи давомнокии fdatasyncро нишон намедиҳанд).
  • Дар боло танҳо як пораи натиҷаҳо аз fio оварда шудааст.

Ҳикояи дароз дар бораи fio ва ғайра

WAL дар ва ғайра чист?

Одатан пойгоҳи додаҳо истифода мешаванд сабти пешакӣ навиштан; etcd низ онро истифода мебарад. Мо дар ин ҷо гузориши пешакӣ навиштанро (WAL) ба таври муфассал баррасӣ намекунем. Барои мо донистани он кифоя аст, ки ҳар як узви кластери etcd онро дар нигаҳдории доимӣ нигоҳ медорад. etcd ҳар як амалиётро дар ҷуфтҳои калид-арзиш (ба монанди навсозӣ) ба WAL пеш аз татбиқи онҳо дар мағоза менависад. Агар яке аз аъзои нигаҳдорӣ дар байни аксҳо шикаст хӯрад ва аз нав оғоз кунад, он метавонад транзаксияҳоро аз акси охирин бо истифода аз мундариҷаи WAL ба таври маҳаллӣ барқарор кунад.

Вақте ки муштарӣ калидро ба мағозаи арзишҳои калидӣ илова мекунад ё арзиши калиди мавҷударо нав мекунад, etcd сабти ин амалиётро ба WAL менависад, ки файли муқаррарӣ дар нигаҳдории доимӣ мебошад. etcd БОЯД комилан мутмаин бошад, ки навиштани WAL воқеан пеш аз идомаи коркард рух додааст. Дар Linux, як занги системавӣ барои ин кофӣ нест навиштан, зеро воқеан навиштан ба нигаҳдории ҷисмонӣ метавонад таъхир шавад. Масалан, Linux метавонад сабти WAL-ро муваққатан дар кэш дар хотираи ядро ​​нигоҳ дорад (масалан, кэши саҳифа). Ва барои он ки маълумот ба нигаҳдории доимӣ дақиқ навишта шавад, пас аз сабт занги системаи fdatasync лозим аст ва etcd танҳо онро истифода мебарад (чунон ки дар натиҷаи кор дида мешавад) стресс, ки дар он 8 тавсифи файли WAL аст):

21:23:09.894875 lseek(8, 0, SEEK_CUR)   = 12808 <0.000012>
21:23:09.894911 write(8, ". 20210220361223255266632$10 20103026"34"rn3fo"..., 2296) = 2296 <0.000130>
21:23:09.895041 fdatasync(8)            = 0 <0.008314>

Мутаассифона, навиштан ба нигаҳдории доимӣ фаврӣ нест. Агар занги fdatasync суст бошад, кори системаи etcd паст мешавад. Дар ҳуҷҷатҳои etcd гуфта мешавадки нигоҳдорӣ кофӣ зуд ҳисобида мешавад, агар фоизи 99-уми зангҳои fdatasync барои навиштан ба файли WAL камтар аз 10 мс лозим шавад. Дигар ченакҳои муфиди нигаҳдорӣ вуҷуд доранд, аммо ин ягона ченакест, ки мо дар ин мақола сухан меронем.

Арзёбии нигаҳдорӣ бо истифода аз fio

Агар ба шумо лозим ояд, ки арзёбӣ кунед, ки оё нигаҳдории шумо барои etcd мувофиқ аст, fio, асбоби хеле маъмули санҷиши сарбории I/O-ро истифода баред. Дар хотир бояд дошт, ки амалиёти диск метавонад хеле гуногун бошад: синхронӣ ва асинхронӣ, синфҳои зиёди зангҳои системавӣ ва ғайра. Дар натиҷа, истифода бурдани fio хеле душвор аст. Он параметрҳои зиёд дорад ва омезиши гуногуни арзишҳои онҳо сарбории кории хеле гуногуни вуруд/баҳоро ба вуҷуд меорад. Барои гирифтани рақамҳои мувофиқ барои etcd, шумо бояд боварӣ ҳосил кунед, ки ҳангоми навиштани файлҳои WAL сарбории навиштани санҷиш аз fio ба бори воқеии etcd то ҳадди имкон наздик бошад.

Аз ин рӯ, fio бояд ҳадди аққал як миқдори навиштҳои пайдарпайро ба файл тавлид кунад, ки ҳар як навиштан аз занги система иборат аст. навиштанпас аз он занги системаи fdatasync. Барои навиштани пайдарпайи fio, опсияи --rw=write лозим аст. Ҳамин тавр, fio занги системаи навиштанро ҳангоми навиштан истифода мебарад, на нависед, муайян кардани параметри –ioengine=sync аст. Дар ниҳоят, барои занг задани fdatasync пас аз ҳар як навиштан, шумо бояд --fdatasync=1 хосиятро илова кунед. Ду варианти дигар дар ин мисол (--size ва -bs) ба сенария хосанд. Дар фасли оянда мо ба шумо нишон медиҳем, ки чӣ гуна онҳоро танзим кардан мумкин аст.

Чаро fio ва чӣ гуна мо танзим кардани онро ёд гирифтем

Дар ин мақола мо як ҳолати воқеиро тасвир мекунем. Мо кластер доштем Кубернитель v1.13, ки мо бо истифода аз Prometheus назорат кардем. etcd v3.2.24 дар SSD ҷойгир карда шуд. Метрикҳои Etcd барои fdatasync таъхири хеле баландро нишон доданд, ҳатто вақте ки кластер ҳеҷ коре намекард. Метрикҳо аҷиб буданд ва мо аслан намедонистем, ки онҳо чӣ маъно доранд. Кластер аз мошинҳои виртуалӣ иборат буд, фаҳмидан лозим буд, ки мушкилот чӣ гуна аст: дар SSD-ҳои физикӣ ё қабати виртуализатсия. Илова бар ин, мо зуд-зуд ба конфигуратсияҳои сахтафзор ва нармафзор тағйирот ворид мекардем ва ба мо роҳи арзёбии натиҷаҳои онҳо лозим буд. Мо метавонем etcd-ро дар ҳар як конфигуратсия иҷро кунем ва ба ченакҳои Prometheus назар кунем, аммо ин хеле душвор аст. Мо роҳи хеле соддаи арзёбии конфигуратсияи мушаххасро ҷустуҷӯ мекардем. Мо мехостем тафтиш кунем, ки оё ченакҳои Prometheus etcd дуруст фаҳмидем ё не.

Аммо барои ин ду масъаларо хал кардан лозим буд. Аввалан, бори I/O, ки etcd ҳангоми навиштан ба WAL эҷод мекунад, чӣ гуна аст? Кадом зангҳои системавӣ истифода мешаванд? Постҳо чӣ андоза доранд? Дуюм, агар мо ба ин саволҳо ҷавоб диҳем, чӣ гуна мо метавонем як бори кориро бо fio такрор кунем? Фаромӯш накунед, ки fio як воситаи хеле фасеҳ бо имконоти зиёд аст. Мо ҳарду масъаларо бо як равиш - бо истифода аз фармонҳо ҳал кардем лоф и стресс. lsof ҳамаи тавсифи файлҳои аз ҷониби раванд истифодашаванда ва файлҳои алоқаманди онҳоро нишон медиҳад. Ва бо strace шумо метавонед як раванди аллакай иҷрошавандаро омӯзед ё равандро оғоз кунед ва онро омӯзед. strace ҳамаи зангҳои системаро аз раванди омӯхташаванда (ва равандҳои кӯдаки он) чоп мекунад. Охирин хеле муҳим аст, зеро etcd муносибати шабеҳро мегирад.

Аввалин коре, ки мо кардем, истифодаи strace барои омӯзиши сервери etcd барои Kubernetes буд, вақте ки дар кластер сарборӣ набуд. Мо дидем, ки қариб ҳамаи сабтҳои WAL тақрибан як андоза буданд: 2200–2400 байт. Аз ин рӯ, дар фармони аввали паём, мо параметри -bs = 2300 -ро муайян кардем (bs маънои андозаи байтро барои ҳар як вуруди fio дорад). Дар хотир доред, ки андозаи вурудоти etcd аз версияи etcd, интиқол, арзишҳои параметр ва ғайра вобаста аст ва ба давомнокии fdatasync таъсир мерасонад. Агар шумо як сенарияи шабеҳ дошта бошед, равандҳои etcd-и худро бо истифода аз strace тафтиш кунед, то рақамҳои дақиқро пайдо кунед.

Сипас, барои гирифтани тасаввуроти хуб дар бораи он, ки системаи файлии etcd чӣ кор мекунад, мо онро бо strace ва имконоти -ffttT иҷро кардем. Ҳамин тавр, мо кӯшиш кардем, ки равандҳои кӯдакро омӯзем ва натиҷаи ҳар яки онҳоро дар файли алоҳида сабт кунем ва инчунин дар бораи оғоз ва давомнокии ҳар як занги система гузоришҳои муфассал гирем. Мо lsof-ро барои тасдиқи таҳлили баромади strace истифода бурдем ва бубинем, ки кадом дескриптори файл бо кадом мақсадҳо истифода шудааст. Ҳамин тавр, бо истифода аз strace, мо натиҷаҳои дар боло нишондодашударо ба даст овардем. Омори вақти ҳамоҳангсозӣ тасдиқ кард, ки метрикаи wal_fsync_duration_seconds аз etcd ба зангҳои fdatasync бо тавсифи файли WAL мувофиқат мекунад.

Мо ба ҳуҷҷатҳои fio назар кардем ва параметрҳои скрипти худро интихоб кардем, то fio сарбории монанд ба etcd тавлид кунад. Мо инчунин зангҳои система ва давомнокии онҳоро тавассути иҷро кардани fio аз strace, ба монанди ғайра тафтиш кардем.

Мо арзиши параметри --size-ро бодиққат интихоб кардем, ки тамоми сарбории I/O-ро ифода мекунад. Дар ҳолати мо, ин шумораи умумии байтҳои ба анбор навишташуда мебошад. Маълум шуд, ки ба шумораи зангҳои системаи навиштан (ва fdatasync) мутаносиб аст. Барои арзиши муайяни bs, шумораи зангҳо ба fdatasync = андоза/bs. Азбаски мо ба фоиз таваҷҷӯҳ доштем, ба мо лозим буд, ки намунаҳои кофӣ дошта бошем, то эътимод дошта бошем ва мо ҳисоб кардем, ки 10^4 барои мо кофӣ хоҳад буд (ин 22 мебибайт аст). Агар --size хурдтар бошад, нишондиҳандаҳои берунӣ метавонанд ба вуқӯъ оянд (масалан, якчанд зангҳои fdatasync аз маъмулӣ бештар вақт мегиранд ва ба фоизи 99-ум таъсир мерасонанд).

Худатон кӯшиш кунед

Мо нишон додем, ки чӣ тавр истифода бурдани fio ва фаҳмем, ки оё нигоҳдорӣ кофӣ аст, то etcd хуб кор кунад. Акнун шумо метавонед инро дар амал худ истифода баред, масалан, мошинҳои виртуалӣ бо нигоҳдории SSD дар IBM Cloud.

Манбаъ: will.com

Илова Эзоҳ