Iyara ipamọ dara fun etcd? Jẹ ká beere fio

Iyara ipamọ dara fun etcd? Jẹ ká beere fio

A kukuru itan nipa fio ati be be lo

iṣẹ iṣupọ abbl ibebe da lori awọn iṣẹ ti awọn oniwe-ipamọ. etcd okeere diẹ ninu awọn metiriki si Ipolowolati pese alaye iṣẹ ipamọ ti o fẹ. Fun apẹẹrẹ, metric wal_fsync_duration_seconds. Awọn iwe fun etcd wí pé: Fun ibi ipamọ lati gbero ni iyara to, ipin ogorun 99th ti metiriki yii gbọdọ jẹ kere ju 10ms. Ti o ba n gbero lati ṣiṣẹ iṣupọ etcd lori awọn ẹrọ Linux ati pe o fẹ lati ṣe iṣiro boya ibi ipamọ rẹ ba yara to (fun apẹẹrẹ SSD), o le lo. fio jẹ irinṣẹ olokiki fun idanwo awọn iṣẹ I/O. Ṣiṣe aṣẹ atẹle naa, nibiti data-idanwo jẹ itọsọna labẹ aaye oke ibi ipamọ:

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

O kan nilo lati wo awọn abajade ati ṣayẹwo pe 99th ogorun ti iye akoko naa fdatasync kere ju 10 ms. Ti o ba jẹ bẹ, o ni ibi ipamọ iyara to ni idi. Eyi ni apẹẹrẹ ti awọn abajade:

  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]

Awọn akọsilẹ

  • A ti ṣe adani awọn aṣayan --iwọn ati --bs fun oju iṣẹlẹ wa pato. Lati gba abajade to wulo lati fio, pese awọn iye tirẹ. Nibo ni lati gba wọn? Ka bawo ni a ṣe kọ lati tunto fio.
  • Lakoko idanwo, gbogbo ẹru I/O wa lati fio. Ni oju iṣẹlẹ gidi kan, o ṣee ṣe awọn ibeere kikọ miiran yoo wa sinu ibi ipamọ yatọ si awọn ti o ni ibatan si wal_fsync_duration_seconds. Awọn afikun fifuye yoo mu iye ti wal_fsync_duration_seconds. Nitorinaa ti ipin ogorun 99th ba sunmọ 10ms, ibi ipamọ rẹ nṣiṣẹ ni iyara.
  • Gba ẹya naa fio ko kere ju 3.5 (awọn iṣaaju ko ṣe afihan awọn ipin ogorun iye akoko fdatasync).
  • Loke jẹ snippet ti awọn abajade lati fio.

Itan gigun nipa fio ati bẹbẹ lọ

Kini WAL ni etcd

Nigbagbogbo awọn apoti isura infomesonu lo kọ-iwaju log; etcd lo tun. A kii yoo jiroro lori akọọlẹ kikọ-iwaju (WAL) ni awọn alaye nibi. O ti to fun wa lati mọ pe ọmọ ẹgbẹ kọọkan ti iṣupọ etcd n ṣetọju rẹ ni ibi ipamọ itẹramọṣẹ. etcd kọ iṣẹ-ṣiṣe iye-bọtini kọọkan (bii imudojuiwọn) si WAL ṣaaju lilo si ile itaja. Ti ọkan ninu awọn ọmọ ẹgbẹ ibi ipamọ ba kọlu ati tun bẹrẹ laarin awọn aworan aworan, o le mu awọn iṣowo pada ni agbegbe lati fọto ti o kẹhin nipasẹ akoonu WAL.

Nigbati alabara ba ṣafikun bọtini kan si ile-itaja iye-bọtini tabi ṣe imudojuiwọn iye bọtini ti o wa tẹlẹ, etcd ṣe igbasilẹ iṣiṣẹ ni WAL, eyiti o jẹ faili deede ni ibi-itọju itẹramọṣẹ. etcd gbọdọ ni idaniloju patapata pe titẹsi WAL waye gangan ṣaaju ki o to tẹsiwaju pẹlu sisẹ. Lori Lainos, ipe eto kan ko to fun eyi. kọ, niwon kikọ gangan si ibi ipamọ ti ara le jẹ idaduro. Fun apẹẹrẹ, Lainos le tọju titẹ sii WAL sinu kaṣe ni iranti ekuro (gẹgẹbi kaṣe oju-iwe) fun igba diẹ. Ati pe ki data lati kọ ni deede si ibi ipamọ itẹramọṣẹ, ipe eto fdatasync nilo lẹhin kikọ, ati bẹbẹ lọ o kan lo (bi o ti le rii ninu abajade iṣẹ naa. okun, nibiti 8 jẹ apejuwe faili WAL):

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

Laanu, kikọ si ibi ipamọ ti o tẹpẹlẹ ko ṣẹlẹ lẹsẹkẹsẹ. Ti ipe fdatasync ba lọra, iṣẹ ti eto etcd yoo jiya. Awọn iwe fun etcd wí pépe ibi ipamọ naa ni a ka ni iyara to ti, ni ipin 99th, awọn ipe fdatasync gba kere ju 10ms lati kọ si faili WAL. Awọn metiriki iwulo miiran wa fun ibi ipamọ, ṣugbọn ninu ifiweranṣẹ yii a n sọrọ nipa metiriki yii nikan.

Iṣiro ipamọ pẹlu fio

Ti o ba nilo lati ṣe iṣiro boya ibi ipamọ rẹ ba dara fun etcd, lo fio, irinṣẹ idanwo fifuye I/O olokiki pupọ. O yẹ ki o ranti pe awọn iṣẹ disiki le yatọ pupọ: amuṣiṣẹpọ ati asynchronous, ọpọlọpọ awọn kilasi ti awọn ipe eto, bbl Bi abajade, fio jẹ ohun ti o nira lati lo. O ni ọpọlọpọ awọn ayeraye, ati awọn akojọpọ oriṣiriṣi ti awọn iye wọn ṣe agbejade awọn ẹru iṣẹ I / O ti o yatọ pupọ. Lati gba awọn isiro ti o pe fun etcd, o yẹ ki o rii daju pe fifuye kikọ idanwo lati fio wa nitosi bi o ti ṣee ṣe si fifuye gangan lati etcd nigba kikọ awọn faili WAL.

Nitorinaa, fio yẹ, ni o kere ju, ṣẹda ẹru kan ti lẹsẹsẹ awọn kikọ lesese si faili naa, kikọ kọọkan yoo ni ipe eto kan. kọatẹle nipa fdatasync ipe eto. Awọn kikọ leralera si fio nilo aṣayan --rw=write. Fun fio lati lo eto kikọ ipe nigba kikọ, kuku ju kọ, o yẹ ki o pato --ioengine=paramita amuṣiṣẹpọ. Ni ipari, lati le pe fdatasync lẹhin kikọ kọọkan, o nilo lati ṣafikun paramita --fdatasync=1. Awọn aṣayan meji miiran ninu apẹẹrẹ yii (-iwọn ati -bs) jẹ pato-kikọ. Ni apakan ti o tẹle, a yoo fihan ọ bi o ṣe le ṣeto wọn.

Kini idi ti fio ati bii a ṣe kọ lati ṣeto rẹ

Ninu ifiweranṣẹ yii, a ṣe apejuwe ọran gidi kan. A ni iṣupọ kan Kubernetes v1.13 eyiti a ṣe abojuto pẹlu Prometheus. etcd v3.2.24 ti gbalejo lori ohun SSD. Awọn metiriki ati bẹbẹ lọ ṣe afihan awọn lairi fdatasync ga ju, paapaa nigbati iṣupọ ko ṣe nkankan. Awọn metiriki naa jẹ ajeji ati pe a ko mọ ohun ti wọn tumọ si gaan. Iṣupọ naa ni awọn ẹrọ foju, o jẹ dandan lati ni oye kini iṣoro naa: ni awọn SSD ti ara tabi ni ipele agbara agbara. Ni afikun, a ṣe awọn ayipada nigbagbogbo si hardware ati iṣeto ni sọfitiwia, ati pe a nilo ọna lati ṣe iṣiro awọn abajade wọn. A le ṣiṣe etcd ni gbogbo iṣeto ni ki o wo awọn metiriki Prometheus, ṣugbọn iyẹn jẹ wahala pupọ. A n wa ọna ti o rọrun lati ṣe iṣiro iṣeto ni pato. A fẹ lati ṣayẹwo ti a ba loye awọn metiriki Prometheus lati etcd ni deede.

Ṣugbọn fun eyi, awọn iṣoro meji ni lati yanju. Ni akọkọ, kini fifuye I/O ti etcd ṣẹda nigbati kikọ si WAL dabi? Awọn ipe eto wo ni a lo? Kini iwọn awọn igbasilẹ naa? Ẹlẹẹkeji, ti a ba dahun awọn ibeere wọnyi, bawo ni a ṣe tun ṣe iru iṣẹ ṣiṣe kan pẹlu fio? Maṣe gbagbe pe fio jẹ ohun elo iyipada pupọ pẹlu awọn aṣayan pupọ. A yanju awọn iṣoro mejeeji pẹlu ọna kan - lilo awọn aṣẹ tun и okun. lsof ṣe atokọ gbogbo awọn apejuwe faili ti o lo nipasẹ ilana ati awọn faili to somọ. Ati pẹlu strace, o le ṣayẹwo ilana ti nṣiṣẹ tẹlẹ, tabi bẹrẹ ilana kan ki o ṣayẹwo rẹ. strace tẹjade gbogbo awọn ipe eto lati ilana ti a ṣe ayẹwo (ati awọn ilana ọmọ rẹ). Igbẹhin jẹ pataki pupọ, nitori etcd n kan mu iru ọna kan.

A kọkọ lo strace lati ṣawari olupin etcd fun Kubernetes nigbati ko si fifuye lori iṣupọ naa. A rii pe o fẹrẹ to gbogbo awọn igbasilẹ WAL jẹ iwọn kanna: 2200-2400 awọn baiti. Nitorinaa, ninu aṣẹ ni ibẹrẹ ifiweranṣẹ, a ṣalaye paramita -bs = 2300 (bs tumọ si iwọn ni awọn baiti fun titẹ sii fio kọọkan). Ṣe akiyesi pe iwọn titẹ sii etcd da lori ẹya etcd, pinpin, awọn iye paramita, ati bẹbẹ lọ, o si ni ipa lori iye akoko fdatasync. Ti o ba ni iru oju iṣẹlẹ kan, ṣayẹwo awọn ilana rẹ etcd pẹlu strace lati wa awọn nọmba gangan.

Lẹhinna, lati ni imọran ti o dara ti kini eto faili etcd n ṣe, a bẹrẹ pẹlu strace ati awọn aṣayan -ffttT. Nitorinaa a gbiyanju lati ṣayẹwo awọn ilana ọmọ ati ṣe igbasilẹ abajade ti ọkọọkan wọn ni faili lọtọ, ati tun gba awọn ijabọ alaye nipa ibẹrẹ ati iye akoko ipe eto kọọkan. A lo lsof lati jẹrisi itupalẹ wa ti iṣelọpọ strace ati rii iru apejuwe faili ti o nlo fun idi wo. Nitorinaa pẹlu iranlọwọ ti strace, awọn abajade ti o han loke ni a gba. Awọn iṣiro akoko amuṣiṣẹpọ jẹrisi pe wal_fsync_duration_seconds lati etcd ni ibamu pẹlu awọn ipe fdatasync pẹlu awọn olupejuwe faili WAL.

A lọ nipasẹ iwe-ipamọ fun fio ati yan awọn aṣayan fun iwe afọwọkọ wa ki fio yoo ṣe agbekalẹ ẹru kan ti o jọra si ati bẹbẹ lọ. A tun ṣayẹwo awọn ipe eto ati iye akoko wọn nipa ṣiṣe fio lati strace, iru si ati be be lo.

A ti farabalẹ yan iye ti paramita --iwọn lati ṣe aṣoju gbogbo ẹru I/O lati fio. Ninu ọran wa, eyi ni apapọ nọmba awọn baiti ti a kọ si ibi ipamọ naa. O wa ni ibamu taara si nọmba awọn ipe eto kikọ (ati fdatasync). Fun iye kan ti bs, nọmba awọn ipe fdatasync = iwọn/bs. Niwọn bi a ti nifẹ si ipin ogorun, a ni lati ni awọn ayẹwo to lati rii daju, ati pe a ṣe iṣiro pe 10^4 yoo to fun wa (iyẹn 22 mebibytes). Ti --iwọn ba kere, awọn ita le waye (fun apẹẹrẹ, ọpọlọpọ awọn ipe fdatasync gba to gun ju igbagbogbo lọ ati ni ipa lori ipin 99th).

Gbiyanju o funrararẹ

A fihan ọ bi o ṣe le lo fio ati rii boya ibi ipamọ naa yara to fun etcd lati ṣe daradara. Bayi o le gbiyanju fun ararẹ ni lilo, fun apẹẹrẹ, awọn ẹrọ foju pẹlu ibi ipamọ SSD ninu IBM awọsanma.

orisun: www.habr.com

Fi ọrọìwòye kun