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.

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 , 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 . 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=mytestJÀÀb vaid vaadata vÀljundit ja kontrollida, kas 99. protsentiil 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:
- Ălaltoodud nĂ€ites oleme seadistanud parameetrid
--sizeja--bskonkreetse juhtumi jaoks. Et saada sisutihedat tulemustfio, mÀrkige vÀÀrtused, mis sobivad teie kasutusstsenaariumi jaoks. Kuidas neid valida, selgitatakse allpool. - Testimise ajal ainult
fiokoormab kettaalustust. Tegelikkuses on tÀiesti tÔenÀoline, et ketta kirjutavad ka muud protsessid (peale nende, mis on seotudwal_fsync_duration_seconds). Selline tÀiendav koormus vÔib pÔhjustada suurenenudwal_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 - Testimiseks on teil vaja versiooni
fiovĂ€hemalt 3.5, kuna varasemad versioonid ei kogu tulemusifdatasyncprotsentides. - Ă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 (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 , 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 ; 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 , 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 â 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
fiokoormus peab vĂ€hemalt koosnema jĂ€rjestikustest kirjutamisest failisse, kus igas kirjutusoperatsioonis on sĂŒsteemikĂ”ne , millele jĂ€rgnebfdatasync. - K jĂ€rjestikuse kirjutamise aktiveerimiseks tuleb mÀÀrata lipp
--rw=write. - Et
fiokasutas sĂŒsteemikĂ”nesidkirjutama(mitte muid sĂŒsteemikĂ”nesid â nĂ€iteks, ), kasutage lippu--ioengine=sync. - LĂ”puks, lipp
--fdatasync=1tagab, et igakirjutamapÀrastfdatasync. - Kaks muud parameetrit meie nÀites:
--sizeja--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, Ââ tĂ”lke mĂ€rk.).
Lahendasime mÔlemad probleemid sama lÀhenemisega, tuginedes kÀskudele ja :
- EL-i abil
lsofsaame vaadata kĂ”iki faili descriptorâe, mida protsess kasutab, samuti faile, millega nad on seotud. - EL-i abil
stracesaame 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 .
P.S. tÔlkijalt
vĂ”i otse fio (seal on neid palju rohkem kui dokumentatsioonis). MĂ€rkus: see artikkel on IBM Cloudi inseneride vĂ€ikese uuringu tulemused, et leida lahendusi pĂ€ris probleemile, mis on seotud etcd andmebaasi haldamisega. đ„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
