
LĂŒhike lugu fio-st ja etcd-st
Klastri jĂ”udlus sĂ”ltub suuresti selle salvestusruumi jĂ”udlusest. etcd ekspordib mĂ”ned mÔÔdikud , et pakkuda vajalikke andmeid salvestusruumi jĂ”udluse kohta. NĂ€iteks mÔÔdik wal_fsync_duration_seconds. : et salvestusruum oleks piisavalt kiire, peab selle mÔÔdiku 99. protsentiil olema vĂ€iksem kui 10 ms. Kui kavatsete kĂ€ivitada etcd klastri Linuxi masinatel ja soovite hinnata, kas teie salvestusruum (nt SSD) on piisavalt kiire, vĂ”ite kasutada â populaarne tööriist sisend-/vĂ€ljundoperatsioonide testimiseks. KĂ€itage jĂ€rgmine kĂ€sk, kus test-data on salvestusruumi mount-punkti kataloog:
fio --rw=write --ioengine=sync --fdatasync=1 --directory=test-data --size=22m --bs=2300 --name=mytestPeate lihtsalt vaatama tulemusi ja kontrollima, et 99. protsentiil kestusest on vÀiksem kui 10 ms. Kui jah, siis on teie salvestusruum piisavalt kiire. Siin on tulemuste nÀide:
sync (usec): min=534, max=15766, avg=1273.08, stdev=1084.70
sync protsentiilid (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]MĂ€rkus
- Oleme seadistanud parameetrite vÀÀrtused âsize ja âbs oma konkreetse stsenaariumi jaoks. Fio-st kasuliku tulemuse saamiseks esitage oma vÀÀrtused. Kust neid saada? Loe edasi, .
- Testimise ajal tuleb kogu sisendi/vÀljundi koormus fio-st. Reaalsetes stsenaariumites vÔivad salvestusruumi jÔuda ka muud kirjutamislood, peale wal_fsync_duration_seconds-seose. Lisakoormus suurendab wal_fsync_duration_seconds vÀÀrtust. Nii et kui 99. protsentiil on peaaegu 10 ms, siis ei ole teie salvestusruum piisavalt kiire.
- Kasutage versiooni vÀhemalt 3.5 (eelnevad ei nÀita fdatasync-i kestvuse protsentiile).
- Ălaltoodud on vaid paljude tulemuste fragment fio-st.
Pikk lugu fio-st ja etcd-st
Mis on WAL etcd-s
Tavaliselt kasutavad andmebaasid ; etcd kasutab seda samuti. Siin me ei aruta sĂŒvitsi ette kirjutamise pĂ€eva (write-ahead log, WAL). Meie jaoks on oluline teada, et iga etcd klastri liige salvestab selle pĂŒsivasse salvestusse. etcd salvestab iga operatsiooni vĂ”tme-vÀÀrtuse paaridega (nĂ€iteks uuendamine) WAL-i, enne kui rakendab need salvestusse. Kui mĂ”ni salvestuse liikmest katkeb ja taaskĂ€ivitatakse, saab ta kohaliku taastamise teostada viimasest salvestusest WAL sisu pĂ”hjal.
Kui klient lisab vĂ”tme vĂ”tme-vÀÀrtuse salvestusse vĂ”i uuendab olemasoleva vĂ”tme vÀÀrtust, siis etcd kannab selle operatsiooni WAL-i, mis on tavaline fail pĂŒsivas salvestuses. Enne töötlemise jĂ€tkamist peab etcd olema tĂ€iesti veendunud, et WAL-i sissekanne on tĂ”eliselt toimunud. Linuxis ei piisa selleks ĂŒhest sĂŒsteemi kĂ”nest. , kuna tegelikult vĂ”ib fisikaline kirjutamine salvestusse olla viivitusega. NĂ€iteks vĂ”ib Linux hoida WAL-i sissekannet seni mĂ€lus, kuni see on tuvastatud (nĂ€iteks lehekĂŒlje vahemĂ€lu). Ja selleks, et andmed kindlalt pĂŒsivasse salvestusse kirjutada, on vajalik sĂŒsteemi kĂ”ne fdatasync pĂ€rast kirjutamist, ja just seda kasutab etcd (nagu nĂ€ha kĂ€ituse tulemusest , kus 8 on WAL-i failide 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) = 0Kahjuks ei toimu pĂŒsivasse salvestusse kirjutamine kohe. Kui fdatasync kĂ”ne toimub aeglaselt, siis etcd sĂŒsteemi jĂ”udlus langeb. , et salvestust peetakse piisavalt kiireks, kui 99. protsendil fdatasync kĂ”nedest vĂ”tme WAL-i kirjutamisel kulub vĂ€hem aega kui 10 ms. On ka teisi kasulikke salvestusmeetmeid, kuid selles postituses rÀÀgime ainult sellest nĂ€itajast.
Salvestuse hindamine fio abil
Kui soovite hinnata, kas teie salvestusruum sobib etcd-le, kasutage fio-d - vĂ€ga populaarset sisendi-vĂ€ljundi koormustestimise tööriista. Tuleb meeles pidada, et kettaoperatsioonid vĂ”ivad olla vĂ€ga erinevad: sĂŒnkroonsed ja asĂŒnkroonsed, erinevad sĂŒsteemikutsed jne. Selle tulemusena on fio kasutamine piisavalt keeruline. Sellel on palju parameetreid ja erinevad kombinatsioonid nende vÀÀrtustest annavad tĂ€iesti erinevaid sisendi-vĂ€ljundi koormusi. Et saada sobivaid numbreid etcd jaoks, tuleb veenduda, et fio kirjutamiskoormus on maksimaalselt lĂ€hedane reaalsele koormusele, mida etcd genereerib WAL-failide kirjutamisel.
Seega peab fio vĂ€hemalt genereerima koormuse, mis koosneb jĂ€rjestikustest kirjutamisoperatsioonidest faili, kus iga kirjeldus sisaldab sĂŒsteemikutsumist , millele jĂ€rgneb sĂŒsteemikutsumine fdatasync. JĂ€rjestikuste kirjutamisoperatsioonide jaoks vajab fio parameetrit ârw=write. Et fio kirjutamise ajal kasutaks sĂŒsteemikutsumist write, mitte , tuleks mÀÀrata parameeter âioengine=sync. LĂ”puks, et pĂ€rast iga kirjutamist kutsutaks esile fdatasync, tuleb lisada parameeter âfdatasync=1. Kaks muud parameetrit selles nĂ€ites (âsize ja âbs) sĂ”ltuvad konkreetsest stsenaariumist. JĂ€rgmises osas rÀÀgime sellest, kuidas neid seadistada.
Miks just fio ja kuidas me Ôppisime seda seadistama
Selles postituses kirjeldame tĂ”elist juhtumit. Meil oli klaster v1.13, mida me jĂ€lgisime Prometheuse abil. etcd v3.2.24 oli paigutatud SSD-le. etcd sagedused nĂ€itasid liiga kĂ”rgeid latentsusi fdatasync jaoks, isegi kui klaster ei teinud midagi. Metriikad olid kummalised ja me ei teadnud tĂ€pselt, mida need tĂ€hendavad. Klaster koosnes virtuaalsete masinate komplektist ja tuli aru saada, kus probleem seisneb: fĂŒĂŒsilistes SSD-des vĂ”i virtualiseerimise kihis. Samuti tegime sageli muudatusi riistvara ja tarkvara konfigureerimises ning vajasime viisi nende tulemuste hindamiseks. Me saime kĂ€ivitada etcd igas konfigureerimises ja vaadata Prometheuse metriikad, kuid see oli liiga tĂŒlikas. Otsisime piisavalt lihtsat viisi konkreetse konfiguratsiooni hindamiseks. Soovisime kontrollida, kas me saame aru Prometheuse metriikad etcd-st Ă”igesti.
Kuid selleks tuli lahendada kaks probleemi. Esiteks, milline on sisse-/vĂ€ljundkoormus, mida etcd genereerib WAL-i kirjutamisel? Milliseid sĂŒsteemi kutseid kasutatakse? Kui suured on kirjed? Teiseks, kui me vastame nendele kĂŒsimustele, kuidas luua sarnast töökoormust fio abil? Ăra unusta, et fio on vĂ€ga paindlik tööriist, millel on palju parameetreid. Me lahendasime mĂ”lemad probleemid ĂŒhe lĂ€henemisega â kĂ€skude abil. ja . lsof nĂ€itab kĂ”iki failideskirjade kasutajaid protsessis ja nendega seotud faile. strace'i abil saab uurida juba kĂ€imasolevat protsessi vĂ”i kĂ€ivitada protsessi ja seda uurida. strace prindib kĂ”ik sĂŒsteemi kutsetest, mis tulenevad uuritavast protsessist (ja tema alamprotsessidest). Viimane on eriti oluline, kuna etcd rakendab just sellist lĂ€henemist.
Esiteks kasutasime strace'i, et uurida etcd serverit Kubernetes'ile, kui klastril ei olnud koormust. NĂ€gime, et peaaegu kĂ”ik WAL-i kirjed olid umbes sama suurusega: 2200â2400 baiti. SeetĂ”ttu mÀÀrasime postituse alguses meeskonnas parameetri âbs=2300 (bs tĂ€histab iga fio kirje baiti). Pange tĂ€hele, et etcd kirje suurus sĂ”ltub etcd versioonist, tarnest, parameetrite vÀÀrtustest jne ning see mĂ”jutab fdatasync'i kestvust. Kui teil on sarnane stsenaarium, uurige oma etcd protsesse strace'i abil, et teada saada tĂ€pseid nĂ€itajaid.
SeejĂ€rel, et paremini mĂ”ista etcd tegevusi failisĂŒsteemis, kĂ€ivitasime selle strace'i abil koos parameetritega -ffttT. Nii pĂŒĂŒdsime uurida alamprotsesse ja salvestada igaĂŒhe vĂ€ljund eraldi faili, samuti saada ĂŒksikasjalikke aruandeid iga sĂŒsteemikutse alguse ja kestuse kohta. Kasutasime lsof-i, et kinnitada oma strace'i vĂ€ljundi analĂŒĂŒsi ja nĂ€ha, millist failideskirja millega kasutatakse. Nii saime strace'i abil sellised tulemused nagu eespool. SĂŒnkroniseerimise ajastatistika kinnitas, et etcd wal_fsync_duration_seconds vastab fdatasync'i kutsetele WAL failideskirjadega.
Uurisime fio dokumentatsiooni ja valisime parameetrid oma stsenaariumi jaoks, et fio genereeriks koormuse, mis oleks sarnane etcd-le. Kontrollisime ka sĂŒsteemi kutse ja nende kestvust, kĂ€ivitades fio strace'ist, sarnaselt etcd-le.
Oleme hoolikalt valinud parameetri âsize tĂ€henduse, mis esindab kogu sisendi-output'i koormust fio-st. Meie puhul on see salvestusse kirjutatud baitide koguhulk. See osutus otse proportsionaalseks sĂŒsteemi sĂŒsteemikĂ”nede kirjutamise (ja fdatasync) arvuga. Kindla bs vÀÀrtuse jaoks on fdatasync kĂ”nede arv = size/bs. Kuna meid huvitas protsentil, pidi meil olema piisavalt nĂ€idiseid usaldusvÀÀrsuse tagamiseks, ja lugesime, et 10^4 (umbes 22 mebibaiti) peaks olema piisav. Kui âsize on vĂ€iksem, vĂ”ivad tekkida kĂ”rvalekalded (nĂ€iteks vĂ”tab mĂ”ningate fdatasync kĂ”nede töötlemine kauem aega ja mĂ”jutab 99. protsentiili).
Proovige ise
Oleme nĂ€idanud, kuidas kasutada fio-d ja teada saada, kas salvestus on piisavalt kiire, et pakkuda kĂ”rget jĂ”udlust etcd jaoks. NĂŒĂŒd saate seda ise praktikas proovida, kasutades nĂ€iteks SSD salvestustega virtuaalmasinaid. .
Allikas: habr.com
