MĂ€rk. tĂ”lge.: see artikkel on IBM Cloudi inseneride mini-uuringute kokkuvĂ”te, mille eesmĂ€rk oli leida tegelik lahendus, mis on seotud etcd andmebaasi haldamise probleemidega. Meil oli sarnane ĂŒlesanne, kuid autorite mĂ”tlemisprotsess ja tegevused vĂ”ivad olla huvitavad laiemas kontekstis.

Kogu artikli lĂŒhike kokkuvĂ”te: fio ja etcd
etcd klastrite jĂ”udlus sĂ”ltub tugevalt nende aluseks oleva salvestusruumi kiirusest. etcd jĂ€lgib oma jĂ”udlust, eksportides erinevaid Prometheuse meetrikaid. Ăks neist on wal_fsync_duration_seconds. etcd dokumentatsioonis , et salvestusruumi vĂ”ib pidada piisavalt kiireks, kui selle meetrika 99. protsentiil ei ĂŒleta 10 msâŠ
Kui mÔtlete etcd klastri korraldamisele Linuxiga masinatel ja soovite kontrollida, kas salvestid on piisavalt kiired (nt SSD), soovitame kasutada populaarsest I/O testijast nimega . Piisab, kui kÀivitate jÀrgmise kÀsu (kaust test-data peab olema paigaldatud testitava salvesti jaotises):
fio --rw=write --ioengine=sync --fdatasync=1 --directory=test-data --size=22m --bs=2300 --name=mytestJÀÀnud on vaid vaadata vÀljundit ja kontrollida, kas 99. persentiil mahub 10 ms sisse. Kui jah, siis tÀhendab see, et teie salvestusseade töötab piisavalt kiiresti. Siin on vÀljundi nÀide:
fsync/fdatasync/sync_file_range:
sync (mikrosekundites): min=534, max=15766, avg=1273.08, stdev=1084.70
sync persentiilid (mikrosekundites):
| 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]MÔned mÀrkused:
- Ălaltoodud nĂ€ites kohandasime parameetreid
--sizeja--bskonkreetse juhtumi jaoks. Et saada sisukat tulemustfio, mÀÀrake vÀÀrtused, mis sobivad teie kasutusstsenaariumile. Kuidas neid valida, selgitatakse allpool. - Testimise ajal
fiokoormab ainult kettaalajĂ€rje. Reaalses elus on tĂ”enĂ€oline, et ketast kirjutavad ka teised protsessid (vĂ€lja arvatud need, mis on seotudwal_fsync_duration_seconds). TĂŒĂŒpiline lisakoormus vĂ”ib pĂ”hjustada kasvuwal_fsync_duration_seconds. TeisisĂ”nu, kui 99. persentiil, mis saadi testi tulemusenafio, on vaid veidi alla 10 ms, on suur tĂ”enĂ€osus, et andmete salvestamise jĂ”udlus on ebapiisav. - Testimiseks on vajalik versioon
fiovĂ€hemalt 3.5, kuna vanemad versioonid ei koonda tulemusifdatasyncprotsentiilide kujul. - Ălaltoodud vĂ€ljund on vaid vĂ€ike osa kogu vĂ€ljundist
fio.
Rohkem infot fio ja etcd kohta
MÔned sÔnad etcd WAL-ide kohta
Tavaliselt kasutavad andmebaasid (write-ahead logging, WAL). See kehtib ka etcd kohta. WAL-i arutelu ĂŒletab selle artikli raamid, kuid meie eesmĂ€rkide jaoks on oluline teada jĂ€rgmist: iga etcd-klastri liige salvestab WAL-i pĂŒsivasse salvestusse. etcd registreerib teatud operatsioonid vĂ”tme-vÀÀrtuse salvestuses (nt uuendused) WAL-is enne nende tĂ€itmist. Kui sĂ”lm ebaĂ”nnestub ja taaskĂ€ivitub snapshotâide vahel, suudab etcd taastada tehingud, mis tehti alates eelmisest snapshot'ist, tuginedes WAL-sisaldusele.
Seega, iga kord, kui klient lisab vĂ”tme KV-hoidmisse vĂ”i uuendab olemasoleva vĂ”tme vÀÀrtust, lisab etcd operatsiooni kirjelduse WAL-i, mis on tavaline fail pĂŒsivas salvestuses. Enne jĂ€tkamist peab etcd olema 100% kindel, et kirje WAL-i on tĂ”eliselt salvestatud. Selle saavutamiseks Linuxis ei piisa sĂŒsteemi kutsest. , kuna fĂŒĂŒsilise meedia kirjutamise operatsioon vĂ”ib olla edasi lĂŒkatud. NĂ€iteks vĂ”ib Linux mĂ”neks ajaks hoida WAL-i kirje tuuma mĂ€lus (nt lehekĂŒljekus). Andmete salvestamise tagamiseks tuleb pĂ€rast kirjutamist kasutada sĂŒsteemikutsest. fdatasync â just nii kĂ€itub etcd (nagu nĂ€ha jĂ€rgmise vĂ€ljundi nĂ€itel ; siin 8 â WAL-i failihalduri descriptor):
21:23:09.894875 lseek(8, 0, SEEK_CUR) = 12808
21:23:09.894911 write(8, ". 20210220361223255266632$10 20103026"34"rn3fo"..., 2296) = 2296
21:23:09.895041 fdatasync(8) = 0 Kahjuks vĂ”tab pĂŒsivasse salvestusse kirjutamine aega. Veniv fdatasynci kutsumine vĂ”ib mĂ”jutada etcd jĂ”udlust. Hoiustamise dokumentatsioonis , et see, et piisava jĂ”udluse tagamiseks peab kĂ”ikide kutsungite kestuse 99. protsent olema fdatasync WAL-faili kirjutamisel vĂ€hem kui 10 ms. On ka teisi salvestusseotud mÔÔdikuid, kuid selles artiklis rÀÀgime tĂ€pselt sellest.
Hindame salvestust kasutades fio
Salvestuse sobivuse hindamiseks etcd-ga saab kasutada utiliiti â populaarne I/O testija. Pidage meeles, et kettasisend- ja -vĂ€ljund vĂ”ib töötada erinevalt: sync/async, suur hulk erinevaid sĂŒsteemi kutsungeid jne. MĂŒndi teine kĂŒlg on see, et fio see on ÀÀrmiselt raske kasutada. Utiliidil on palju parameetreid ja erinevad nende vÀÀrtuste kombinatsioonid toovad kaasa tĂ€iesti erinevad tulemused. Et saada mĂ”istlikku hinnangut etcd puhul, peate veenduma, et fio genereeritav kirjutuskoormus sarnaneb maksimaalselt etcd koormusega WAL-failide kirjutamisel:
- See tÀhendab, et genereeritud
fiokoormus peab vĂ€hemalt koosnema jĂ€rjestikuste kirjetest failis, kus iga kirjutamistoiming koosneb sĂŒsteemi kutsungist , millele jĂ€rgnebfdatasync. - JĂ€rjestelmĂ€kirjoituksen aktivoimiseksi on osoitettava lippu
--rw=write. - Et
fiokirjoitti kutsujen avullawrite(eikĂ€ muiden jĂ€rjestelmĂ€kutsujen â esimerkiksi ), kĂ€ytĂ€ lippua--ioengine=sync. - Lopuksi, lippu
--fdatasync=1takaa, ettÀ jokaisenwritetuleksfdatasync. - Kaksi muuta parametreista esimerkissÀmme:
--sizeja--bsâ voivat vaihdella riippuen kĂ€ytön erityistĂ€ skenaariota. Seuraavassa osiossa kĂ€sitellÀÀn niiden konfigurointia.
Miksi valitsimme fion ja mistÀ oppimme sen konfiguroimaan
TÀmÀ muistiinpano syntyi todellisesta tapauksesta, jonka kanssa kohtasimme. MeillÀ oli klusteri Kubernetes v1.13:ssa, jossa monitorointi tapahtui Prometheuksen avulla. Varastona toimi SSD:t etcd v3.2.24:lle. etcd-metriikat nÀyttivÀt liian suuria viiveitÀ fdatasync, vaikka klusteri oli passiivinen. MeidÀn mielestÀmme nÀmÀ mittarit olivat varsin kyseenalaisia, emmekÀ olleet varmoja siitÀ, mitÀ ne todellisuudessa edustavat. LisÀksi klusteri koostui virtuaalikoneista, joten ei ollut selvÀÀ, oliko viive virtuaalisoinnin syytÀ vai oliko SSD:llÀ osuutensa.
Lisaks sellele arutasime erinevaid riist- ja tarkvarakonfiguratsiooni muutusi, seega oli vajalik nende hindamise meetod. Loomulikult oleks vÔinud kÀivitada etcd iga konfiguratsiooni puhul ja vaadata vastavaid Prometheuse mÔÔdikuid, kuid see tooks endaga kaasa mÀrkimisvÀÀrseid jÔupingutusi. Meile oli vajalik lihtne meetod, mis vÔimaldaks hinnata konkreetset konfiguratsiooni. Soovisime kontrollida oma arusaamist Prometheuse mÔÔdikest, mis pÀrinevad etcd-st.
Selleks tuli lahendada kaks probleemi:
- Esiteks, millisena nĂ€eb vĂ€lja I/O-koormus, mida etcd genereerib WAL-failide kirjutamise ajal? Milliseid sĂŒsteemikĂ”nesid kasutatakse? Mis on kirjutamiste blokkide suurus?
- Teiseks, oletame, et meil on vastused eeltoodud kĂŒsimustele. Kuidas reproduktsiooni vastava koormusega
fio? ĐДЎŃfioâ ÀÀrmiselt paindlik utiliit, millel on palju parameetreid (seda on lihtne veenduda, nĂ€iteks Ââ tĂ”lke mĂ€rk.).
Lahendasime mÔlemad probleemid sama lÀhenemisega, tuginedes kÀskudele ja :
- KĂ€esoleva abil
lsofsaab vaadata kÔiki failideskirid, mida protsess kasutab, ning faile, millega nad on seotud. - KÀesoleva abil
stracesaab analĂŒĂŒsida juba kĂ€imasolevat protsessi vĂ”i alustada protsessi ja jĂ€lgida seda. KĂ€sk printsib vĂ€lja kĂ”ik sĂŒsteemi kĂ”ned, mis on tehtud antud protsessi ja vajadusel tema jĂ€reltulijate poolt. Viimane on oluline protsesside jaoks, mis forkivad, ja etcd on ĂŒks selline protsess.
Esimene asi, mida me tegime, oli kasutada strace et uurida etcd serverit Kubernetes klastris, kui see seisis.
Nii avastasime, et WAL-i kirjutamisplokid on vÀga tihedalt grupeeritud, enamik nende suurust oli vahemikus 2200-2400 baiti. Just seetÔttu kasutame kÀskudes selle artikli alguses lippu --bs=2300 (bs - on iga kirjutamisploki suurus baitides fio).
Pange tĂ€hele, et etcd kirjutamisplokkide suurus vĂ”ib varieeruda sĂ”ltuvalt versioonist, juurutamisest, parameetrite vÀÀrtustest jne - see mĂ”jutab kestvust fdatasync. Kui teil on sarnane kasutusstsenaarium, analĂŒĂŒsige lĂ€bi strace oma etcd protsessid, et saada ajakohaseid vÀÀrtusi.
SeejĂ€rel, et saada selget ja pĂ”hjalikku ĂŒlevaadet etcd toimimisest failisĂŒsteemiga, kĂ€ivitasime selle strace lipu -ffttT. See vĂ”imaldas hĂ”lmata alamprotsesse ja salvestada igaĂŒhe vĂ€ljundi eraldi faili. Samuti saadi ĂŒksikasjalikud andmed iga sĂŒsteemikĂ”ne algushetke ja kestuse kohta.
Kasutasime ka kĂ€sku lsof, et kinnitada oma arusaama vĂ€ljundist strace selle osas, milline failikirjeldaja milliseks otstarbeks kasutati. Tulemuseks oli vĂ€ljund strace, mis sarnanes eespool toodud omaga. Statistilised manipulatsioonid sĂŒnkroniseerimisajaga kinnitasid, et wal_fsync_duration_seconds etcd metrika vastab fdatasync WAL failikirjeldajatele.
Selleks, et genereerida fio töökoormus, mis sarnaneb etcd töökoormusega, uuriti utiliidi dokumentatsiooni ja valiti meie ĂŒlesandele sobivad parameetrid. Veendusime, et vajalikud sĂŒsteemikĂ”ned on kaasatud ja kinnitasime nende kestvuse, kĂ€ivitades fio kohast strace (nagu see tehti etcd puhul).
Eriti tÀhelepanu pöörati parameetri vÀÀrtuse mÀÀramisele --size. See tÀhistab utiliidi fio genereeritud kogulaste I/O koormust. Meie puhul on see baithulk, mis on salvestatud kÔvakettale. See on otseselt proportsionaalne kÔnede arvuga write (ja fdatasync). Teatud bs kÔnede arv fdatasync on vÔrdne suurus / bs.
Kuna meid huvitas protsentiil, soovisime, et proovide arv oleks piisavalt suur statistilise tĂ€htsuse saavutamiseks. Ja otsustasime, et 10^4 (mis vastab suurusele 22 MB) on piisav. VĂ€iksemad vÀÀrtused parameetrile --size andis rohkem vĂ€ljendunud mĂŒra (nĂ€iteks kĂ”ned fdatasync, mis vĂ”tavad tavaliselt palju rohkem aega ja mĂ”jutavad 99. protsentiili).
Otsus on sinu
Artiklis nĂ€idatakse, kuidas abil fio saab hinnata, kas salvestus, mis on mĂ”eldud kasutamiseks etcd-ga, on piisavalt kiire. NĂŒĂŒd on sinu kord! Uurige SSD-pĂ”histe salvestustega virtuaalmasinaid teenuses .
P.S. tÔlkija mÀrkused
Valmis kasutamise nĂ€idistega fio vĂ”ib tutvuda muude ĂŒlesannete lahendamiseks vĂ”i otse (seal on neid palju rohkem, kui dokumentatsioonis mainitakse).
P.P.S. tÔlkijalt
Lugege ka meie blogist:
- «»;
- «»;
- «».
Allikas: habr.com
