KÄ pÄrbaudÄ«t diskus ar fio pietiekamu veiktspÄju utt
PiezÄ«me. tulk.: Å is raksts ir mini-pÄtÄ«juma rezultÄts, ko veica IBM Cloud inženieri, meklÄjot risinÄjumu reÄlai problÄmai, kas saistÄ«ta ar etcd datu bÄzes darbÄ«bu. LÄ«dzÄ«gs uzdevums bija aktuÄls arÄ« mums, tomÄr autoru pÄrdomu gaita un rÄ«cÄ«ba var bÅ«t interesanta plaÅ”ÄkÄ kontekstÄ.
ÄŖss visa raksta kopsavilkums: fio un etc
etcd klastera veiktspÄja ir ļoti atkarÄ«ga no pamatÄ esoÅ”Äs krÄtuves Ätruma. etcd eksportÄ dažÄdus Prometheus rÄdÄ«tÄjus, lai uzraudzÄ«tu veiktspÄju. Viens no tiem ir wal_fsync_duration_seconds. DokumentÄcijÄ par etcd tÄ sakaka uzglabÄÅ”anu var uzskatÄ«t par pietiekami Ätru, ja Ŕīs metrikas 99. procentile nepÄrsniedz 10 msā¦
Ja apsverat iespÄju izveidot etcd klasteru Linux iekÄrtÄs un vÄlaties pÄrbaudÄ«t, vai diskdziÅi (piemÄram, SSD) ir pietiekami Ätri, mÄs iesakÄm izmantot populÄro I/O testeri ar nosaukumu. FIO. Pietiek palaist Å”Ädu komandu (direktoriju test-data jÄatrodas pÄrbaudÄ«tÄ diskdziÅa uzstÄdÄ«tajÄ nodalÄ«jumÄ):
Atliek tikai apskatÄ«t izvadi un pÄrbaudÄ«t, vai 99. procentile atbilst fdatasync 10 ms laikÄ. Ja tÄ, tad jÅ«su disks darbojas pietiekami Ätri. Å eit ir izvades piemÄrs:
IepriekÅ” minÄtajÄ piemÄrÄ mÄs esam pielÄgojuÅ”i parametrus --size Šø --bs konkrÄtam gadÄ«jumam. Lai iegÅ«tu jÄgpilnu rezultÄtu no fio, norÄdiet jÅ«su lietoÅ”anas gadÄ«jumam atbilstoÅ”as āāvÄrtÄ«bas. KÄ tos izvÄlÄties, tiks apspriests tÄlÄk.
Tikai pÄrbaudes laikÄ fio ielÄdÄ diska apakÅ”sistÄmu. ReÄlajÄ dzÄ«vÄ ir iespÄjams, ka diskÄ tiks ierakstÄ«ti citi procesi (izÅemot tos, kas saistÄ«ti ar wal_fsync_duration_seconds). Å Ä« papildu slodze var palielinÄties wal_fsync_duration_seconds. Citiem vÄrdiem sakot, ja 99. procentile no testÄÅ”anas ar fio, tikai nedaudz mazÄk par 10 ms, pastÄv liela iespÄja, ka uzglabÄÅ”anas veiktspÄja nav pietiekama.
PÄrbaudei jums bÅ«s nepiecieÅ”ama versija fio ne mazÄk kÄ 3.5, jo vecÄkÄs versijÄs rezultÄti netiek apkopoti fdatasync procentiļu veidÄ.
IepriekÅ” minÄtais secinÄjums ir tikai neliels izvilkums no vispÄrÄjÄ secinÄjuma fio.
VairÄk par fio un utt
Daži vÄrdi par WAL utt
Parasti izmanto datu bÄzes proaktÄ«va mežizstrÄde (iepriekÅ”Äja reÄ£istrÄÅ”ana, WAL). tiek ietekmÄta arÄ« etcd. Diskusija par WAL neietilpst Å”ajÄ rakstÄ, taÄu mÅ«su vajadzÄ«bÄm jums jÄzina, ka katrs etcd klastera dalÄ«bnieks WAL glabÄ pastÄvÄ«gÄ krÄtuvÄ. etcd pirms to izpildes ieraksta dažas atslÄgu vÄrtÄ«bu uzglabÄÅ”anas darbÄ«bas (piemÄram, atjauninÄjumus) WAL. Ja mezgls avarÄ un tiek restartÄts starp momentuzÅÄmumiem, etcd var atgÅ«t transakcijas kopÅ” iepriekÅ”ÄjÄ momentuzÅÄmuma, pamatojoties uz WAL saturu.
TÄdÄjÄdi katru reizi, kad klients pievieno atslÄgu KV veikalam vai atjaunina esoÅ”Äs atslÄgas vÄrtÄ«bu, etcd pievieno darbÄ«bas aprakstu WAL, kas ir parasts fails pastÄvÄ«gajÄ veikalÄ. etcd Pirms turpinÄt, JÄBÅŖT 100% pÄrliecinÄtam, ka WAL ieraksts patieÅ”Äm ir saglabÄts. Lai to panÄktu operÄtÄjsistÄmÄ Linux, nepietiek tikai ar sistÄmas izsaukuma izmantoÅ”anu write, jo pati rakstÄ«Å”anas darbÄ«ba fiziskajÄ datu nesÄjÄ var aizkavÄties. PiemÄram, Linux kÄdu laiku var saglabÄt WAL ierakstu kodola keÅ”atmiÅÄ (piem., lapas keÅ”atmiÅÄ). Lai nodroÅ”inÄtu datu ierakstÄ«Å”anu datu nesÄjÄ, pÄc rakstÄ«Å”anas ir jÄizsauc sistÄmas izsaukums fdatasync - tieÅ”i to dara etcd (kÄ redzat nÄkamajÄ izvadÄ strace; Å eit 8 - WAL faila deskriptors):
DiemžÄl rakstÄ«Å”ana uz pastÄvÄ«gu krÄtuvi aizÅem kÄdu laiku. IlgstoÅ”a fdatasync zvanu izpilde var ietekmÄt etcd veiktspÄju. Repozitorija dokumentÄcijÄ norÄdÄ«ts, ka pietiekamai veiktspÄjai ir nepiecieÅ”ams, lai visu zvanu ilguma 99. procentile fdatasync rakstot uz WAL failu, bija mazÄks par 10 ms. Ir arÄ« citi ar krÄtuvi saistÄ«ti rÄdÄ«tÄji, taÄu Å”ajÄ rakstÄ galvenÄ uzmanÄ«ba tiks pievÄrsta tam.
NovÄrtÄjot uzglabÄÅ”anu ar fio
Izmantojot utilÄ«tu, varat novÄrtÄt, vai noteikta krÄtuve ir piemÄrota lietoÅ”anai kopÄ ar etcd FIO ā populÄrs I/O testeris. Å emiet vÄrÄ, ka diska I/O var notikt dažÄdos veidos: sinhronizÄcija/asinhronizÄcija, daudzas dažÄdas syscall klases un tÄ tÄlÄk. Otra medaļas puse ir tÄda fio ÄrkÄrtÄ«gi grÅ«ti lietojams. LietderÄ«bai ir daudz parametru, un dažÄdas to vÄrtÄ«bu kombinÄcijas rada pilnÄ«gi atŔķirÄ«gus rezultÄtus. Lai iegÅ«tu saprÄtÄ«gu etcd aprÄÄ·inu, jums jÄpÄrliecinÄs, vai fio Ä£enerÄtÄ rakstÄ«Å”anas slodze ir pÄc iespÄjas tuvÄka etcd WAL faila rakstÄ«Å”anas slodzei:
Tas nozÄ«mÄ, ka radÄ«tais fio ielÄdei ir jÄbÅ«t vismaz secÄ«gu ierakstu sÄrijai failÄ, kur katra rakstÄ«Å”ana sastÄv no sistÄmas izsaukuma writekam sekoja fdatasync.
Lai iespÄjotu secÄ«go rakstÄ«Å”anu, jÄnorÄda karogs --rw=write.
Ka fio rakstÄ«ja, izmantojot zvanus write (nevis citiem sistÄmas izsaukumiem, piemÄram, pwrite), izmantojiet karogu --ioengine=sync.
Visbeidzot, karogs --fdatasync=1 nodroÅ”ina, ka katrs write vajadzÄtu fdatasync.
PÄrÄjie divi parametri mÅ«su piemÄrÄ ir: --size Šø --bs - var atŔķirties atkarÄ«bÄ no konkrÄtÄ lietoÅ”anas gadÄ«juma. NÄkamajÄ sadaÄ¼Ä tiks aprakstÄ«ta to konfigurÄcija.
KÄpÄc mÄs izvÄlÄjÄmies fio un kÄ mÄs uzzinÄjÄm, kÄ to iestatÄ«t
Å Ä« piezÄ«me nÄk no reÄla gadÄ«juma, ar kuru mÄs saskÄrÄmies. Mums bija klasteris Kubernetes v1.13 ar uzraudzÄ«bu pakalpojumÄ Prometheus. SSD tika izmantoti kÄ atmiÅa etcd v3.2.24. Etcd metrika uzrÄdÄ«ja pÄrÄk lielu latentumu fdatasync, pat ja kopa bija dÄ«kstÄvÄ. Mums Å”ie rÄdÄ«tÄji Ŕķita ļoti apÅ”aubÄmi, un mÄs nezinÄjÄm, ko tieÅ”i tie attÄlo. TurklÄt klasteris sastÄvÄja no virtuÄlajÄm maŔīnÄm, tÄpÄc nevarÄja pateikt, vai aizkavÄÅ”anÄs ir saistÄ«ta ar virtualizÄciju vai pie vainas SSD.
TurklÄt mÄs apsvÄrÄm dažÄdas izmaiÅas aparatÅ«ras un programmatÅ«ras konfigurÄcijÄ, tÄpÄc mums bija nepiecieÅ”ams veids, kÄ tÄs novÄrtÄt. Protams, katrÄ konfigurÄcijÄ bÅ«tu iespÄjams palaist etcd un apskatÄ«t atbilstoÅ”os Prometheus rÄdÄ«tÄjus, taÄu tas prasÄ«tu ievÄrojamas pÅ«les. Mums bija nepiecieÅ”ams vienkÄrÅ”s veids, kÄ novÄrtÄt konkrÄtu konfigurÄciju. MÄs vÄlÄjÄmies pÄrbaudÄ«t savu izpratni par Prometheus metriku, kas nÄk no etcd.
Tam bija jÄatrisina divas problÄmas:
PirmkÄrt, kÄ izskatÄs etcd Ä£enerÄtÄ I/O slodze, rakstot WAL failos? KÄdi sistÄmas izsaukumi tiek izmantoti? KÄds ir ierakstu bloku lielums?
OtrkÄrt, pieÅemsim, ka mums ir atbildes uz iepriekÅ” minÄtajiem jautÄjumiem. KÄ reproducÄt atbilstoÅ”o slodzi ar fio? Galu galÄ fio ā ÄrkÄrtÄ«gi elastÄ«ga lietderÄ«ba ar parametru pÄrpilnÄ«bu (to ir viegli pÄrbaudÄ«t, piemÄram, Å”eit - apm. tulk.).
MÄs atrisinÄjÄm abas problÄmas ar vienu un to paÅ”u uz komandÄm balstÄ«tu pieeju lsof Šø strace:
Ar lsof varat skatÄ«t visus procesÄ izmantotos failu deskriptorus, kÄ arÄ« failus, uz kuriem tie attiecas.
Ar strace varat analizÄt jau notiekoÅ”u procesu vai palaist procesu un skatÄ«ties to. Komanda parÄda visus Ŕī procesa veiktos sistÄmas zvanus un, ja nepiecieÅ”ams, tÄ pÄcteÄus. PÄdÄjais ir svarÄ«gs procesiem, kas tiek sadalÄ«ti, un etcd ir viens no Å”Ädiem procesiem.
PirmÄ lieta, ko darÄ«jÄm, bija izmantot strace pÄrbaudÄ«t etcd serveri Kubernetes klasterÄ«, kamÄr tas bija dÄ«kstÄvÄ.
TÄtad tika konstatÄts, ka WAL ierakstu bloki ir ļoti blÄ«vi grupÄti, lielÄkÄs daļas lielums bija 2200-2400 baitu diapazonÄ. TÄpÄc komanda Ŕī raksta sÄkumÄ izmanto karogu --bs=2300 (bs ir katra ierakstÄ«Å”anas bloka lielums baitos fio).
LÅ«dzu, Åemiet vÄrÄ, ka etcd rakstÄ«Å”anas bloku lielums var atŔķirties atkarÄ«bÄ no versijas, izvietoÅ”anas, parametru vÄrtÄ«bÄm utt. - tas ietekmÄ ilgumu fdatasync. Ja jums ir lÄ«dzÄ«gs lietoÅ”anas gadÄ«jums, analizÄjiet ar strace savus etcd procesus, lai iegÅ«tu jaunÄkÄs vÄrtÄ«bas.
PÄc tam, lai iegÅ«tu skaidru un visaptveroÅ”u priekÅ”statu par to, kÄ etcd darbojas ar failu sistÄmu, mÄs to sÄkÄm no apakÅ”as strace ar karogiem -ffttT. Tas ļÄva tvert bÄrnu procesus un ierakstÄ«t katra izvadi atseviÅ”Ä·Ä failÄ. Papildus tika iegÅ«ta detalizÄta informÄcija par katra sistÄmas izsaukuma sÄkuma laiku un ilgumu.
MÄs arÄ« izmantojÄm komandu lsoflai apstiprinÄtu savu izpratni par rezultÄtu strace attiecÄ«bÄ uz to, kurÅ” faila deskriptors tika izmantots kÄdam nolÅ«kam. Es saÅÄmu secinÄjumu strace, lÄ«dzÄ«gi kÄ iepriekÅ”. StatistiskÄs manipulÄcijas ar sinhronizÄcijas laikiem apstiprinÄja, ka metrika wal_fsync_duration_seconds no etcd atbilst zvaniem fdatasync ar WAL failu deskriptoriem.
Lai Ä£enerÄtu ar fio lÄ«dzÄ«ga darba slodze kÄ no etcd, tika izpÄtÄ«ta utilÄ«ta dokumentÄcija un izvÄlÄti mÅ«su uzdevumam piemÄrotie parametri. MÄs esam pÄrliecinÄjuÅ”ies, ka notiek pareizie sistÄmas zvani, un apstiprinÄjuÅ”i to ilgumu, izpildot fio no strace (kÄ tas tika darÄ«ts etcd gadÄ«jumÄ).
ÄŖpaÅ”a uzmanÄ«ba tika pievÄrsta parametra vÄrtÄ«bas noteikÅ”anai --size. Tas atspoguļo kopÄjo I/O slodzi, ko rada fio utilÄ«ta. MÅ«su gadÄ«jumÄ tas ir kopÄjais datu nesÄjiem ierakstÄ«to baitu skaits. Tas ir tieÅ”i proporcionÄls zvanu skaitam write (un fdatasync). Par konkrÄtu bs zvanu skaits fdatasync ir vienÄds size / bs.
TÄ kÄ mÅ«s interesÄja procentile, mÄs vÄlÄjÄmies, lai paraugu skaits bÅ«tu pietiekami liels, lai tas bÅ«tu statistiski nozÄ«mÄ«gs. Un tÄ nolÄma 10^4 (kas atbilst 22 MB izmÄram) bÅ«s pietiekami. MazÄkas parametru vÄrtÄ«bas --size radÄ«ja izteiktÄku troksni (piemÄram, zvani fdatasync, kas aizÅem daudz ilgÄku laiku nekÄ parasti un ietekmÄ 99. procentili).
Atkarīgs no tevis
RakstÄ parÄdÄ«ts, kÄ lietot fio var spriest, vai medijs, kas paredzÄts lietoÅ”anai ar etcd, ir pietiekami Ätrs. Tagad tas ir atkarÄ«gs no jums! PakalpojumÄ varat izpÄtÄ«t virtuÄlÄs maŔīnas ar SSD krÄtuvi IBM Cloud.
PS no tulka
Ar gataviem lietoÅ”anas gadÄ«jumiem fio Par citiem uzdevumiem sk dokumentÄcija vai tieÅ”i uz projektu krÄtuves (to ir daudz vairÄk, nekÄ minÄts dokumentÄcijÄ).