
LĂŒhike lugu fio ja etcd-st
Klastri jĂ”udlus sĂ”ltub suuresti salvestuse jĂ”udlusest. etcd ekspordib mĂ”ned mÔÔdikud , et anda vajalikku teavet salvestuse jĂ”udluse kohta. NĂ€iteks mÔÔdikut wal_fsync_duration_seconds. : et salvestust peetakse piisavalt kiireks, peab selle mÔÔdiku 99. protsent olla alla 10 ms. Kui plaanite kĂ€ivitada etcd klastrit Linuxi masinatel ja soovite hinnata, kas teie salvestus on piisavalt kiire (nt SSD), saate kasutada â populaarne tööriist sisendi-ja-vĂ€ljundi operatsioonide testimiseks. KĂ€ivitage jĂ€rgmine kĂ€sk, kus test-data on salvestuse ĂŒhenduspunkti kaust:
fio --rw=write --ioengine=sync --fdatasync=1 --directory=test-data --size=22m --bs=2300 --name=mytestPeab lihtsalt vaatama tulemusi ja kontrollima, et 99. protsent mÔÔtmisest on alla 10 ms. Kui jah, on teil piisavalt kiire salvestus. Siin on tulemuste nÀide:
sĂŒnk (”s): min=534, max=15766, avg=1273,08, stdev=1084,70
sĂŒnk protsentaaĆŸid (”s):
| 1,00. [ 553], 5,00. [ 578], 10,00. [ 594], 20,00. [ 627],
| 30,00. [ 709], 40,00. [ 750], 50,00. [ 783], 60,00. [ 1549],
| 70,00. [ 1729], 80,00. [ 1991], 90,00. [ 2180], 95,00. [ 2278],
| 99,00. [ 2376], 99,50. [ 9634], 99,90. [15795], 99,95. [15795],
| 99,99. [15795]MĂ€rkused
- Me oleme seadistanud -size ja -bs vÀÀrtused meie konkreetse stsenaariumi jaoks. Fio kasulikku tulemust saamiseks mÀrkige oma vÀÀrtused. Kust neid vÔtta? Loe edasi, .
- Testimise ajal tuleb kogu I/O koormus fio-st. Reaalses stsenaariumis saab ladustamisele tÔenÀoliselt ka muid kirjutamis-ehk pÀringute, vÀlja arvatud need, mis on seotud wal_fsync_duration_seconds. TÀiendav koormus suurendab wal_fsync_duration_seconds vÀÀrtust. Seega, kui 99. protsentili kohale peaaegu ulatub 10 ms, ei ole teie ladustamisel piisavalt kiirus.
- VÔtke versioon vÀhemalt 3.5 (eelnevad ei nÀita fdatasynci kestvuse protsente).
- Ălaltoodud on ainult osa fio tulemustest.
Pikk lugu fio-st ja etcd-st
Mis on WAL etcd-s
Tavaliselt kasutavad andmebaasid ; etcd kasutab ka seda. Siin ei aruta me kirjutamise etteheitevĂ”tte (write-ahead log, WAL) pĂ€evikut ĂŒksikasjalikult. Meie jaoks on piisav teada, et iga etcd klastriliige salvestab seda pĂŒsivasse salvestusse. etcd salvestab iga vĂ”tme-vÀÀrtuse paari operatsiooni (nĂ€iteks vĂ€rskenduse) WAL-i, enne kui rakendab need salvestuses. Kui ĂŒhe salvestuse liige ebaĂ”nnestub ja taaskĂ€ivitub, saab ta WAL-i sisu jĂ€rgi taastada tehingud alates viimase salvestuse hetkest.
Kui klient lisab vĂ”tme vĂ”tme-vÀÀrtuse salvestusse vĂ”i vĂ€rskendab olemasoleva vĂ”tme vÀÀrtust, teeb etcd selle toimingu WAL-i kirje, mis on tavaline fail pĂŒsivĂ”ttena. Enne töötlemise jĂ€tkumist peab etcd tĂ€ielikult kinnitama, et WAL-i kirje tĂ”esti toimus. Linuxis ei piisa selleks ĂŒhest sĂŒsteemikutsest. , kuna tegelikult vĂ”ib andmete kirjutamine fĂŒĂŒsilisse salvestusse edasi lĂŒkata. NĂ€iteks vĂ”ib Linux mĂ”nda aega hoida WAL-i kirjeid tuuma mĂ€lu (nt lehekĂŒlje vahemuudatuses) vahemĂ€esis. Andmete kindel kirjutamine pĂŒsivasse salvestusse nĂ”uab sĂŒsteemikutsungit fdatasync pĂ€rast kirjutamist, ja just seda kasutab etcd (nagu on nĂ€ha tulemuste töötlemisel. , kus 8 â see on WAL-i failikuvandi deskriptor):
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) = 0Kahjuks ei toimu andmete kirjutamine pĂŒsivasse salvestusse koheselt. Kui fdatasynci kutse töötab aeglaselt, vĂ€heneb sĂŒsteemi etcd jĂ”udlus. , et salvestust peetakse piisavalt kiireks, kui 99. protsendil fdatasynci kutsetest kirje tegemisel WAL-i failis kestab vĂ€hem kui 10 ms. On ka teisi kasulikke meetrikaid salvestuse jaoks, kuid selles postituses rÀÀgime ainult sellest meetrist.
Salvestuse hindamine fio abil
Kui peate hindama, kas teie salvestus sobib etcd-le, kasutage fio-t â vĂ€ga populaarset sisend-vĂ€ljund koormuse testimise tööriista. Tuleb meeles pidada, et kettaoperatsioonid vĂ”ivad olla vĂ€ga varieeruvad: sĂŒnkroonsed ja asĂŒnkroonsed, mitmesugused sĂŒsteemikutsed jne. SeetĂ”ttu on fio kasutamine ĂŒsna keeruline. Sellel on palju parameetreid, ja erinevad nende vÀÀrtuste kombinatsioonid annavad tĂ€iesti erinevaid sisend-vĂ€ljundi koormusi. Adekaatsete numbrite saamiseks etcd-le tuleb veenduda, et fio kirjutamise testkoormus on vĂ”imalikult lĂ€hedane tegelikule koormusele jne kirjutamisel.
SeetĂ”ttu peaks fio vĂ€hemalt genereerima koormust jĂ€rjestikuste kirjutamisoperatsioonide seeria nĂ€ol, kus iga kirjutamine koosneb sĂŒsteemikutsest , mille jĂ€rel jĂ€rgneb sĂŒsteemikutse fdatasync. JĂ€rjestikute kirjutamisoperatsioonide jaoks on fio-l vajalik parameeter ârw=write. Et fio kirjutamist tehes kasutaks sĂŒsteemikutset write, mitte , tuleb mÀÀrata parameeter âioengine=sync. LĂ”puks, et iga kirjutamise jĂ€rel kutsuda esile fdatasync, tuleb lisada parameeter âfdatasync=1. Kaks muud parameetrit selles nĂ€ites (âsize ja âbs) sĂ”ltuvad konkreetsest stsenaariumist. JĂ€rgmises jaos rÀÀgime sellest, kuidas neid seadistada.
Miks fio ja kuidas me Ôppisime seda seadistama
Selles postituses kirjeldame tegelikku juhtumit. Meil oli klaster v1.13, mida jĂ€lgisime Prometheuse abil. etcd v3.2.24 oli paigaldatud SSD-le. etcd metrikad nĂ€itasid fdatasynci jaoks liiga kĂ”rgeid viivitusi, isegi kui klaster midagi ei teinud. Metrikad olid veidrad ja me ei teadnud tĂ€pselt, mida need tĂ€hendavad. Klaster koosnes virtuaalmasinatest, pidi vĂ€lja selgitama, kus on probleem: fĂŒĂŒsilistes SSD-des vĂ”i virtualiseerimiskihis. Lisaks tegime me sageli riistvara ja tarkvara konfiguratsioonis muudatusi ning vajasime viisi nende tulemuste hindamiseks. Saime kĂ€ivitada etcd igas konfiguratsioonis ja vaadata Prometheuse metrikat, kuid see on liiga tĂŒlikas. Otsisime piisavalt lihtsat viisi konkreetse konfiguratsiooni hindamiseks. Soovisime kontrollida, kas arusaame Prometheuse metrikatest etcd-st on Ă”ige.
Kuid selleks tuli lahendada kaks probleemi. Esiteks, milline on sisendi- ja vĂ€ljundi koormus, mida etcd genereerib WAL-i kirjutamisel? Milliseid sĂŒsteemikĂ”nesid kasutatakse? Mis on kirje suurus? Teiseks, kui me saadame nendele kĂŒsimustele vastused, kuidas siis luua sarnast töökoormust fio abil? Ărge unustage, et fio on vĂ€ga paindlik tööriist paljude seadistustega. Lahendasime mĂ”lemad probleemid ĂŒhe lĂ€henemisega - kasutades kĂ€ske. ja . lsof kuvab kĂ”ik failide descriptorid, mida protsess kasutab, ja seotud failid. Ja strace'i abil saab uurida juba kĂ€imasolevat protsessi vĂ”i alustada protsessi ja seda uurida. strace vĂ€ljastab kĂ”ik sĂŒsteemikĂ”ned uuritavast protsessist (ja selle alaprotsessidest). Viimane on vĂ€ga oluline, kuna etcd kasutab just sellist lĂ€henemist.
Esimese asjana kasutasime strace'i Kubernetes'e etcd-serveri uurimiseks, kui klastril polnud koormust. NĂ€gime, et peaaegu kĂ”ik WAL-kirjed olid ligikaudu sama suurusega: 2200â2400 baiti. SeetĂ”ttu mĂ€rkisime postituse alguses parameetri âbs=2300 (bs tĂ€histab iga fio-kirje suurust baitides). Pange tĂ€hele, et etcd-kirje suurus sĂ”ltub etcd versioonist, tarnest, parameetrite vÀÀrtustest jne ning mĂ”jutab fdatasync'i kestust. Kui teil on sarnane stsenaarium, uurige oma etcd-protsesse strace'i abil, et saada tĂ€psed numbrid.
See, et etsee toimingutest failisĂŒsteemis on selgem ĂŒlevaade, kui kĂ€ivitame selle strace'iga ja parameetritega -ffttT. Nii pĂŒĂŒdsime uurida alamprotsesse ja salvestada igaĂŒhe vĂ€ljunde erinevasse faili ning saada ĂŒksikasjalikke aruandeid iga sĂŒsteemikĂ”ne algusest ja kestusest. Kasutasime lsof-i, et kinnitada strace'i vĂ€ljundi analĂŒĂŒsi ja nĂ€ha, milline failihaldur milleks kasutati. Nii saime strace'i abil tulemused, nagu ĂŒlal nĂ€idatud. SĂŒnkroonimise ajastatistika kinnitas, et etcd wal_fsync_duration_seconds vastab fdatasync-kĂ”nedele WAL-i failihalduritega.
Uurisin fio dokumentatsiooni ja valisime meie stsenaariumi jaoks parameetrid, et fio genereeriks koormuse, mis sarnaneb etcd-le. Samuti kontrollisime sĂŒsteemikĂ”nesid ja nende kestust, kĂ€ivitades fio strace'ist, nagu etcd puhul.
Oleme hoolikalt valinud parameetri vÀÀrtuse âsize, mis kujutab kogu I/O koormust fio-st. Meie puhul on see ĂŒldine baitide arv, mis salvestatakse mĂ€lusesse. See osutus otseselt proportsionaalseks sĂŒsteemi kutsungite write (ja fdatasync) arvuga. Kindla bs vÀÀrtuse puhul on kutsungite fdatasync arv = size/bs. Kuna meid huvitas protsentiil, pidime saama piisavalt nĂ€iteid usaldusvÀÀrsuse tagamiseks, ja arvutasime, et 10^4 on piisav (see teeb 22 mebibaiti). Kui âsize on vĂ€iksem, vĂ”ivad tekkida kĂ”rvalekalded (nĂ€iteks mĂ”ned fdatasync kutsungid vĂ”ivad kesta kauem kui tavaliselt ja mĂ”jutada 99. protsentiili).
Proovige ise
Oleme nĂ€idanud, kuidas kasutada fio-d ja teada saada, kas salvestusel on piisavalt kiirus kĂ”rge jĂ”udluse jaoks etcd jaoks. NĂŒĂŒd saate proovida seda ise, kasutades nĂ€iteks SSD mĂ€luseadmetega virtuaalseid masinaid IBM Cloudis. .
Allikas: habr.com
