Kuidas kontrollida fio-ga kettad piisava toimivuse jaoks etcd jaoks

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.

Kuidas kontrollida fio-ga kettad piisava toimivuse jaoks etcd jaoks

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 ĂŒtleb, 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 fio. 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=mytest

JÀÀnud on vaid vaadata vÀljundit ja kontrollida, kas 99. persentiil mahub 10 ms sisse. fdatasync 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:

  1. Ülaltoodud nĂ€ites kohandasime parameetreid --size ja --bs konkreetse juhtumi jaoks. Et saada sisukat tulemust fio, mÀÀrake vÀÀrtused, mis sobivad teie kasutusstsenaariumile. Kuidas neid valida, selgitatakse allpool.
  2. Testimise ajal fio koormab ainult kettaalajĂ€rje. Reaalses elus on tĂ”enĂ€oline, et ketast kirjutavad ka teised protsessid (vĂ€lja arvatud need, mis on seotud wal_fsync_duration_seconds). TĂŒĂŒpiline lisakoormus vĂ”ib pĂ”hjustada kasvu wal_fsync_duration_seconds. TeisisĂ”nu, kui 99. persentiil, mis saadi testi tulemusena fio, on vaid veidi alla 10 ms, on suur tĂ”enĂ€osus, et andmete salvestamise jĂ”udlus on ebapiisav.
  3. Testimiseks on vajalik versioon fio vÀhemalt 3.5, kuna vanemad versioonid ei koonda tulemusi fdatasync protsentiilide kujul.
  4. Ü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 ettejĂ”udvat logimist (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. write, 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 strace; 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 nĂ€idatakse, 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 fio — 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 fio koormus peab vĂ€hemalt koosnema jĂ€rjestikuste kirjetest failis, kus iga kirjutamistoiming koosneb sĂŒsteemi kutsungist write, millele jĂ€rgneb fdatasync.
  • JĂ€rjestelmĂ€kirjoituksen aktivoimiseksi on osoitettava lippu --rw=write.
  • Et fio kirjoitti kutsujen avulla write (eikĂ€ muiden jĂ€rjestelmĂ€kutsujen — esimerkiksi pwrite), kĂ€ytĂ€ lippua --ioengine=sync.
  • Lopuksi, lippu --fdatasync=1 takaa, ettĂ€ jokaisen write tuleks fdatasync.
  • Kaksi muuta parametreista esimerkissĂ€mme: --size ja --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 siit ­— tĂ”lke mĂ€rk.).

Lahendasime mÔlemad probleemid sama lÀhenemisega, tuginedes kÀskudele lsof ja strace:

  • KĂ€esoleva abil lsof saab vaadata kĂ”iki failideskirid, mida protsess kasutab, ning faile, millega nad on seotud.
  • KĂ€esoleva abil strace saab 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 IBM Cloud.

P.S. tÔlkija mÀrkused

Valmis kasutamise nĂ€idistega fio vĂ”ib tutvuda muude ĂŒlesannete lahendamiseks dokumentatsioonis vĂ”i otse projekti repos (seal on neid palju rohkem, kui dokumentatsioonis mainitakse).

P.P.S. tÔlkijalt

Lugege ka meie blogist:

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster