ለ etcd ተስማሚ የማከማቻ ፍጥነት? ፍዮ እንጠይቅ

ለ etcd ተስማሚ የማከማቻ ፍጥነት? ፍዮ እንጠይቅ

ስለ fio እና ወዘተ አጭር ታሪክ

የክላስተር አፈጻጸም ወዘተ በአብዛኛው የተመካው በማከማቻው አፈጻጸም ላይ ነው. etcd አንዳንድ መለኪያዎችን ወደ ውጭ ይልካል። ፕሮሚትየስየተፈለገውን የማከማቻ አፈጻጸም መረጃ ለማቅረብ. ለምሳሌ፣ የwal_fsync_duration_ሴኮንዶች መለኪያ። የ etcd ሰነዱ እንዲህ ይላል።ማከማቻ፡ በበቂ ፍጥነት እንዲታሰብ የዚህ ልኬት 99ኛ ፐርሰንታይል ከ10 ሚሴ በታች መሆን አለበት። የ etcd ክላስተር በሊኑክስ ማሽኖች ላይ ለማሄድ እያሰቡ ከሆነ እና ማከማቻዎ በቂ ፍጥነት ያለው መሆኑን ለመገምገም ከፈለጉ (ለምሳሌ ኤስኤስዲ) መጠቀም ይችላሉ። fio I/O ስራዎችን ለመፈተሽ ታዋቂ መሳሪያ ነው። የሙከራ-ውሂብ በማጠራቀሚያ ነጥቡ ስር ያለው ማውጫ የሆነበት የሚከተለውን ትዕዛዝ ያሂዱ፡

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

ውጤቱን ብቻ ማየት እና የቆይታ ጊዜውን 99 ኛ ፐርሰንታይል ማረጋገጥ ያስፈልግዎታል fdatasync ከ 10 ሚሴ ያነሰ. ከሆነ፣ ምክንያታዊ ፈጣን ማከማቻ አለዎት። የውጤቶቹ ምሳሌ ይኸውና፡-

  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]

ማስታወሻዎች

  • ለኛ ልዩ ሁኔታ የ --መጠን እና --bs አማራጮችን አዘጋጅተናል። ከ fio ጠቃሚ ውጤት ለማግኘት የራስዎን እሴቶች ያቅርቡ። የት ማግኘት ይቻላል? አንብብ fio ን ማዋቀር እንዴት እንደተማርን.
  • በሙከራ ጊዜ ሁሉም የI/O ጭነት የሚመጣው ከ fio ነው። በእውነተኛ ህይወት ሁኔታ፣ ከwal_fsync_duration_ሰከንዶች በተጨማሪ ወደ ማከማቻው የሚመጡ ሌሎች የመፃፍ ጥያቄዎች ሊኖሩ ይችላሉ። ተጨማሪው ጭነት የwal_fsync_duration_ሴኮንዶች ዋጋ ይጨምራል። ስለዚህ 99ኛው ፐርሰንታይል ወደ 10ms የሚጠጋ ከሆነ ማከማቻዎ ፍጥነት እያለቀ ነው።
  • ስሪቱን ይውሰዱ fio ከ 3.5 በታች አይደለም (የቀደሙት የfdatasync ቆይታ መቶኛዎችን አያሳዩም)።
  • ከላይ የ fio ውጤቶች ቅንጭብጭብ ብቻ ነው።

ስለ fio እና ወዘተ ረጅም ታሪክ

ወዘተ ውስጥ WAL ምንድን ነው?

አብዛኛውን ጊዜ የውሂብ ጎታዎች ይጠቀማሉ ወደፊት መጻፍ መዝገብ; ወዘተ ይጠቀማል። የመጻፊያ መዝገብ (WAL) እዚህ ላይ በዝርዝር አንወያይም። እያንዳንዱ የ etcd ክላስተር አባል በቋሚ ማከማቻ ውስጥ እንደሚያቆየው ማወቁ በቂ ነው። etcd ወደ መደብሩ ከመተግበሩ በፊት እያንዳንዱን የቁልፍ እሴት ክወና (እንደ ማሻሻያ) ለ WAL ይጽፋል። ከማከማቻው አባላት አንዱ ከተሰናከለ እና በቅጽበተ-ፎቶዎች መካከል እንደገና ከጀመረ፣ ከመጨረሻው የWAL ይዘት ፎቶ ጀምሮ ግብይቶችን ወደነበረበት መመለስ ይችላል።

ደንበኛ በቁልፍ ዋጋ ማከማቻው ላይ ቁልፍ ሲጨምር ወይም የነባር ቁልፍን ዋጋ ሲያዘምን ወዘተ በWAL ውስጥ ያለውን ስራ ይመዘግባል፣ይህም ቋሚ ማከማቻ ውስጥ ያለ መደበኛ ፋይል ነው። etcd ሂደቱን ከመቀጠልዎ በፊት የWAL ግቤት በትክክል መከሰቱን ሙሉ በሙሉ እርግጠኛ መሆን አለበት። በሊኑክስ ላይ አንድ የስርዓት ጥሪ ለዚህ በቂ አይደለም። ጻፈወደ አካላዊ ማከማቻ ትክክለኛው ጽሁፍ ሊዘገይ ስለሚችል። ለምሳሌ፣ ሊኑክስ የWAL ግቤትን በመሸጎጫ ውስጥ በከርነል ማህደረ ትውስታ (ለምሳሌ የገጽ መሸጎጫ) ለተወሰነ ጊዜ ሊያከማች ይችላል። እና ውሂቡ ወደ ቋሚ ማከማቻ በትክክል እንዲፃፍ የfdatasync ስርዓት ጥሪ ከተፃፈ በኋላ ያስፈልጋል እና ወዘተ ይጠቀማል (በሥራው ውጤት ላይ እንደሚታየው) ክር8 የ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>

እንደ አለመታደል ሆኖ ወደ ቋሚ ማከማቻ መፃፍ ወዲያውኑ አይከሰትም። የfdatasync ጥሪ ቀርፋፋ ከሆነ የ etcd ስርዓቱ አፈጻጸም ይጎዳል። የ etcd ሰነዱ እንዲህ ይላል።በ99ኛው ፐርሰንታይል የfdatasync ጥሪዎች ወደ WAL ፋይል ለመፃፍ ከ10ሚሴ በታች የሚወስዱ ከሆነ ማከማቻው በበቂ ፈጣን እንደሆነ ይቆጠራል። ለማጠራቀሚያ ሌሎች ጠቃሚ መለኪያዎች አሉ, ነገር ግን በዚህ ልጥፍ ውስጥ የምንናገረው ስለዚህ መለኪያ ብቻ ነው.

ማከማቻን በ fio መገመት

ማከማቻዎ ለ etcd ተስማሚ መሆኑን መገምገም ከፈለጉ በጣም ታዋቂ የሆነውን የI/O ጭነት መሞከሪያ መሳሪያ ይጠቀሙ። የዲስክ አሠራሮች በጣም የተለያዩ ሊሆኑ እንደሚችሉ መታወስ አለበት-የተመሳሰለ እና የማይመሳሰል ፣ ብዙ የስርዓት ጥሪዎች ፣ ወዘተ. በውጤቱም ፣ fio ለመጠቀም በጣም ከባድ ነው። እሱ ብዙ መመዘኛዎች አሉት ፣ እና የእሴቶቻቸው የተለያዩ ጥምረት በጣም የተለያዩ የ I/O የስራ ጫናዎችን ይፈጥራሉ። ለ etcd የሚሆን በቂ አሃዞችን ለማግኘት የWAL ፋይሎችን በሚጽፉበት ጊዜ ከ fio የመፃፍ ጭነት በተቻለ መጠን ከ etcd ትክክለኛ ጭነት ጋር ቅርብ መሆኑን ማረጋገጥ አለብዎት።

ስለዚህ, fio ቢያንስ, በፋይሉ ላይ ተከታታይ ተከታታይ ጽሁፎችን መጫን አለበት, እያንዳንዱ ጽሁፍ የስርዓት ጥሪን ያካትታል. ጻፈበ fdatasync ስርዓት ጥሪ ተከትሎ. ተከታታይ ወደ fio የሚጽፍ --rw=write የሚለውን አማራጭ ይፈልጋል። ለ fio የመፃፍ ስርዓቱን ለመጠቀም ከመፃፍ ይልቅ ይደውሉ ጻፍ, --ioengine=sync ፓራሜትሩን መግለጽ አለብህ። በመጨረሻም፣ ከእያንዳንዱ ጽሁፍ በኋላ fdatasyncን ለመጥራት፣ --fdatasync=1 ፓራሜትር ማከል ያስፈልግዎታል። በዚህ ምሳሌ ውስጥ ያሉት ሌሎች ሁለት አማራጮች (--size እና -bs) ስክሪፕት-ተኮር ናቸው። በሚቀጥለው ክፍል እንዴት እነሱን ማዋቀር እንደሚችሉ እናሳይዎታለን።

ለምን fio እና እንዴት ማዋቀር እንዳለብን ተማርን።

በዚህ ጽሑፍ ውስጥ አንድ እውነተኛ ጉዳይ እንገልፃለን. ክላስተር አለን። ኩባንያቶች v1.13 ከፕሮሜቲየስ ጋር የተከታተልነው። etcd v3.2.24 የተስተናገደው በኤስኤስዲ ነው። Etcd ሜትሪክስ ክላስተር ምንም ነገር ባያደርግም fdatasync latencies በጣም ከፍተኛ መሆኑን አሳይቷል። መለኪያዎቹ እንግዳ ነበሩ እና ምን ለማለት እንደፈለጉ በትክክል አናውቅም። ክላስተር ቨርቹዋል ማሽኖችን ያቀፈ ነው፣ ችግሩ ምን እንደሆነ ለመረዳት በአካላዊ ኤስኤስዲዎች ወይም በምናባዊው ንብርብር ውስጥ። በተጨማሪም፣ በሃርድዌር እና በሶፍትዌር ውቅር ላይ ብዙ ጊዜ ለውጦችን እናደርጋለን፣ እና ውጤታቸውን የምንገመግምበት መንገድ እንፈልጋለን። በእያንዳንዱ ውቅረት ውስጥ etcd ን ማስኬድ እና የፕሮሜቲየስ መለኪያዎችን ማየት እንችላለን፣ ግን ያ በጣም ብዙ ጣጣ ነው። አንድ የተወሰነ ውቅር ለመገምገም በጣም ቀላል መንገድ እየፈለግን ነበር። የፕሮሜቲየስ መለኪያዎችን ከ etcd በትክክል መረዳታችንን ማረጋገጥ እንፈልጋለን።

ለዚህ ግን ሁለት ችግሮች መፈታት ነበረባቸው። በመጀመሪያ፣ ወደ WAL ሲጽፉ ወዘተ የሚፈጠረው የI/O ጭነት ምን ይመስላል? ምን ዓይነት የስርዓት ጥሪዎች ጥቅም ላይ ይውላሉ? የመዝገቦቹ መጠን ምን ያህል ነው? ሁለተኛ፣ ለእነዚህ ጥያቄዎች መልስ ከሰጠን፣ ተመሳሳይ የሥራ ጫናን በ fio እንዴት ማራባት እንችላለን? ፊዮ ብዙ አማራጮች ያሉት በጣም ተለዋዋጭ መሳሪያ መሆኑን አይርሱ። ሁለቱንም ችግሮች በአንድ አቀራረብ ፈትተናል - ትዕዛዞችን በመጠቀም lsof и ክር. lsof በሂደቱ ጥቅም ላይ የዋሉትን ሁሉንም የፋይል ገላጭ እና ተዛማጅ ፋይሎቻቸውን ይዘረዝራል። እና በ strace ፣ ቀድሞውኑ እየሄደ ያለውን ሂደት መመርመር ወይም ሂደቱን መጀመር እና መመርመር ይችላሉ። strace እየተመረመረ ካለው ሂደት (እና የልጁ ሂደቶች) ሁሉንም የስርዓት ጥሪዎች ያትማል። ወዘተ ተመሳሳይ አካሄድ እየወሰደ ስለሆነ የኋለኛው በጣም አስፈላጊ ነው።

ክላስተር ላይ ምንም ጭነት በሌለበት ጊዜ ለኩበርኔትስ የ etcd አገልጋይን ለማሰስ መጀመሪያ እንጠቀማለን። ከሞላ ጎደል ሁሉም የWAL መዛግብት ተመሳሳይ መጠን ያላቸው ሲሆኑ አይተናል፡ 2200–2400 ባይት። ስለዚህ, በፖስታው መጀመሪያ ላይ በትእዛዙ ውስጥ, ግቤት -bs=2300 (bs ማለት ለእያንዳንዱ የ fio ግቤት በባይት መጠን) ገለጽን. የ etcd ግቤት መጠን በ etcd እትም ፣ ስርጭት ፣ የመለኪያ እሴቶች ፣ ወዘተ ላይ የተመረኮዘ መሆኑን እና በfdatasync ቆይታ ላይ ተጽዕኖ እንደሚያሳድር ልብ ይበሉ። ተመሳሳይ ሁኔታ ካለዎት ትክክለኛውን ቁጥሮች ለማወቅ የእርስዎን etcd ሂደቶችን በ strace ይመርምሩ።

ከዚያ ፣ የ etcd ፋይል ስርዓቱ ምን እየሰራ እንደሆነ ጥሩ ሀሳብ ለማግኘት ፣ በ strace እና -ffttT አማራጮች ጀመርነው። ስለዚህ የልጁን ሂደቶች ለመመርመር እና የእያንዳንዳቸውን ውጤት በተለየ ፋይል ውስጥ ለመመዝገብ ሞክረናል, እንዲሁም ስለ እያንዳንዱ የስርዓት ጥሪ ጅምር እና ቆይታ ዝርዝር ዘገባዎችን ለማግኘት ሞክረናል. ስለ የስትራክ ውፅዓት ትንታኔያችንን ለማረጋገጥ እና የትኛው ፋይል ገላጭ ለየትኛው ዓላማ ጥቅም ላይ እንደሚውል ለማየት lsofን ተጠቀምን። ስለዚህ በስትሮክ እርዳታ ከላይ የሚታዩት ውጤቶች ተገኝተዋል. የማመሳሰል ጊዜ ስታቲስቲክስ የዋል_fsync_duration_ሰከንዶች ከ etcd ከ fdatasync ጥሪዎች ከWAL ፋይል ገላጭዎች ጋር የሚስማማ መሆኑን አረጋግጧል።

ለ fio ሰነዶችን አልፈን ለስክሪፕታችን አማራጮችን መረጥን ስለዚህም fio ከ etcd ጋር የሚመሳሰል ሸክም እንዲያመነጭ። እንዲሁም የስርዓት ጥሪዎችን እና የቆይታ ጊዜያቸውን ልክ እንደ ‹fio from strace› በማሄድ አረጋግጠናል።

ሙሉውን የI/O ጭነት ከ fio ለመወከል የ --size መለኪያውን ዋጋ በጥንቃቄ መርጠናል:: በእኛ ሁኔታ ይህ ወደ ማከማቻው የተፃፈው አጠቃላይ ባይት ነው። ከጽሑፍ (እና fdatasync) የስርዓት ጥሪዎች ጋር በቀጥታ ተመጣጣኝ ሆኖ ተገኝቷል። ለተወሰነ የ bs እሴት፣ የfdatasync ጥሪዎች ቁጥር = መጠን/bs። ስለ ፐርሰንታይሉ ፍላጎት ስለነበረን እርግጠኛ ለመሆን በቂ ናሙናዎች ሊኖረን ይገባል እና 10^4 ይበቃናል (ይህ 22 ሜቢባይት ነው) አስልተናል። --መጠን ያነሰ ከሆነ፣ ውጫዊ ነገሮች ሊከሰቱ ይችላሉ (ለምሳሌ፣ በርካታ የfdatasync ጥሪዎች ከወትሮው የበለጠ ጊዜ ይወስዳሉ እና በ99ኛ ፐርሰንታይል ላይ ተጽዕኖ ያሳድራሉ)።

እራስዎ ይሞክሩት።

እንዴት fioን መጠቀም እንደምትችል አሳይተናታል እና ማከማቻው ለ etcd ጥሩ ስራ ለመስራት ፈጣን መሆኑን ለማየት። አሁን ለምሳሌ የኤስኤስዲ ማከማቻ ያላቸው ምናባዊ ማሽኖችን በመጠቀም ለራስዎ መሞከር ይችላሉ። IBM Cloud.

ምንጭ: hab.com

አስተያየት ያክሉ