Kuidas fio abil kontrollida ketaste piisavust et ched jaoks

MĂ€rkus tĂ”lke kohta.: see artikkel on IBM Cloudi inseneride lĂ€bi viidud mini-uuringu tulemused, mille eesmĂ€rgiks oli leida lahendusi tĂ”eliseks probleemiks, mis on seotud etcd andmebaasi haldamisega. Meile oli oluline sarnane ĂŒlesanne, kuid autorite mĂ”tlemise ja tegutsemise kĂ€ik vĂ”ib olla huvitav ka laiemas kontekstis.

Kuidas fio abil kontrollida ketaste piisavust et ched jaoks

Kogu artikli lĂŒhike kokkuvĂ”te: fio ja etcd

etcd klastrite jĂ”udlus sĂ”ltub tugevalt pĂ”hihoiustamise kiirusest. Etcd eksportib erinevaid Prometheuse mÔÔdikuid jĂ”udluse jĂ€lgimiseks. Üks neist on wal_fsync_duration_seconds. Etcd dokumentatsioonis öeldakse, et hoiust saab pidada piisavalt kiireks, kui selle mÔÔdiku 99. protsentiil ei ĂŒleta 10 ms


Kui kaalute etcd klastri loomist Linuxi masinates ja soovite kontrollida, kas teie salvestid (nt SSD-d) on piisavalt kiired, soovitame kasutada populaarset I/O testimistööriista nimelt fio. Piisab, kui kÀivitate jÀrgmise kÀsu (kaust test-data peab asuma testitava salvesti mountitud jaotises):

fio --rw=write --ioengine=sync --fdatasync=1 --directory=test-data --size=22m --bs=2300 --name=mytest

JÀÀb vaid vaadata vÀljundit ja kontrollida, kas 99. protsentiil fdatasync on 10 ms piires. Kui jah, siis toimib teie salvesti piisavalt kiiresti. Siin on nÀide vÀljundist:

fsync/fdatasync/sync_file_range:
  sync (mikrosekundites): min=534, max=15766, avg=1273.08, stdev=1084.70
  sync protsentiilid (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 oleme seadistanud parameetrid --size ja --bs konkreetse juhtumi jaoks. Et saada sisutihedat tulemust fio, mĂ€rkige vÀÀrtused, mis sobivad teie kasutusstsenaariumi jaoks. Kuidas neid valida, selgitatakse allpool.
  2. Testimise ajal ainult fio koormab kettaalustust. Tegelikkuses on tÀiesti tÔenÀoline, et ketta kirjutavad ka muud protsessid (peale nende, mis on seotud wal_fsync_duration_seconds). Selline tÀiendav koormus vÔib pÔhjustada suurenenud wal_fsync_duration_seconds. TeisisÔnu, kui 99. protsentiil, mis saadakse testimise tulemusena, on ainult veidi alla 10 ms, on tÔenÀosus, et salvesti jÔudlus on ebapiisav. fioTestimiseks vajate versiooni
  3. Testimiseks on teil vaja versiooni fio vÀhemalt 3.5, kuna varasemad versioonid ei kogu tulemusi fdatasync protsentides.
  4. Ülaltoodud vĂ€ljund on vaid vĂ€ike osa kogu vĂ€ljundist fio.

Üksikasjalikult fio ja etcd kohta

MÔned sÔnad etcd WAL-ide kohta

Tavaliselt kasutavad andmebaasid ettejĂ”udmist logimist (write-ahead logging, WAL). See kehtib ka etcd kohta. WAL-i arutelu ĂŒletab kĂ€esoleva artikli piirid, kuid meie eesmĂ€rkide jaoks on oluline teada, et iga etcd klastriliige salvestab WAL-i pĂŒsivasse mĂ€llu. etcd registreerib mĂ”ned toimingud key-value salvestuses (nt uuendused) WAL-is enne nende tĂ€itmist. Kui sĂ”lm langeb ja taaskĂ€ivitub snapshotside vahel, suudab etcd taastada tehingud, mis on toimunud eelmisest snapshot'ist alates, tuginedes WAL-i sisule.

Seega, iga kord, kui klient lisab vĂ”tme KV-salvestusse vĂ”i uuendab olemasoleva vĂ”tme vÀÀrtust, lisab etcd toimingu kirjelduse WAL-i, mis on tavaline fail pĂŒsivates mĂ€ludes. Enne töö jĂ€tkamist peab etcd olema 100% kindel, et WAL-i kirje on tĂ”eliselt salvestatud. Selle saavutamiseks Linuxis ei piisa ainult sĂŒsteemi kutsest kirjutama, kuna kirjete fĂŒĂŒsilise salvestamise toiming vĂ”ib olla edasi lĂŒkatud. NĂ€iteks vĂ”ib Linux hoida WAL-kirjet mĂ”nda aega tuuma mĂ€lus (nt lehekĂŒlje vahekaartides). Andmete salvestamise tagamiseks tuleb pĂ€rast salvestamist rakendada sĂŒsteemi kĂ”net fdatasync — just nii toimib etcd (nagu nĂ€ha jĂ€rgmise vĂ€ljundi puhul strace; siin 8 — WAL-faili 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 mĂ€llu kirjutamine mĂ”nda aega. Fdatasync-i kutse viibimisega vĂ”ib olla negatiivne mĂ”ju etcd jĂ”udlusele. Andmehoidla dokumentatsioonis töötatakse vĂ€lja, et piisava jĂ”udluse saavutamiseks peab 99. protsent kĂ”ikidest fdatasync WAL-faili kirjutamise ajal töötavast kestusest olema vĂ€hem kui 10 ms. On ka muid salvestusega seotud mÔÔdikuid, kuid selles artiklis keskendume just sellele.

Hindame andmehoidlat fio abil

Hinnata, kas mĂ”ni salvestus on sobiv etcd kasutamiseks, saab utiliidi abi kaudu fio — populaarne I/O testimise tööriist. Arvestage, et kettasisene I/O vĂ”ib toimuda erinevalt: sĂŒntaktiline/asisĂŒntaktiline, erinevad sĂŒsteemikĂ”nede klassid jne. Tagasilöögi kĂŒlg on selles, et fio see on ÀÀrmiselt keeruline kasutada. Utiliidil on palju parameetreid ja nende erinevad kombinatsioonid toovad kaasa tĂ€iesti erinevaid tulemusi. Et saada mĂ”istlik hinnang etcd jaoks, peate veenduma, et fio genereeritud kirjutuskoormus sarnaneb maksimaalselt etcd koormusele WAL-failide kirjutamisel:

  • See tĂ€hendab, et genereeritud fio koormus peab vĂ€hemalt koosnema jĂ€rjestikustest kirjutamisest failisse, kus igas kirjutusoperatsioonis on sĂŒsteemikĂ”ne kirjutama, millele jĂ€rgneb fdatasync.
  • K jĂ€rjestikuse kirjutamise aktiveerimiseks tuleb mÀÀrata lipp --rw=write.
  • Et fio kasutas sĂŒsteemikĂ”nesid kirjutama (mitte muid sĂŒsteemikĂ”nesid — nĂ€iteks, pwrite), kasutage lippu --ioengine=sync.
  • LĂ”puks, lipp --fdatasync=1 tagab, et iga kirjutama pĂ€rast fdatasync.
  • Kaks muud parameetrit meie nĂ€ites: --size ja --bs — vĂ”ivad sĂ”ltuda konkreetsest kasutusstsenaariumist. JĂ€rgmises jaotises tutvustame nende seadistamist.

Miks valisime fio ja kust me teadsime, kuidas seda seadistada

See mĂ€rkus tekkis reaalsest juhtumist, millega me silmitsi seisime. Meil oli klastri Kubernetes v1.13-ga, mille jĂ€lgimiseks kasutati Prometheust. Etcd v3.2.24 salvestamiseks kasutati tahkis-mĂ€lusid. Etcd mÔÔdikud nĂ€itasid liiga kĂ”rgeid viivitusi fdatasync, isegi kui klaster ootas. Need mÔÔdikud tundusid meile kahtlased ja me ei olnud kindlad, mida need tĂ€pselt esindavad. Lisaks, klaster koosnes virtuaalmasinatest, seega ei olnud vĂ”imalik öelda, kas viivitused olid seotud virtualiseerimisega vĂ”i oli sĂŒĂŒdi SSD.

Lisaks sellele oleme uurinud erinevaid riist- ja tarkvarakonfiguratsioonimuudatusi, seega oli vajalik nende hindamise viis. Muidugi oleks olnud vÔimalik kÀivitada etcd igas konfiguratsioonis ja vaadata vastavaid Prometheuse mÔÔdikuid, kuid see nÔuaks mÀrkimisvÀÀrseid jÔupingutusi. Me vajame lihtsat viisi, et hinnata konkreetset konfiguratsiooni. Soovisime kontrollida oma arusaama Prometheuse mÔÔdikutest, mis tulenevad etcd-st.

Selleks oli vaja lahendada kaks probleemi:

  • Esiteks, milline on I/O-koormus, mida etcd genereerib WAL-failidesse kirjutamisel? Milliseid sĂŒsteemikĂ”nesid kasutatakse? Mis on kirjutamise plokkide suurus?
  • Teiseks, oletame, et meil on vastused ĂŒlaltoodud kĂŒsimustele. Kuidas luua vastav koormus fio? Đ’Đ”ĐŽŃŒ fio — ÀÀrmiselt paindlik utiliit, millel on palju parameetreid (seda on lihtne kontrollida, nĂ€iteks, siin ­— tĂ”lke mĂ€rk.).

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

  • EL-i abil lsof saame vaadata kĂ”iki faili descriptor’e, mida protsess kasutab, samuti faile, millega nad on seotud.
  • EL-i abil strace saame analĂŒĂŒsida juba töötavat protsessi vĂ”i kĂ€ivitada protsessi ja seda jĂ€lgida. KĂ€sk toob vĂ€lja kĂ”ik sĂŒsteemikĂ”ned, mida antud protsess on teinud ja vajadusel ka tema jĂ€rglased. Viimane on oluline forkivate protsesside jaoks, mille hulka kuulub ka etcd.

Esimene asi, mida tegime, oli kasutada strace Kubernetesi klastris etcd serveri uurimiseks, samal ajal kui see seisis.

Nii avastati, et WAL-i kirjutamisplokid on vĂ€ga tihedalt grupeeritud, enamik nende suurust oli vahemikus 2200–2400 baiti. TĂ€pselt sellepĂ€rast kasutatakse kĂ€skude alguses artiklis lippu --bs=2300 (bs — iga kirjutamisploki suurus baitides fio).

Pange tĂ€hele, et etcd kirjutamisplokkide suurus vĂ”ib erineda sĂ”ltuvalt versioonist, juurutamisest, parameetrite vÀÀrtustest jne. — see mĂ”jutab kestust fdatasync. Kui teil on sarnane kasutusstsenaarium, analĂŒĂŒsige strace oma etcd protsesse, et saada ajakohaseid vÀÀrtusi.

SeejĂ€rel, et saada selget ja kĂ”ikehĂ”lmavat arusaama etcd tööst failisĂŒsteemiga, kĂ€ivitasime selle strace lippudega -ffttT. See vĂ”imaldas ulatuda alamprotsessidesse ja talletada igaĂŒhe vĂ€ljundi eraldi faili. Lisaks saadi ĂŒksikasjalikud andmed iga systeemkĂ”ne alguse hetke ja kestuse kohta.

Kasutame ka kĂ€sku lsof, et kinnitada oma arusaama vĂ€ljundist strace , mis puudutab, milline failideskriptor oli millekski kasutatud. Saime vĂ€ljundi strace, mis sarnanes ĂŒlaltooduga. Statistilised manipulatsioonid sĂŒnkroonimisaegadega kinnitasid, et mÔÔdik wal_fsync_duration_seconds etcd-lt vastab kĂ”nedele fdatasync failide WAL deskriptoritega.

Koormuse genereerimiseks, mis on sarnane etcd koormusega, uuriti tööriista dokumentatsiooni ja valiti parameetrid, mis sobivad meie ĂŒlesande jaoks. Veendusime, et kaasatud on vajalikud systeemkĂ”ned, ja kinnitasime nende kestuse, kĂ€ivitades fio (nagu tehti etcd puhul). fio API-s strace Erilist tĂ€helepanu pöörati parameetri

mÀÀramisele. See on fio tööriista genereeritud ĂŒldine I/O koormus. Meie puhul on see valjude baitide kogus, mis on kirjutatud mĂ€lumeediasse. See on otseselt proportsionaalne kĂ”nede arvuga --size). Kindla kirjutama (ja fdatasynckĂ”nede arvu bs on fdatasync size / bs Kuna meid huvitas protsentil, pĂŒĂŒdsime veenduda, et proovide arv oleks piisavalt suur statistilise olulisuse jaoks. Otsustasime, et.

(mis vastab 22 MB suurusele) on piisav. VĂ€iksemad parameetri vÀÀrtused 10^4 tootsid rohkem mĂŒra (nt kĂ”ned --size , mis vĂ”tavad palju rohkem aega kui tavaliselt, ja mĂ”jutavad 99. percentiili). fdatasyncNĂŒĂŒd olete teinud oma töö

Artiklis kuvatakse, kuidas

vĂ”ib hinnata, kas taustand on piisavalt kiire, et seda saaks kasutada etcd jaoks. NĂŒĂŒd on teie kord! Uurige SSD pĂ”histe salvestustega virtuaalmasinaid fio IBM Cloud Valmis nĂ€idete kohta teiste ĂŒlesannete lahendamiseks saab tutvuda.

P.S. tÔlkijalt

vĂ”i otse fio (seal on neid palju rohkem kui dokumentatsioonis). dokumentatsioon MĂ€rkus: see artikkel on IBM Cloudi inseneride vĂ€ikese uuringu tulemused, et leida lahendusi pĂ€ris probleemile, mis on seotud etcd andmebaasi haldamisega. projekti hoidlas đŸ„‡Kuidas kontrollida fio abil, kas ketas on piisavalt jĂ”udlusega etcd jaoks | ProHoster

P.P.S. tÔlkijalt

Lugege ka meie blogist:

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