ማስታወሻ. ትርጉምይህ መጣጥፍ በ IBM ክላውድ ኢንጂነሮች ከ etcd ዳታቤዝ አሠራር ጋር በተገናኘ ለትክክለኛ ችግር መፍትሄ ፍለጋ ባደረገው አነስተኛ ጥናት ውጤት ነው። ተመሳሳይ ተግባር ለእኛ ጠቃሚ ነበር፣ ሆኖም፣ የጸሐፊዎቹ የማሰላሰል ሂደት እና ተግባር ሰፋ ባለው አውድ ውስጥ አስደሳች ሊሆን ይችላል።
የጠቅላላው መጣጥፍ አጭር ማጠቃለያ፡ fio እና etcd
የ etcd ክላስተር አፈጻጸም በከፍተኛ ደረጃ በታችኛው ማከማቻ ፍጥነት ላይ የተመሰረተ ነው። ወዘተ አፈጻጸምን ለመከታተል የተለያዩ የፕሮሜቲየስ መለኪያዎችን ወደ ውጭ ይልካል። ከመካከላቸው አንዱ ነው። wal_fsync_duration_seconds
. በሰነዱ ውስጥ ለ ወዘተ
በሊኑክስ ማሽኖች ላይ ወዘተd ክላስተር ለማቋቋም እያሰቡ ከሆነ እና ድራይቮች (እንደ ኤስኤስዲዎች ያሉ) በበቂ ሁኔታ ፈጣን መሆናቸውን ለመፈተሽ ከፈለጉ ታዋቂውን የI/O ሞካሪ እንዲጠቀሙ እንመክራለን። test-data
በተሞከረው ድራይቭ በተሰቀለው ክፍል ውስጥ መቀመጥ አለበት)
fio --rw=write --ioengine=sync --fdatasync=1 --directory=test-data --size=22m --bs=2300 --name=mytest
ውጤቱን ለማየት እና 99 ኛ ፐርሰንታይል የሚስማማ መሆኑን ለማረጋገጥ ብቻ ይቀራል fdatasync
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]
ጥቂት ማስታወሻዎች፡-
- ከላይ ባለው ምሳሌ, መለኪያዎችን አስተካክለናል
--size
и--bs
ለአንድ የተወሰነ ጉዳይ. ከ ትርጉም ያለው ውጤት ለማግኘትfio
ለአጠቃቀም ጉዳይዎ ተስማሚ የሆኑ እሴቶችን ይግለጹ። እነሱን እንዴት እንደሚመርጡ ከዚህ በታች ይብራራሉ. - በሙከራ ጊዜ ብቻ
fio
የዲስክ ንዑስ ስርዓትን ይጭናል. በእውነተኛ ህይወት, ሌሎች ሂደቶች በዲስክ ላይ ይጽፋሉ (ከዚህ ጋር ከተያያዙት በተጨማሪwal_fsync_duration_seconds
). ይህ ተጨማሪ ጭነት ሊጨምር ይችላልwal_fsync_duration_seconds
. በሌላ አነጋገር፣ 99ኛው ፐርሰንታይል ከመሞከር ጋር ከሆነfio
, በትንሹ ከ 10 ms ያነሰ, የማከማቻ አፈፃፀም በቂ ላይሆን የሚችልበት ጥሩ እድል አለ. - ለሙከራው ስሪት ያስፈልግዎታል
fio
ከ 3.5 በታች አይደለም, ምክንያቱም የቆዩ ስሪቶች ውጤቱን አያጠቃልሉምfdatasync
በመቶኛ መልክ። - ከላይ ያለው መደምደሚያ ከአጠቃላይ መደምደሚያ ትንሽ የተወሰደ ብቻ ነው
fio
.
ስለ fio እና ወዘተ ተጨማሪ
ስለ ዋልስ ወዘተ ጥቂት ቃላት
በአጠቃላይ የውሂብ ጎታዎች ይጠቀማሉ
ስለዚህ አንድ ደንበኛ በ KV ማከማቻው ላይ ቁልፍ በጨመረ ቁጥር ወይም ያለውን የቁልፉን ዋጋ ባዘመነ ቁጥር ወዘተ.የኦፕሬሽኑን መግለጫ ወደ ዋል(WAL) ይጨምረዋል ይህም በቋሚ ማከማቻ ውስጥ ያለ መደበኛ ፋይል ነው። etcd ከመቀጠልዎ በፊት የWAL ግቤት በትክክል እንደተቀመጠ 100% እርግጠኛ መሆን አለበት። ይህንን በሊኑክስ ላይ ለማግኘት የስርዓት ጥሪውን መጠቀም በቂ አይደለም write
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 አፈጻጸም ላይ ተጽዕኖ ሊያሳድር ይችላል። በማጠራቀሚያ ሰነዶች ውስጥ fdatasync
ወደ WAL ፋይል ሲጽፉ ከ10 ሚሴ በታች ነበር። ከማከማቻ ጋር የተያያዙ ሌሎች መለኪያዎች አሉ፣ ነገር ግን ይህ ጽሑፍ በዚያ ላይ ያተኩራል።
ከ fio ጋር ማከማቻ ዋጋ መስጠት
መገልገያውን በመጠቀም የተወሰነ ማከማቻ ከ etcd ጋር ለመጠቀም ተስማሚ መሆኑን መገምገም ይችላሉ። 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 ጋር ተመሳሳይ የሆነ የሥራ ጫና, የመገልገያውን ሰነዶች በማጥናት ለሥራችን ተስማሚ የሆኑ መለኪያዎች ተመርጠዋል. ትክክለኛዎቹ የስርዓት ጥሪዎች በሂደት ላይ መሆናቸውን አረጋግጠናል እና በመሮጥ የቆይታ ጊዜያቸውን አረጋግጠናል። fio
ከ strace
(በወዘተ ጉዳይ ላይ እንደተደረገው).
የመለኪያውን ዋጋ ለመወሰን ልዩ ትኩረት ተሰጥቷል --size
. በፋይኦ መገልገያ የተፈጠረውን አጠቃላይ የI/O ጭነት ይወክላል። በእኛ ሁኔታ ይህ ለመገናኛ ብዙኃን የተፃፈው አጠቃላይ ባይት ነው። እሱ በቀጥታ ከጥሪዎች ብዛት ጋር ተመጣጣኝ ነው። write
(እና) fdatasync
). ለተወሰነ bs
የጥሪ ቁጥር fdatasync
እኩል size / bs
.
ስለ ፐርሰንታይሉ ፍላጎት ስለነበርን የናሙናዎች ብዛት በስታቲስቲካዊ ጠቀሜታ ትልቅ እንዲሆን እንፈልጋለን። እና ያንን ወሰነ 10^4
(ከ 22 ሜባ መጠን ጋር የሚዛመድ) በቂ ይሆናል. አነስ ያሉ መለኪያዎች --size
ይበልጥ ግልጽ የሆነ ድምጽ ሰጥቷል (ለምሳሌ ጥሪዎች fdatasync
, ከተለመደው በጣም ብዙ ጊዜ የሚወስድ እና 99 ኛ ፐርሰንታይል ላይ ተጽዕኖ ያሳድራል).
እንደፈለግክ
ጽሑፉ እንዴት መጠቀም እንደሚቻል ያሳያል fio
በ etcd ለመጠቀም የታቀዱ ሚዲያዎች ፈጣን መሆናቸውን አንድ ሰው ሊፈርድ ይችላል። አሁን የአንተ ጉዳይ ነው! በአገልግሎቱ ውስጥ በኤስኤስዲ ላይ የተመሰረተ ማከማቻ በመጠቀም ምናባዊ ማሽኖችን ማሰስ ይችላሉ።
PS ከተርጓሚ
ዝግጁ ከሆኑ የአጠቃቀም መያዣዎች ጋር fio
ለሌሎች ተግባራት, ይመልከቱ
PPS ከተርጓሚ
በብሎጋችን ላይ ያንብቡ፡-
- «
ወዘተ 3.4.3: የማከማቻ አስተማማኝነት እና የደህንነት ጥናት "; - «
በ etcd Kubernetes ክላስተር ውስጥ ያለን መረጃ በቀጥታ (ያለ K8s API) "; - «
በ Kubernetes አሠራር ውስጥ 6 አዝናኝ የስርዓት ስህተቶች [እና መፍትሄዎቻቸው] ».
ምንጭ: hab.com