Ahoana no hanamarinana disks miaraka amin'ny fio ho an'ny fahombiazana ampy ho an'ny etcd

Fanamarihana. transl.: Ity lahatsoratra ity dia vokatry ny fikarohana kely nataon'ny injeniera IBM Cloud amin'ny fitadiavana vahaolana amin'ny tena olana mifandraika amin'ny fampandehanana ny angona etcd. Nisy asa mitovy amin'izany ho antsika, na izany aza, ny fandehan'ny fisaintsainana sy ny fihetsik'ireo mpanoratra dia mety hahaliana amin'ny toe-javatra midadasika kokoa.

Ahoana no hanamarinana disks miaraka amin'ny fio ho an'ny fahombiazana ampy ho an'ny etcd

Famintinana fohy ny lahatsoratra manontolo: fio sy etcd

Miankina be amin'ny hafainganam-pandehan'ny fitahirizana fototra ny fahombiazan'ny cluster etcd. etcd dia manondrana metrika Prometheus isan-karazany mba hanaraha-maso ny fahombiazany. Ny iray amin'izy ireo dia wal_fsync_duration_seconds. Ao amin'ny antontan-taratasy momba ny etcd hoy izy ioizany fitahirizana izany dia azo heverina fa haingana be raha tsy mihoatra ny 99 ms ny 10 isan-jato amin'ity metrika ity…

Raha mieritreritra ny hametraka kluster etcd amin'ny milina Linux ianao ary te-hizaha raha toa ka haingana ny fiara (toy ny SSDs), dia manoro hevitra izahay hampiasa ny tester I/O malaza antsoina hoe fio. Ampy ny manatanteraka ity baiko manaraka ity (directory test-data tsy maintsy hita ao amin'ny fizarazaran'ny fiara voasedra):

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

Mijanona fotsiny ny mijery ny vokatra ary manamarina raha mifanaraka amin'ny 99 isan-jato fdatasync amin'ny 10 ms. Raha izany no izy, dia mandeha haingana ny fiaranao. Ity misy ohatra iray nivoaka:

fsync/fdatasync/sync_file_range:
  sync (usec): min=534, max=15766, avg=1273.08, stdev=1084.70
  sync percentiles (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]

Fanamarihana vitsivitsy:

  1. Ao amin'ny ohatra etsy ambony, dia nanitsy ny parameter --size ΠΈ --bs ho an'ny tranga manokana. Mba hahazoana vokatra manan-danja avy amin'ny fio, mamaritra ny sanda mety amin'ny tranga fampiasanao. Ny fomba hifidianana azy ireo dia horesahina etsy ambany.
  2. Nandritra ny fitsapana ihany fio mitondra ny subsystem kapila. Amin'ny tena fiainana dia azo inoana fa ny dingana hafa dia hanoratra amin'ny kapila (ankoatra ireo mifandraika amin'ny wal_fsync_duration_seconds). Mety hitombo io entana fanampiny io wal_fsync_duration_seconds. Raha lazaina amin'ny teny hafa, raha ny 99 isan-jato avy amin'ny fitsapana amin'ny fio, latsaky ny 10 ms kely fotsiny, misy ny vintana tsara fa tsy ampy ny fahombiazan'ny fitahirizana.
  3. Ho an'ny fitsapana dia mila ny dikan-teny ianao fio tsy latsaky ny 3.5, satria ny dikan-teny taloha dia tsy manangona vokatra fdatasync amin'ny endrika isan-jato.
  4. Ny fehin-kevitra etsy ambony dia ampahany kely fotsiny amin'ny fehin-kevitra ankapobeny fio.

Bebe kokoa momba ny fio sy etcd

Teny vitsivitsy momba ny WAL sns

Amin'ny ankapobeny, mampiasa angona logging proactive (fandraketana an-tsoratra mialoha, WAL). etcd koa voa. Ny fifanakalozan-dresaka momba ny WAL dia tsy tafiditra amin'ity lahatsoratra ity, fa ho an'ny tanjonay, ny tokony ho fantatrao dia ny mpikambana tsirairay ao amin'ny cluster etcd dia mitahiry WAL amin'ny fitahirizana maharitra. etcd dia manoratra hetsika fitahirizana manandanja (toy ny fanavaozana) amin'ny WAL alohan'ny hanatanterahana azy. Raha misy node mianjera ary miverina eo anelanelan'ny snapshots, sns dia afaka mamerina ny fifampiraharahana hatramin'ny sary teo aloha mifototra amin'ny votoatin'ny WAL.

Noho izany, isaky ny misy mpanjifa manampy lakile amin'ny fivarotana KV na manavao ny sandan'ny fanalahidy efa misy, sns dia manampy ny famaritana ny fandidiana amin'ny WAL, izay rakitra mahazatra ao amin'ny fivarotana maharitra. etcd TSY MAINTSY mahazo antoka 100% fa tena voavonjy ny fidirana WAL alohan'ny hirosoana. Mba hahatratrarana izany amin'ny Linux dia tsy ampy ny mampiasa ny antso an-tariby write, satria mety hahemotra ny asa fanoratana amin'ny haino aman-jery. Ohatra, ny Linux dia mety mitazona ny fidirana WAL ao anaty cache kernel ao anaty fahatsiarovana (oh, ao amin'ny cache pejy) mandritra ny fotoana fohy. Mba hahazoana antoka fa voasoratra amin'ny haino aman-jery ny angon-drakitra dia tsy maintsy asaina antsoin'ny rafitra aorian'ny fanoratana fdatasync - izany indrindra no ataon'ny etcd (araka ny hitanao amin'ity vokatra manaraka ity strace; Eto 8 - Famaritana ny rakitra WAL):

21:23:09.894875 lseek(8, 0, SEEK_CUR)   = 12808 <0.000012>
21:23:09.894911 write(8, ".20210220361223255266632$1020103026"34"rn3fo"..., 2296) = 2296 <0.000130>
21:23:09.895041 fdatasync(8)            = 0 <0.008314>

Mampalahelo fa mila fotoana kely ny fanoratana amin'ny fitahirizana maharitra. Mety hisy fiatraikany amin'ny fanatanterahana ny etcd ny fanatanterahana maharitra ny antso fdatasync. Ao amin'ny tahirin-kevitra repository nilaza, fa ho an'ny fampisehoana ampy dia ilaina ny 99 isan-jato amin'ny faharetan'ny antso rehetra fdatasync raha manoratra amin'ny rakitra WAL dia latsaky ny 10 ms. Misy metrika hafa mifandraika amin'ny fitahirizana, fa ity lahatsoratra ity dia hifantoka amin'izany.

Manome lanja ny fitahirizana miaraka amin'ny fio

Azonao atao ny manombatombana raha mety ny fitahirizana sasany ampiasaina amin'ny etcd mampiasa ny utility fio - mpanandrana I/O malaza. Ataovy ao an-tsaina fa ny disk I/O dia mety hitranga amin'ny fomba maro samihafa: sync/async, kilasy syscall maro samihafa, sy ny sisa. Ny lafiny hafa amin'ny vola madinika dia izany fio tena sarotra ampiasaina. Ny fitaovana dia manana masontsivana maro, ary ny fampifangaroana samihafa amin'ny sandany dia mitondra vokatra hafa tanteraka. Mba hahazoana tombatombana mitombina ho an'ny etcd, mila maka antoka ianao fa ny enta-manoratra vokarin'ny fio dia akaiky araka izay azo atao amin'ny enta-manoratra rakitra WAL an'ny etcd:

  • Midika izany fa ny vokarina fio ny entana dia tokony ho andian-tsoratra misesy fara-faharatsiny amin'ny rakitra, izay ahitana antso an-tariby ny sora-tanana tsirairay. writearahin'ny fdatasync.
  • Mba ahafahana manoratra misesy dia tsy maintsy mamaritra ny saina ianao --rw=write.
  • fa fio nanoratra tamin'ny alalan'ny antso write (fa tsy antso an-tariby hafa - ohatra, pwrite), ampiasao ny saina --ioengine=sync.
  • Farany, ny saina --fdatasync=1 miantoka fa ny tsirairay write dia tsy maintsy ho fdatasync.
  • Ny paramΓ¨tre roa hafa amin'ny ohatra ataontsika dia: --size ΠΈ --bs - mety miovaova arakaraka ny toe-javatra fampiasana manokana. Ny fizarana manaraka dia hamaritra ny fandrindrana azy ireo.

Nahoana no nifidy ny fio sy ny fomba nianaranay ny fametrahana azy

Ity fanamarihana ity dia avy amin'ny tranga tena nisy anay. Nanana cluster izahay tamin'ny Kubernetes v1.13 miaraka amin'ny fanaraha-maso amin'ny Prometheus. SSDs dia nampiasaina ho fitahirizana snsd v3.2.24. Ny metrika Etcd dia nampiseho fiatoana avo loatra fdatasync, na dia tsy miasa aza ny cluster. Aminay, toa mampiahiahy be ireo metrika ireo, ary tsy azonay antoka hoe inona marina no asehon'izy ireo. Ankoatr'izay, ny cluster dia misy milina virtoaly, ka tsy azo atao ny milaza na noho ny virtoaly ny fahatarana na ny SSD no omena tsiny.

Ho fanampin'izay, nandinika fiovana isan-karazany tamin'ny fanamboarana fitaovana sy rindrambaiko izahay, ka nila fomba hanombanana azy ireo. Mazava ho azy fa azo atao ny mihazakazaka etcd amin'ny fanamafisana tsirairay ary mijery ireo metrika Prometheus mifanaraka amin'izany, saingy mitaky ezaka lehibe izany. Ny nilainay dia fomba tsotra hanombanana tefi-trano manokana. Te-hitsapa ny fahatakaranay ny metrika Prometheus avy amin'ny etcd izahay.

Nitaky famahana olana roa izany:

  • Voalohany, manao ahoana ny enta-mavesatra I/O vokarin'ny etcd rehefa manoratra amin'ny rakitra WAL? Inona no antso an-tariby ampiasaina? Ohatrinona ny haben'ny blocs?
  • Faharoa, andeha atao hoe manana valiny amin'ireo fanontaniana etsy ambony isika. Ahoana ny famerenana ny entana mifandraika amin'ny fio? Sady koa anie fio - fampiasa tena mora azo miaraka amin'ny masontsivana be dia be (mora ny fanamarinana izany, ohatra, eto - eo ho eo. transl.).

Namaha olana roa izahay tamin'ny fomba iray mifototra amin'ny baiko lsof ΠΈ strace:

  • Amin'ny fanampian'ny lsof azonao jerena ny mpamoritra rakitra rehetra ampiasain'ny dingana, ary koa ny rakitra resahiny.
  • Amin'ny fanampian'ny strace azonao atao ny manadihady dingana efa mandeha na manao dingana iray ary mijery izany. Ny baiko dia mampiseho ny antson'ny rafitra rehetra nataon'ity dingana ity ary, raha ilaina, ny taranany. Ity farany dia zava-dehibe ho an'ny processus forking, ary etcd dia dingana iray toy izany.

Ny zavatra voalohany nataonay dia ny fampiasana strace handinihana ny mpizara etcd ao amin'ny cluster Kubernetes raha mbola tsy miasa izy.

Noho izany dia hita fa ny WAL record block dia tena mivondrona be, ny haben'ny ankamaroany dia eo amin'ny 2200-2400 bytes. Izany no mahatonga ny baiko eo am-piandohan'ity lahatsoratra ity hampiasa ny saina --bs=2300 (bs dia ny haben'ny bytes isaky ny sakana fanoratana fio).

Mariho fa ny haben'ny etcd write blocks dia mety miovaova arakaraka ny dikan-teny, ny fametrahana, ny sandan'ny paramètre, sns. - misy fiantraikany amin'ny faharetany izany fdatasync. Raha manana tranga fampiasa mitovy amin'izany ianao dia diniho miaraka amin'ny strace ny fizotry ny etcd anao mba hahazoana ny soatoavina farany.

Avy eo, mba hahazoana hevitra mazava sy feno momba ny fomba fiasan'ny etcd miaraka amin'ny rafi-drakitra, dia nanomboka izany izahay avy eo ambany. strace miaraka amin'ny saina -ffttT. Izany dia nahafahana nisambotra ny fizotry ny ankizy ary nanoratra ny vokatra avy amin'ny rakitra tsirairay. Fanampin'izany, azo ny fampahalalana amin'ny antsipiriany momba ny fotoana fanombohana sy ny faharetan'ny antso an-tariby tsirairay.

Nampiasa ny baiko koa izahay lsofmba hanamafisana ny fahatakaranao ny vokatra strace amin'ny lafin'ny famaritana ny rakitra ampiasaina amin'ny tanjona inona. azoko ny fehin-kevitra strace, mitovy amin'ilay etsy ambony. Ny fanodinkodinana statistika miaraka amin'ny fotoana fampifanarahana dia nanamafy fa ny metric wal_fsync_duration_seconds avy amin'ny etcd mifanandrify antso fdatasync miaraka amin'ny famaritana rakitra WAL.

Mamorona miaraka amin'ny fio enta-mavesatra mitovy amin'ny an'ny snsd, nodinihina ny antontan-taratasin'ny fitaovana ary nofantenana ny mari-pamantarana mety amin'ny asantsika. Nohamarininay fa mandeha ny antson'ny rafitra marina ary nanamafy ny faharetany tamin'ny fandehanana fio avy amin'ny strace (tahaka ny natao tamin'ny etcd).

Nodinihina manokana ny famaritana ny sandan'ny paramètre --size. Izy io dia maneho ny totalin'ny entana I/O vokatry ny fio utility. Amin'ny tranga misy antsika, izany no fitambaran'ny bytes nosoratana tamin'ny haino aman-jery. Mifanaraka mivantana amin'ny isan'ny antso write (ary fdatasync). Ho an'ny manokana bs isan'ny antso fdatasync dia size / bs.

Koa satria liana tamin'ny isan-jato izahay, dia tianay ho lehibe ny isan'ny santionany mba ho manan-danja ara-statistika. Ary nanapa-kevitra izany 10^4 (izay mifanitsy amin'ny haben'ny 22 MB) dia ampy. Sanda masontsivana kely kokoa --size nanome tabataba mafy kokoa (ohatra, antso fdatasync, izay maharitra ela kokoa noho ny mahazatra ary misy fiantraikany amin'ny faha-99 isan-jato).

Miankina aminao

Ny lahatsoratra dia mampiseho ny fomba fampiasana fio afaka mitsara raha ny haino aman-jery natao hampiasaina amin'ny etcd dia haingana. Anjaranao izao! Azonao atao ny mikaroka milina virtoaly miaraka amin'ny fitahirizana SSD amin'ny serivisy IBM Cloud.

PS avy amin'ny mpandika teny

Miaraka amin'ny tranga fampiasa efa vonona fio Ho an'ny asa hafa dia jereo tahirin-kevitra na mivantana amin'ny repository tetikasa (Misy maro kokoa noho ny voalaza ao amin'ny antontan-taratasy).

PPS avy amin'ny mpandika teny

Vakio ihany koa ao amin'ny bilaoginay:

Source: www.habr.com

Add a comment