Kas salvestuskiirus sobib etcd jaoks? KĂŒsime fio.

Kas salvestuskiirus sobib etcd jaoks? KĂŒsime fio.

LĂŒhike lugu fio-st ja etcd-st

Klastri jĂ”udlus etcd sĂ”ltub suuresti selle salvestusruumi jĂ”udlusest. etcd ekspordib mĂ”ned mÔÔdikud Prometheus, et pakkuda vajalikke andmeid salvestusruumi jĂ”udluse kohta. NĂ€iteks mÔÔdik wal_fsync_duration_seconds. Dokumendis, mis kĂ€sitleb etcd-d, on öeldud: 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 fio — 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=mytest

Peate lihtsalt vaatama tulemusi ja kontrollima, et 99. protsentiil kestusest fdatasync 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, kuidas me Ă”ppisime fio-d seadistama.
  • 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 fio 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 ennustava kirjutamise ĆŸurnali; 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. kirjutama, 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 strace, 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)            = 0

Kahjuks ei toimu pĂŒsivasse salvestusse kirjutamine kohe. Kui fdatasync kĂ”ne toimub aeglaselt, siis etcd sĂŒsteemi jĂ”udlus langeb. Dokumentatsioonis, millega tegeleb etcd, öeldakse, 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 kirjutama, millele jĂ€rgneb sĂŒsteemikutsumine fdatasync. JĂ€rjestikuste kirjutamisoperatsioonide jaoks vajab fio parameetrit —rw=write. Et fio kirjutamise ajal kasutaks sĂŒsteemikutsumist write, mitte pwrite, 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 Kubernetes 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. lsof ja strace. 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. Valmis nĂ€idete kohta teiste ĂŒlesannete lahendamiseks saab tutvuda.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster