etcd కోసం తగినంత పనితీరు కోసం fioతో డిస్క్‌లను ఎలా తనిఖీ చేయాలి

గమనిక. అనువాదం.: ఈ కథనం etcd డేటాబేస్ యొక్క ఆపరేషన్‌కు సంబంధించిన నిజమైన సమస్యకు పరిష్కారం కోసం IBM క్లౌడ్ ఇంజనీర్లచే నిర్వహించబడిన చిన్న-పరిశోధన యొక్క ఫలితం. ఇదే విధమైన పని మాకు సంబంధించినది, అయినప్పటికీ, రచయితల ప్రతిబింబాలు మరియు చర్యల కోర్సు విస్తృత సందర్భంలో ఆసక్తికరంగా ఉండవచ్చు.

etcd కోసం తగినంత పనితీరు కోసం fioతో డిస్క్‌లను ఎలా తనిఖీ చేయాలి

మొత్తం వ్యాసం యొక్క సంక్షిప్త సారాంశం: fio మరియు etc

etcd క్లస్టర్ యొక్క పనితీరు అంతర్లీన నిల్వ వేగంపై ఎక్కువగా ఆధారపడి ఉంటుంది. etcd పనితీరును పర్యవేక్షించడానికి వివిధ ప్రోమేతియస్ కొలమానాలను ఎగుమతి చేస్తుంది. వాటిలో ఒకటి wal_fsync_duration_seconds. etcd కోసం డాక్యుమెంటేషన్‌లో ఇది చెప్పుతున్నదిఈ మెట్రిక్‌లోని 99వ శాతం 10 ఎంఎస్‌లకు మించకుంటే స్టోరేజ్ తగినంత వేగంగా పరిగణించబడుతుంది…

మీరు Linux మెషీన్‌లలో etcd క్లస్టర్‌ని సెటప్ చేయడం గురించి ఆలోచిస్తున్నట్లయితే మరియు డ్రైవ్‌లు (SSDలు వంటివి) తగినంత వేగంగా ఉన్నాయో లేదో పరీక్షించాలనుకుంటే, మేము ప్రసిద్ధి చెందిన I/O టెస్టర్‌ని ఉపయోగించమని సిఫార్సు చేస్తున్నాము మారడం. కింది ఆదేశాన్ని అమలు చేస్తే సరిపోతుంది (డైరెక్టరీ 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 మరియు etcd గురించి మరింత

WALs మొదలైన వాటి గురించి కొన్ని మాటలు

సాధారణంగా, డేటాబేస్లు ఉపయోగిస్తాయి ప్రోయాక్టివ్ లాగింగ్ (రైట్-ఎహెడ్ లాగింగ్, WAL). etcd కూడా ప్రభావితమవుతుంది. WAL యొక్క చర్చ ఈ కథనం యొక్క పరిధికి మించినది, కానీ మా ప్రయోజనాల కోసం, మీరు తెలుసుకోవలసినది ఏమిటంటే, ప్రతి etcd క్లస్టర్ సభ్యుడు WALని నిరంతర నిల్వలో నిల్వ చేస్తారు. etcd కొన్ని కీ-విలువ నిల్వ కార్యకలాపాలను (నవీకరణలు వంటివి) అమలు చేయడానికి ముందు WALకి వ్రాస్తుంది. స్నాప్‌షాట్‌ల మధ్య నోడ్ క్రాష్ అయి పునఃప్రారంభమైతే, WAL యొక్క కంటెంట్‌ల ఆధారంగా మునుపటి స్నాప్‌షాట్ నుండి లావాదేవీలను etcd పునరుద్ధరించగలదు.

అందువలన, ప్రతిసారీ క్లయింట్ KV స్టోర్‌కు కీని జోడించినప్పుడు లేదా ఇప్పటికే ఉన్న కీ యొక్క విలువను నవీకరించినప్పుడు, etcd ఆపరేషన్ యొక్క వివరణను WALకి జోడిస్తుంది, ఇది నిరంతర స్టోర్‌లో సాధారణ ఫైల్. etcd కొనసాగడానికి ముందు WAL ఎంట్రీ నిజానికి సేవ్ చేయబడిందని 100% ఖచ్చితంగా ఉండాలి. Linuxలో దీన్ని సాధించడానికి, సిస్టమ్ కాల్‌ని ఉపయోగించడం సరిపోదు write, భౌతిక మీడియాకు వ్రాసే ఆపరేషన్ ఆలస్యం కావచ్చు కాబట్టి. ఉదాహరణకు, Linux కొంత సమయం వరకు ఇన్-మెమరీ కెర్నల్ కాష్‌లో (ఉదా, పేజీ కాష్‌లో) 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 కాల్‌ల యొక్క సుదీర్ఘమైన అమలు etcd పనితీరును ప్రభావితం చేస్తుంది. రిపోజిటరీ డాక్యుమెంటేషన్‌లో సూచించబడింది, తగినంత పనితీరు కోసం అన్ని కాల్‌ల వ్యవధిలో 99వ శాతం అవసరం fdatasync WAL ఫైల్‌కి వ్రాసేటప్పుడు 10 ms కంటే తక్కువ. ఇతర నిల్వ-సంబంధిత కొలమానాలు ఉన్నాయి, కానీ ఈ కథనం దానిపై దృష్టి పెడుతుంది.

fioతో నిల్వ విలువను అంచనా వేస్తోంది

యుటిలిటీని ఉపయోగించి etcdతో ఉపయోగించడానికి నిర్దిష్ట నిల్వ అనుకూలంగా ఉందో లేదో మీరు అంచనా వేయవచ్చు మారడం — ప్రముఖ 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 - నిర్దిష్ట ఉపయోగ సందర్భాన్ని బట్టి మారవచ్చు. తదుపరి విభాగం వారి ఆకృతీకరణను వివరిస్తుంది.

మేము ఫియోను ఎందుకు ఎంచుకున్నాము మరియు దానిని ఎలా సెటప్ చేయాలో నేర్చుకున్నాము

ఈ గమనిక మేము ఎదుర్కొన్న నిజమైన కేసు నుండి వచ్చింది. మేము Prometheusపై పర్యవేక్షణతో Kubernetes v1.13లో క్లస్టర్‌ని కలిగి ఉన్నాము. etcd v3.2.24 కోసం SSDలు నిల్వగా ఉపయోగించబడ్డాయి. Etcd మెట్రిక్‌లు చాలా ఎక్కువ జాప్యాలను చూపించాయి fdatasync, క్లస్టర్ నిష్క్రియంగా ఉన్నప్పుడు కూడా. మాకు, ఈ కొలమానాలు చాలా సందేహాస్పదంగా అనిపించాయి మరియు అవి సరిగ్గా దేనిని సూచిస్తాయో మాకు తెలియదు. అదనంగా, క్లస్టర్ వర్చువల్ మిషన్‌లను కలిగి ఉంది, కాబట్టి ఆలస్యం వర్చువలైజేషన్ వల్ల జరిగిందా లేదా SSD కారణమా అని చెప్పడం సాధ్యం కాదు.

అదనంగా, మేము హార్డ్‌వేర్ మరియు సాఫ్ట్‌వేర్ కాన్ఫిగరేషన్‌లో వివిధ మార్పులను పరిగణించాము, కాబట్టి వాటిని మూల్యాంకనం చేయడానికి మాకు ఒక మార్గం అవసరం. వాస్తవానికి, ప్రతి కాన్ఫిగరేషన్‌లో etcdని అమలు చేయడం మరియు సంబంధిత ప్రోమేతియస్ కొలమానాలను చూడడం సాధ్యమవుతుంది, అయితే దీనికి గణనీయమైన కృషి అవసరం. ఒక నిర్దిష్ట కాన్ఫిగరేషన్‌ను మూల్యాంకనం చేయడానికి మాకు అవసరమైనది ఒక సాధారణ మార్గం. మేము etcd నుండి వచ్చే ప్రోమేతియస్ మెట్రిక్స్ గురించి మా అవగాహనను పరీక్షించాలనుకుంటున్నాము.

దీనికి రెండు సమస్యలను పరిష్కరించడం అవసరం:

  • ముందుగా, WAL ఫైల్‌లకు వ్రాసేటప్పుడు etcd ద్వారా ఉత్పత్తి చేయబడిన I/O లోడ్ ఎలా ఉంటుంది? ఏ సిస్టమ్ కాల్‌లు ఉపయోగించబడతాయి? రికార్డ్ బ్లాక్‌ల పరిమాణం ఎంత?
  • రెండవది, పై ప్రశ్నలకు మన దగ్గర సమాధానాలు ఉన్నాయని అనుకుందాం. సంబంధిత లోడ్‌ను ఎలా పునరుత్పత్తి చేయాలి fio? అన్ని తరువాత fio - పారామితుల సమృద్ధితో అత్యంత సౌకర్యవంతమైన యుటిలిటీ (ఇది ధృవీకరించడం సులభం, ఉదాహరణకు, ఇక్కడ - సుమారు అనువాదం.).

మేము రెండు సమస్యలను ఒకే కమాండ్ ఆధారిత విధానంతో పరిష్కరించాము lsof и strace:

  • సహాయంతో lsof మీరు ప్రక్రియ ద్వారా ఉపయోగించే అన్ని ఫైల్ డిస్క్రిప్టర్‌లను అలాగే వారు సూచించే ఫైల్‌లను చూడవచ్చు.
  • సహాయంతో strace మీరు ఇప్పటికే నడుస్తున్న ప్రాసెస్‌ని విశ్లేషించవచ్చు లేదా ప్రాసెస్‌ని అమలు చేసి దాన్ని చూడవచ్చు. కమాండ్ ఈ ప్రక్రియ ద్వారా చేసిన అన్ని సిస్టమ్ కాల్‌లను ప్రదర్శిస్తుంది మరియు అవసరమైతే, దాని వారసులు. ఫోర్కింగ్ చేసే ప్రక్రియలకు రెండోది ముఖ్యమైనది మరియు etcd అనేది అటువంటి ప్రక్రియ.

మేము చేసిన మొదటి పని ఉపయోగించడం strace Kubernetes క్లస్టర్‌లోని etcd సర్వర్ నిష్క్రియంగా ఉన్నప్పుడు దాన్ని పరిశీలించడానికి.

కాబట్టి WAL రికార్డ్ బ్లాక్‌లు చాలా దట్టంగా సమూహంగా ఉన్నాయని కనుగొనబడింది, మెజారిటీ పరిమాణం 2200-2400 బైట్ల పరిధిలో ఉంది. అందుకే ఈ వ్యాసం ప్రారంభంలో ఉన్న ఆదేశం జెండాను ఉపయోగిస్తుంది --bs=2300 (bs ప్రతి రైట్ బ్లాక్ ఇన్ బైట్‌లలో పరిమాణం fio).

సంస్కరణ, విస్తరణ, పారామీటర్ విలువలు మొదలైన వాటిపై ఆధారపడి etcd రైట్ బ్లాక్‌ల పరిమాణం మారవచ్చని దయచేసి గమనించండి. - ఇది వ్యవధిని ప్రభావితం చేస్తుంది fdatasync. మీకు ఇలాంటి వినియోగ సందర్భం ఉంటే, దీనితో విశ్లేషించండి strace తాజా విలువలను పొందడానికి మీ etcd ప్రక్రియలు.

ఆపై, ఫైల్ సిస్టమ్‌తో etcd ఎలా పనిచేస్తుందనే దాని గురించి స్పష్టమైన మరియు సమగ్రమైన ఆలోచనను పొందడానికి, మేము దీన్ని దిగువ నుండి ప్రారంభించాము strace జెండాలతో -ffttT. ఇది చైల్డ్ ప్రాసెస్‌లను క్యాప్చర్ చేయడం మరియు ప్రతి దాని అవుట్‌పుట్‌ను ప్రత్యేక ఫైల్‌కి వ్రాయడం సాధ్యం చేసింది. అదనంగా, ప్రతి సిస్టమ్ కాల్ ప్రారంభ సమయం మరియు వ్యవధి గురించి వివరణాత్మక సమాచారం పొందబడింది.

మేము ఆదేశాన్ని కూడా ఉపయోగించాము lsofఅవుట్‌పుట్‌పై మీ అవగాహనను నిర్ధారించడానికి strace ఏ ఫైల్ డిస్క్రిప్టర్ ఏ ప్రయోజనం కోసం ఉపయోగించబడింది అనే విషయంలో. నాకు ముగింపు వచ్చింది strace, పైన పేర్కొన్నదానిని పోలి ఉంటుంది. సమకాలీకరణ సమయాలతో కూడిన గణాంక అవకతవకలు మెట్రిక్ అని నిర్ధారించాయి wal_fsync_duration_seconds etcd మ్యాచ్‌ల కాల్‌ల నుండి fdatasync WAL ఫైల్ డిస్క్రిప్టర్‌లతో.

తో ఉత్పత్తి చేయడానికి fio etcd నుండి పనిభారం లాంటిది, యుటిలిటీ యొక్క డాక్యుమెంటేషన్ అధ్యయనం చేయబడింది మరియు మా పనికి తగిన పారామితులు ఎంపిక చేయబడ్డాయి. సరైన సిస్టమ్ కాల్‌లు ప్రోగ్రెస్‌లో ఉన్నాయని మేము ధృవీకరించాము మరియు అమలు చేయడం ద్వారా వాటి వ్యవధిని నిర్ధారించాము fio నుండి strace (ఇది etcd విషయంలో చేసినట్లు).

పరామితి యొక్క విలువను నిర్ణయించడానికి ప్రత్యేక శ్రద్ధ చెల్లించబడింది --size. ఇది ఫియో యుటిలిటీ ద్వారా ఉత్పత్తి చేయబడిన మొత్తం I/O లోడ్‌ను సూచిస్తుంది. మా విషయంలో, ఇది మీడియాకు వ్రాసిన మొత్తం బైట్‌ల సంఖ్య. ఇది కాల్‌ల సంఖ్యకు నేరుగా అనులోమానుపాతంలో ఉంటుంది write (మరియు fdatasync) ఒక నిర్దిష్ట కోసం bs కాల్స్ సంఖ్య fdatasync అంతే size / bs.

మేము పర్సంటైల్‌పై ఆసక్తి కలిగి ఉన్నందున, గణాంకపరంగా ముఖ్యమైనవి కావడానికి నమూనాల సంఖ్య తగినంతగా ఉండాలని మేము కోరుకున్నాము. మరియు అది నిర్ణయించుకుంది 10^4 (ఇది 22 MB పరిమాణానికి అనుగుణంగా ఉంటుంది) సరిపోతుంది. చిన్న పారామీటర్ విలువలు --size మరింత స్పష్టమైన శబ్దాన్ని ఇచ్చింది (ఉదాహరణకు, కాల్స్ fdatasync, ఇది సాధారణం కంటే ఎక్కువ సమయం పడుతుంది మరియు 99వ శాతాన్ని ప్రభావితం చేస్తుంది).

ఇది మీ ఇష్టం

ఎలా ఉపయోగించాలో వ్యాసం చూపిస్తుంది fio etcdతో ఉపయోగించడానికి ఉద్దేశించిన మీడియా తగినంత వేగంగా ఉందో లేదో నిర్ధారించవచ్చు. ఇప్పుడు అది మీ ఇష్టం! మీరు సేవలో SSD-ఆధారిత నిల్వతో వర్చువల్ మిషన్‌లను అన్వేషించవచ్చు IBM క్లౌడ్.

అనువాదకుని నుండి PS

రెడీమేడ్ వినియోగ కేసులతో fio ఇతర పనుల కోసం, చూడండి డాక్యుమెంటేషన్ లేదా నేరుగా ప్రాజెక్ట్ రిపోజిటరీలు (డాక్యుమెంటేషన్‌లో పేర్కొన్న వాటి కంటే చాలా ఎక్కువ ఉన్నాయి).

అనువాదకుని నుండి PPS

మా బ్లాగులో కూడా చదవండి:

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి