ለ etcd በቂ አፈፃፀም ለማግኘት ዲስኮችን በ fio እንዴት ማረጋገጥ እንደሚቻል

ማስታወሻ. ትርጉምይህ መጣጥፍ በ IBM ክላውድ ኢንጂነሮች ከ etcd ዳታቤዝ አሠራር ጋር በተገናኘ ለትክክለኛ ችግር መፍትሄ ፍለጋ ባደረገው አነስተኛ ጥናት ውጤት ነው። ተመሳሳይ ተግባር ለእኛ ጠቃሚ ነበር፣ ሆኖም፣ የጸሐፊዎቹ የማሰላሰል ሂደት እና ተግባር ሰፋ ባለው አውድ ውስጥ አስደሳች ሊሆን ይችላል።

ለ etcd በቂ አፈፃፀም ለማግኘት ዲስኮችን በ fio እንዴት ማረጋገጥ እንደሚቻል

የጠቅላላው መጣጥፍ አጭር ማጠቃለያ፡ fio እና etcd

የ etcd ክላስተር አፈጻጸም በከፍተኛ ደረጃ በታችኛው ማከማቻ ፍጥነት ላይ የተመሰረተ ነው። ወዘተ አፈጻጸምን ለመከታተል የተለያዩ የፕሮሜቲየስ መለኪያዎችን ወደ ውጭ ይልካል። ከመካከላቸው አንዱ ነው። wal_fsync_duration_seconds. በሰነዱ ውስጥ ለ ወዘተ ይላልየዚህ ልኬት 99ኛ ፐርሰንታይል ከ10 ሚሴ ያልበለጠ ከሆነ ያ ማከማቻ በበቂ ፍጥነት ሊቆጠር ይችላል።

በሊኑክስ ማሽኖች ላይ ወዘተd ክላስተር ለማቋቋም እያሰቡ ከሆነ እና ድራይቮች (እንደ ኤስኤስዲዎች ያሉ) በበቂ ሁኔታ ፈጣን መሆናቸውን ለመፈተሽ ከፈለጉ ታዋቂውን የI/O ሞካሪ እንዲጠቀሙ እንመክራለን። fio. የሚከተለውን ትዕዛዝ ማስኬድ በቂ ነው (ማውጫ test-data በተሞከረው ድራይቭ በተሰቀለው ክፍል ውስጥ መቀመጥ አለበት)

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

ውጤቱን ለማየት እና 99 ኛ ፐርሰንታይል የሚስማማ መሆኑን ለማረጋገጥ ብቻ ይቀራል fdatasync በ 10 ms. ከሆነ፣ የእርስዎ ድራይቭ በበቂ ፍጥነት እየሰራ ነው። ምሳሌ ውጽኢት ይኸውን፡

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]

ጥቂት ማስታወሻዎች፡-

  1. ከላይ ባለው ምሳሌ, መለኪያዎችን አስተካክለናል --size и --bs ለአንድ የተወሰነ ጉዳይ. ከ ትርጉም ያለው ውጤት ለማግኘት fioለአጠቃቀም ጉዳይዎ ተስማሚ የሆኑ እሴቶችን ይግለጹ። እነሱን እንዴት እንደሚመርጡ ከዚህ በታች ይብራራሉ.
  2. በሙከራ ጊዜ ብቻ fio የዲስክ ንዑስ ስርዓትን ይጭናል. በእውነተኛ ህይወት, ሌሎች ሂደቶች በዲስክ ላይ ይጽፋሉ (ከዚህ ጋር ከተያያዙት በተጨማሪ wal_fsync_duration_seconds). ይህ ተጨማሪ ጭነት ሊጨምር ይችላል wal_fsync_duration_seconds. በሌላ አነጋገር፣ 99ኛው ፐርሰንታይል ከመሞከር ጋር ከሆነ fio, በትንሹ ከ 10 ms ያነሰ, የማከማቻ አፈፃፀም በቂ ላይሆን የሚችልበት ጥሩ እድል አለ.
  3. ለሙከራው ስሪት ያስፈልግዎታል fio ከ 3.5 በታች አይደለም, ምክንያቱም የቆዩ ስሪቶች ውጤቱን አያጠቃልሉም fdatasync በመቶኛ መልክ።
  4. ከላይ ያለው መደምደሚያ ከአጠቃላይ መደምደሚያ ትንሽ የተወሰደ ብቻ ነው fio.

ስለ fio እና ወዘተ ተጨማሪ

ስለ ዋልስ ወዘተ ጥቂት ቃላት

በአጠቃላይ የውሂብ ጎታዎች ይጠቀማሉ ንቁ ምዝግብ ማስታወሻ (ወደ ፊት ምዝግብ ማስታወሻ ይፃፉ ፣ WAL)። ወዘተ.እንዲሁም ተጎድቷል. የWAL ውይይት ከዚህ ጽሑፍ ወሰን በላይ ነው፣ ነገር ግን ለኛ ዓላማዎች፣ ማወቅ ያለብዎት ነገር እያንዳንዱ ወዘተd ክላስተር አባል WALን በቋሚ ማከማቻ ውስጥ እንደሚያከማች ነው። etcd አንዳንድ የቁልፍ እሴት ማከማቻ ስራዎችን (እንደ ማሻሻያ ያሉ) ከመተግበሩ በፊት ለWAL ይጽፋል። አንድ መስቀለኛ መንገድ ከተሰናከለ እና በቅጽበተ-ፎቶዎች መካከል እንደገና ከተጀመረ፣ etcd በWAL ይዘት ላይ ተመስርተው ካለፈው ቅጽበታዊ ገጽ እይታ ጀምሮ ግብይቶችን መልሰው ማግኘት ይችላሉ።

ስለዚህ አንድ ደንበኛ በ KV ማከማቻው ላይ ቁልፍ በጨመረ ቁጥር ወይም ያለውን የቁልፉን ዋጋ ባዘመነ ቁጥር ወዘተ.የኦፕሬሽኑን መግለጫ ወደ ዋል(WAL) ይጨምረዋል ይህም በቋሚ ማከማቻ ውስጥ ያለ መደበኛ ፋይል ነው። etcd ከመቀጠልዎ በፊት የWAL ግቤት በትክክል እንደተቀመጠ 100% እርግጠኛ መሆን አለበት። ይህንን በሊኑክስ ላይ ለማግኘት የስርዓት ጥሪውን መጠቀም በቂ አይደለም write, ወደ አካላዊ ሚዲያ የመጻፍ ክዋኔው ራሱ ሊዘገይ ስለሚችል. ለምሳሌ፣ ሊኑክስ የWAL ግቤት በውስጠ-ማህደረ ትውስታ ከርነል መሸጎጫ (ለምሳሌ በገጽ መሸጎጫ ውስጥ) ለተወሰነ ጊዜ ያቆይ ይሆናል። ውሂቡ ወደ ሚዲያ መጻፉን ለማረጋገጥ፣ ከተፃፈ በኋላ የስርዓት ጥሪ መጠራት አለበት። fdatasync - በትክክል etcd የሚያደርገው ይህ ነው (በሚከተለው ውፅዓት ላይ እንደሚታየው strace; እዚህ 8 - 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>

እንደ አለመታደል ሆኖ ወደ ቋሚ ማከማቻ መጻፍ የተወሰነ ጊዜ ይወስዳል። የfdatasync ጥሪዎችን ረዘም ላለ ጊዜ መፈጸም ወዘተd አፈጻጸም ላይ ተጽዕኖ ሊያሳድር ይችላል። በማጠራቀሚያ ሰነዶች ውስጥ አመልክቷል, በቂ አፈጻጸም ለማግኘት የሁሉም ጥሪዎች ቆይታ 99 ኛ ፐርሰንታይል አስፈላጊ ነው fdatasync ወደ WAL ፋይል ሲጽፉ ከ10 ሚሴ በታች ነበር። ከማከማቻ ጋር የተያያዙ ሌሎች መለኪያዎች አሉ፣ ነገር ግን ይህ ጽሑፍ በዚያ ላይ ያተኩራል።

ከ fio ጋር ማከማቻ ዋጋ መስጠት

መገልገያውን በመጠቀም የተወሰነ ማከማቻ ከ etcd ጋር ለመጠቀም ተስማሚ መሆኑን መገምገም ይችላሉ። fio - ታዋቂ I/O ሞካሪ። የዲስክ I / O በተለያየ መንገድ ሊከሰት እንደሚችል አስታውስ: ማመሳሰል / ማመሳሰል, ብዙ የተለያዩ የሲስካል ክፍሎች, ወዘተ. የሳንቲሙ ሌላኛው ወገን ያ ነው። fio ለመጠቀም በጣም አስቸጋሪ. መገልገያው ብዙ መመዘኛዎች አሉት, እና የእሴቶቻቸው የተለያዩ ውህዶች ወደ ሙሉ ለሙሉ የተለያዩ ውጤቶች ይመራሉ. ለ etcd ምክንያታዊ ግምት ለማግኘት፣ በ fio የሚመነጨው የመፃፍ ጭነት በተቻለ መጠን ለ etcd WAL ፋይል የመፃፍ ጭነት በተቻለ መጠን ቅርብ መሆኑን ማረጋገጥ አለብዎት።

  • ይህ ማለት የተፈጠረ ማለት ነው fio ጭነቱ ቢያንስ በፋይሉ ላይ ተከታታይ ጽሁፎች መሆን አለበት, እያንዳንዱ ጽሁፍ የስርዓት ጥሪን ያካትታል. writeተከትሎ fdatasync.
  • ተከታታይ ጽሑፍን ለማንቃት ባንዲራውን መጥቀስ አለብዎት --rw=write.
  • fio ጥሪዎችን በመጠቀም ጽፏል write (ከሌሎች የስርዓት ጥሪዎች ይልቅ - ለምሳሌ ፣ pwrite), ባንዲራውን ይጠቀሙ --ioengine=sync.
  • በመጨረሻም ባንዲራ --fdatasync=1 እያንዳንዱን ያረጋግጣል write ይገባል fdatasync.
  • በእኛ ምሳሌ ውስጥ ያሉት ሌሎች ሁለት መለኪያዎች የሚከተሉት ናቸው- --size и --bs - እንደ ልዩ የአጠቃቀም ሁኔታ ሊለያይ ይችላል. የሚቀጥለው ክፍል አወቃቀራቸውን ይገልፃል።

ለምን fioን እንደመረጥን እና እንዴት ማዋቀር እንዳለብን እንደተማርን

ይህ ማስታወሻ የመጣው ካጋጠመን እውነተኛ ጉዳይ ነው። በPrometheus ላይ ክትትል በማድረግ በ Kubernetes v1.13 ላይ ዘለላ ነበረን። ኤስኤስዲዎች ለ etcd v3.2.24 እንደ ማከማቻ ያገለግሉ ነበር። ወዘተ መለኪያዎች በጣም ከፍተኛ መዘግየት አሳይተዋል። fdatasyncክላስተር ስራ ፈት እያለም ቢሆን። ለእኛ፣ እነዚህ መለኪያዎች በጣም አጠራጣሪ ይመስሉን ነበር፣ እና በትክክል ምን እንደሚወክሉ እርግጠኛ አልነበርንም። በተጨማሪም ክላስተር ቨርቹዋል ማሽኖችን ያቀፈ በመሆኑ መዘግየቱ በቨርቹዋል ወይም በኤስኤስዲ ተጠያቂ ነው ለማለት አልተቻለም።

በተጨማሪም፣ በሃርድዌር እና በሶፍትዌር ውቅር ላይ የተለያዩ ለውጦችን ተመልክተናል፣ ስለዚህ እነሱን የምንገመግምበት መንገድ እንፈልጋለን። እርግጥ ነው፣ በእያንዳንዱ ውቅረት ውስጥ etcd ን ማስኬድ እና ተጓዳኝ የፕሮሜቲየስ መለኪያዎችን መመልከት ይቻል ይሆናል፣ ነገር ግን ይህ ከፍተኛ ጥረት ይጠይቃል። የሚያስፈልገን አንድ የተወሰነ ውቅር ለመገምገም ቀላል መንገድ ነበር. ከ etcd የሚመጡትን የፕሮሜቲየስ መለኪያዎችን ግንዛቤያችንን ለመፈተሽ እንፈልጋለን።

ይህ ሁለት ችግሮችን መፍታት ያስፈልገዋል.

  • በመጀመሪያ፣ ወደ WAL ፋይሎች ሲጽፉ በ etcd የሚፈጠረው የI/O ጭነት ምን ይመስላል? ምን ዓይነት የስርዓት ጥሪዎች ጥቅም ላይ ይውላሉ? የመዝገብ ብሎኮች መጠን ምን ያህል ነው?
  • በሁለተኛ ደረጃ፣ ከላይ ለቀረቡት ጥያቄዎች መልስ አለን እንበል። ተጓዳኝ ጭነትን እንዴት ማባዛት እንደሚቻል fio? ከሁሉም በኋላ fio - እጅግ በጣም ተለዋዋጭ መገልገያ ከብዙ ልኬቶች ጋር (ይህን ለማረጋገጥ ቀላል ነው, ለምሳሌ, እዚህ - በግምት. መተርጎም).

ሁለቱንም ችግሮች በተመሳሳዩ ትዕዛዝ ላይ በተመሰረተ አካሄድ ፈትተናል lsof и strace:

  • በ እገዛ lsof በሂደቱ ጥቅም ላይ የዋሉትን ሁሉንም የፋይል ገላጭዎች እና የሚጠቅሷቸውን ፋይሎች ማየት ይችላሉ.
  • በ እገዛ strace ቀድሞውንም እየሄደ ያለውን ሂደት መተንተን ወይም ሂደትን ማሄድ እና መመልከት ትችላለህ። ትዕዛዙ በዚህ ሂደት የተደረጉ ሁሉንም የስርዓት ጥሪዎች እና አስፈላጊ ከሆነም ዘሮቹን ያሳያል። የኋለኛው ሹካ ለሆኑ ሂደቶች አስፈላጊ ነው ፣ እና ወዘተ አንዱ እንደዚህ ዓይነት ሂደት ነው።

የመጀመሪያው ነገር መጠቀም ነበር strace ስራ ፈት እያለ በ Kubernetes ክላስተር ውስጥ ያለውን ወዘተd አገልጋይ ለመመርመር።

ስለዚህ የWAL ሪከርድ ብሎኮች በጣም ጥቅጥቅ ያሉ በቡድን የተከፋፈሉ ሲሆኑ የብዙዎቹ መጠን በ2200-2400 ባይት ክልል ውስጥ ነበር። ለዚህ ነው በዚህ ጽሑፍ መጀመሪያ ላይ ያለው ትዕዛዝ ባንዲራውን ይጠቀማል --bs=2300 (bs በእያንዳንዱ የጽሑፍ ብሎክ ውስጥ በባይት መጠን ነው። fio).

እባክዎን የ etcd መጻፊያ ብሎኮች መጠን እንደ ስሪቱ፣ ማውጣቱ፣ የመለኪያ እሴቶች፣ ወዘተ ሊለያይ እንደሚችል ልብ ይበሉ። - የቆይታ ጊዜውን ይነካል fdatasync. ተመሳሳይ የአጠቃቀም ጉዳይ ካለዎት ይተንትኑት። strace ወቅታዊ እሴቶችን ለማግኘት የእርስዎን etcd ሂደቶች።

ከዚያ ፣ ወዘተ ከፋይል ስርዓቱ ጋር እንዴት እንደሚሰራ ግልፅ እና አጠቃላይ ሀሳብ ለማግኘት ፣ ከስር ጀምረናል ። strace ከባንዲራዎች ጋር -ffttT. ይህም የልጅ ሂደቶችን ለመያዝ እና የእያንዳንዳቸውን ውጤት ወደ የተለየ ፋይል ለመጻፍ አስችሏል. በተጨማሪም, ስለ እያንዳንዱ የስርዓት ጥሪ የመጀመሪያ ጊዜ እና ቆይታ ዝርዝር መረጃ ተገኝቷል.

ትዕዛዙንም ተጠቀምን። lsofየውጤቱን ግንዛቤ ለማረጋገጥ strace በየትኛው የፋይል ገላጭ ለየትኛው ዓላማ ጥቅም ላይ እንደዋለ. መደምደሚያውን አገኘሁ strace፣ ከላይ ካለው ጋር ተመሳሳይ። ከተመሳሰለ ጊዜ ጋር የስታቲስቲክስ ማጭበርበሮች ልኬቱን አረጋግጠዋል wal_fsync_duration_seconds ከ etcd ተዛማጅ ጥሪዎች fdatasync ከ WAL ፋይል ገላጭዎች ጋር።

ጋር ለማመንጨት fio ከ etcd ጋር ተመሳሳይ የሆነ የሥራ ጫና, የመገልገያውን ሰነዶች በማጥናት ለሥራችን ተስማሚ የሆኑ መለኪያዎች ተመርጠዋል. ትክክለኛዎቹ የስርዓት ጥሪዎች በሂደት ላይ መሆናቸውን አረጋግጠናል እና በመሮጥ የቆይታ ጊዜያቸውን አረጋግጠናል። fiostrace (በወዘተ ጉዳይ ላይ እንደተደረገው).

የመለኪያውን ዋጋ ለመወሰን ልዩ ትኩረት ተሰጥቷል --size. በፋይኦ መገልገያ የተፈጠረውን አጠቃላይ የI/O ጭነት ይወክላል። በእኛ ሁኔታ ይህ ለመገናኛ ብዙኃን የተፃፈው አጠቃላይ ባይት ነው። እሱ በቀጥታ ከጥሪዎች ብዛት ጋር ተመጣጣኝ ነው። write (እና) fdatasync). ለተወሰነ bs የጥሪ ቁጥር fdatasync እኩል size / bs.

ስለ ፐርሰንታይሉ ፍላጎት ስለነበርን የናሙናዎች ብዛት በስታቲስቲካዊ ጠቀሜታ ትልቅ እንዲሆን እንፈልጋለን። እና ያንን ወሰነ 10^4 (ከ 22 ሜባ መጠን ጋር የሚዛመድ) በቂ ይሆናል. አነስ ያሉ መለኪያዎች --size ይበልጥ ግልጽ የሆነ ድምጽ ሰጥቷል (ለምሳሌ ጥሪዎች fdatasync, ከተለመደው በጣም ብዙ ጊዜ የሚወስድ እና 99 ኛ ፐርሰንታይል ላይ ተጽዕኖ ያሳድራል).

እንደፈለግክ

ጽሑፉ እንዴት መጠቀም እንደሚቻል ያሳያል fio በ etcd ለመጠቀም የታቀዱ ሚዲያዎች ፈጣን መሆናቸውን አንድ ሰው ሊፈርድ ይችላል። አሁን የአንተ ጉዳይ ነው! በአገልግሎቱ ውስጥ በኤስኤስዲ ላይ የተመሰረተ ማከማቻ በመጠቀም ምናባዊ ማሽኖችን ማሰስ ይችላሉ። IBM Cloud.

PS ከተርጓሚ

ዝግጁ ከሆኑ የአጠቃቀም መያዣዎች ጋር fio ለሌሎች ተግባራት, ይመልከቱ ሰነድ ወይም በቀጥታ ወደ የፕሮጀክት ማከማቻዎች (በሰነዱ ውስጥ ከተጠቀሱት ውስጥ ብዙዎቹ አሉ).

PPS ከተርጓሚ

በብሎጋችን ላይ ያንብቡ፡-

ምንጭ: hab.com

አስተያየት ያክሉ