Klasteru veiktspÄja utt lielÄ mÄrÄ ir atkarÄ«gs no tÄ uzglabÄÅ”anas veiktspÄjas. etcd eksportÄ dažus rÄdÄ«tÄjus uz Prometejslai sniegtu vÄlamo krÄtuves veiktspÄjas informÄciju. PiemÄram, metrika wal_fsync_duration_seconds. etcd dokumentÄcijÄ teikts: lai uzglabÄÅ”anu uzskatÄ«tu par pietiekami Ätru, Ŕīs metrikas 99. procentilei ir jÄbÅ«t mazÄkai par 10 ms. Ja plÄnojat palaist etcd klasteru Linux iekÄrtÄs un vÄlaties novÄrtÄt, vai jÅ«su krÄtuve ir pietiekami Ätra (piemÄram, SSD), varat izmantot FIO ir populÄrs rÄ«ks I/O darbÄ«bu testÄÅ”anai. Palaidiet Å”o komandu, kur testa dati ir direktorijs zem krÄtuves pievienoÅ”anas punkta:
Jums vienkÄrÅ”i jÄaplÅ«ko rezultÄti un jÄpÄrbauda, āāvai ilguma 99. procentile fdatasync mazÄk nekÄ 10 ms. Ja tÄ, jums ir pietiekami Ätra uzglabÄÅ”ana. Å eit ir rezultÄtu piemÄrs:
MÄs esam pielÄgojuÅ”i opcijas --size un --bs mÅ«su konkrÄtajam scenÄrijam. Lai no fio iegÅ«tu noderÄ«gu rezultÄtu, norÄdiet savas vÄrtÄ«bas. Kur tÄs dabÅ«t? LasÄ«t kÄ mÄs iemÄcÄ«jÄmies konfigurÄt fio.
PÄrbaudes laikÄ visa I/O slodze nÄk no fio. ReÄlajÄ dzÄ«vÄ, iespÄjams, krÄtuvÄ tiks saÅemti citi rakstÄ«Å”anas pieprasÄ«jumi, izÅemot tos, kas saistÄ«ti ar wal_fsync_duration_seconds. Papildu slodze palielinÄs wal_fsync_duration_seconds vÄrtÄ«bu. TÄtad, ja 99. procentile ir tuvu 10 ms, jÅ«su krÄtuves Ätrums beigsies.
Parasti izmanto datu bÄzes priekÅ”rakstÄ«Å”anas žurnÄls; etcd to arÄ« izmanto. Å eit mÄs sÄ«kÄk neapspriedÄ«sim priekÅ”rakstÄ«Å”anas žurnÄlu (WAL). Mums pietiek zinÄt, ka katrs etcd klastera dalÄ«bnieks to uztur pastÄvÄ«gÄ krÄtuvÄ. etcd ieraksta katru atslÄgas vÄrtÄ«bas darbÄ«bu (piemÄram, atjauninÄjumu) WAL, pirms to lieto veikalÄ. Ja kÄds no krÄtuves dalÄ«bniekiem avarÄ un tiek restartÄts starp momentuzÅÄmumiem, tas var lokÄli atjaunot darÄ«jumus kopÅ” pÄdÄjÄ WAL satura momentuzÅÄmuma.
Kad klients pievieno atslÄgu atslÄgu vÄrtÄ«bu krÄtuvei vai atjaunina esoÅ”Äs atslÄgas vÄrtÄ«bu, etcd ieraksta darbÄ«bu WAL, kas ir parasts fails pastÄvÄ«gÄ krÄtuvÄ. etcd Pirms apstrÄdes turpinÄÅ”anas JÄBÅŖT pilnÄ«bÄ pÄrliecinÄtam, ka WAL ieraksts patieÅ”Äm ir noticis. OperÄtÄjsistÄmÄ Linux Å”im nolÅ«kam nepietiek ar vienu sistÄmas zvanu. rakstÄ«t, jo faktiskÄ ierakstÄ«Å”ana fiziskajÄ krÄtuvÄ var aizkavÄties. PiemÄram, Linux kÄdu laiku var saglabÄt WAL ierakstu kodola atmiÅas keÅ”atmiÅÄ (piemÄram, lapas keÅ”atmiÅÄ). Un, lai dati tiktu precÄ«zi ierakstÄ«ti pastÄvÄ«gÄ krÄtuvÄ, pÄc rakstÄ«Å”anas ir nepiecieÅ”ams fdatasync sistÄmas izsaukums, un etcd to vienkÄrÅ”i izmanto (kÄ redzat darba rezultÄtÄ strace, kur 8 ir WAL faila deskriptors):
DiemžÄl rakstÄ«Å”ana uz pastÄvÄ«gu krÄtuvi nenotiek uzreiz. Ja fdatasync izsaukums ir lÄns, tiks ietekmÄta etcd sistÄmas veiktspÄja. etcd dokumentÄcijÄ teiktska krÄtuve tiek uzskatÄ«ta par pietiekami Ätru, ja 99. procentilÄ fdatasync izsaukumu ierakstÄ«Å”ana WAL failÄ aizÅem mazÄk nekÄ 10 ms. Ir arÄ« citi noderÄ«gi glabÄÅ”anas rÄdÄ«tÄji, taÄu Å”ajÄ ziÅÄ mÄs runÄjam tikai par Å”o rÄdÄ«tÄju.
KrÄtuves aprÄÄ·ins ar fio
Ja nepiecieÅ”ams novÄrtÄt, vai jÅ«su krÄtuve ir piemÄrota uttd, izmantojiet fio, ļoti populÄru I/O slodzes pÄrbaudes rÄ«ku. JÄatceras, ka diska darbÄ«bas var bÅ«t ļoti dažÄdas: sinhronas un asinhronas, daudzas sistÄmas izsaukumu klases utt. TÄ rezultÄtÄ fio ir diezgan grÅ«ti lietojams. Tam ir daudz parametru, un dažÄdas to vÄrtÄ«bu kombinÄcijas rada ļoti dažÄdas I/O darba slodzes. Lai iegÅ«tu atbilstoÅ”us etcd skaitļus, rakstot WAL failus, jums jÄpÄrliecinÄs, vai testa rakstÄ«Å”anas slodze no fio ir pÄc iespÄjas tuvÄka faktiskajai slodzei no etcd.
TÄpÄc fio ir vismaz jÄizveido failÄ secÄ«gu ierakstu sÄrija, katra rakstÄ«Å”ana sastÄvÄs no sistÄmas izsaukuma rakstÄ«tkam seko fdatasync sistÄmas izsaukums. SecÄ«gai rakstÄ«Å”anai uz fio ir nepiecieÅ”ama opcija --rw=write. Lai fio rakstÄ«Å”anas laikÄ izmantotu rakstÄ«Å”anas sistÄmas zvanu, nevis rakstÄ«t, jÄnorÄda parametrs --ioengine=sync. Visbeidzot, lai pÄc katras rakstÄ«Å”anas izsauktu fdatasync, jums jÄpievieno parametrs --fdatasync=1. PÄrÄjÄs divas opcijas Å”ajÄ piemÄrÄ (--size un -bs) ir atkarÄ«gas no skripta. NÄkamajÄ sadaÄ¼Ä mÄs parÄdÄ«sim, kÄ tos iestatÄ«t.
KÄpÄc fio un kÄ mÄs iemÄcÄ«jÄmies to iestatÄ«t
Å ajÄ rakstÄ mÄs aprakstÄm reÄlu gadÄ«jumu. Mums ir klasteris Kubernetes v1.13, kuru mÄs uzraudzÄ«jÄm, izmantojot Prometheus. etcd v3.2.24 tika mitinÄts SSD. Etcd metrika uzrÄdÄ«ja pÄrÄk augstu fdatasync latentumu, pat ja klasteris neko nedarÄ«ja. Metrikas bija dÄ«vainas, un mÄs Ä«sti nezinÄjÄm, ko tie nozÄ«mÄ. Klasteris sastÄvÄja no virtuÄlajÄm maŔīnÄm, bija jÄsaprot, kas par problÄmu: fiziskajos SSD vai virtualizÄcijas slÄnÄ«. TurklÄt mÄs bieži veicÄm izmaiÅas aparatÅ«ras un programmatÅ«ras konfigurÄcijÄ, un mums bija nepiecieÅ”ams veids, kÄ novÄrtÄt to rezultÄtus. MÄs varÄtu palaist etcd katrÄ konfigurÄcijÄ un apskatÄ«t Prometheus metriku, taÄu tas ir pÄrÄk daudz problÄmu. MÄs meklÄjÄm diezgan vienkÄrÅ”u veidu, kÄ novÄrtÄt konkrÄtu konfigurÄciju. MÄs vÄlÄjÄmies pÄrbaudÄ«t, vai mÄs pareizi saprotam Prometheus metriku no etcd.
TaÄu Å”im nolÅ«kam bija jÄatrisina divas problÄmas. PirmkÄrt, kÄ izskatÄs I/O slodze, ko etcd rada, rakstot uz WAL? KÄdi sistÄmas izsaukumi tiek izmantoti? KÄds ir ierakstu lielums? OtrkÄrt, ja mÄs atbildam uz Å”iem jautÄjumiem, kÄ mÄs varam reproducÄt lÄ«dzÄ«gu darba slodzi ar fio? Neaizmirstiet, ka fio ir ļoti elastÄ«gs rÄ«ks ar daudzÄm iespÄjÄm. Abas problÄmas atrisinÄjÄm ar vienu pieeju ā izmantojot komandas lsof Šø strace. lsof uzskaita visus procesÄ izmantotos failu deskriptorus un ar tiem saistÄ«tos failus. Izmantojot strace, varat pÄrbaudÄ«t jau esoÅ”u procesu vai sÄkt procesu un to pÄrbaudÄ«t. strace izdrukÄ visus sistÄmas izsaukumus no pÄrbaudÄmÄ procesa (un tÄ pakÄrtotajiem procesiem). PÄdÄjais ir ļoti svarÄ«gs, jo etcd tikai izmanto lÄ«dzÄ«gu pieeju.
Vispirms mÄs izmantojÄm strace, lai izpÄtÄ«tu Kubernetes etcd serveri, kad klasterim nebija slodzes. MÄs redzÄjÄm, ka gandrÄ«z visi WAL ieraksti bija aptuveni vienÄda izmÄra: 2200ā2400 baiti. TÄpÄc ziÅojuma sÄkumÄ esoÅ”ajÄ komandÄ mÄs norÄdÄ«jÄm parametru -bs=2300 (bs nozÄ«mÄ katra fio ieraksta lielumu baitos). Å emiet vÄrÄ, ka etcd ieraksta lielums ir atkarÄ«gs no etcd versijas, izplatÄ«Å”anas, parametru vÄrtÄ«bÄm utt., kÄ arÄ« ietekmÄ fdatasync ilgumu. Ja jums ir lÄ«dzÄ«gs scenÄrijs, pÄrbaudiet savus etcd procesus ar strace, lai uzzinÄtu precÄ«zus skaitļus.
PÄc tam, lai iegÅ«tu labu priekÅ”statu par etcd failu sistÄmas darbÄ«bu, mÄs to sÄkÄm ar strace un -ffttT opcijÄm. TÄpÄc mÄs mÄÄ£inÄjÄm pÄrbaudÄ«t pakÄrtotos procesus un ierakstÄ«t katra no tiem izvadi atseviÅ”Ä·Ä failÄ, kÄ arÄ« iegÅ«t detalizÄtus pÄrskatus par katra sistÄmas zvana sÄkumu un ilgumu. MÄs izmantojÄm lsof, lai apstiprinÄtu strace izvades analÄ«zi un redzÄtu, kurÅ” faila deskriptors tika izmantots kÄdam nolÅ«kam. TÄtad ar strace palÄ«dzÄ«bu tika iegÅ«ti iepriekÅ” parÄdÄ«tie rezultÄti. SinhronizÄcijas laika statistika apstiprinÄja, ka wal_fsync_duration_seconds no etcd atbilst fdatasync izsaukumiem ar WAL failu deskriptoriem.
MÄs izskatÄ«jÄm fio dokumentÄciju un izvÄlÄjÄmies mÅ«su skripta opcijas, lai fio radÄ«tu slodzi, kas lÄ«dzÄ«ga etcd. MÄs arÄ« pÄrbaudÄ«jÄm sistÄmas zvanus un to ilgumu, palaižot fio no strace, lÄ«dzÄ«gi kÄ etcd.
MÄs esam rÅ«pÄ«gi izvÄlÄjuÅ”ies parametra --size vÄrtÄ«bu, lai attÄlotu visu I/O slodzi no fio. MÅ«su gadÄ«jumÄ tas ir kopÄjais krÄtuvÄ ierakstÄ«to baitu skaits. Tas izrÄdÄ«jÄs tieÅ”i proporcionÄls rakstÄ«Å”anas (un fdatasync) sistÄmas zvanu skaitam. Noteiktai bs vÄrtÄ«bai fdatasync zvanu skaits = izmÄrs/bs. TÄ kÄ mÅ«s interesÄja procentile, mums bija jÄbÅ«t pietiekami daudz paraugu, lai pÄrliecinÄtos, un mÄs aprÄÄ·inÄjÄm, ka mums pietiks ar 10^4 (tas ir 22 mebibaiti). Ja --size ir mazÄks, var rasties novirzes (piemÄram, vairÄki fdatasync izsaukumi aizÅem ilgÄku laiku nekÄ parasti un ietekmÄ 99. procentili).
IzmÄÄ£iniet pats
MÄs parÄdÄ«jÄm, kÄ izmantot fio un pÄrbaudÄ«t, vai krÄtuve ir pietiekami Ätra, lai etcd darbotos labi. Tagad varat to izmÄÄ£inÄt pats, izmantojot, piemÄram, virtuÄlÄs maŔīnas ar SSD krÄtuvi IBM Cloud.