etcdக்கு சேமிப்பக வேகம் பொருத்தமானதா? ஃபியோவிடம் கேட்போம்

etcdக்கு சேமிப்பக வேகம் பொருத்தமானதா? ஃபியோவிடம் கேட்போம்

fio மற்றும் etcd பற்றிய ஒரு சிறுகதை

கிளஸ்டர் செயல்திறன் முதலியன பெரும்பாலும் அதன் சேமிப்பகத்தின் செயல்திறனைப் பொறுத்தது. etcd சில அளவீடுகளை ஏற்றுமதி செய்கிறது பிரமீதீயஸ்விரும்பிய சேமிப்பக செயல்திறன் தகவலை வழங்க. எடுத்துக்காட்டாக, wal_fsync_duration_seconds மெட்ரிக். etcdக்கான ஆவணங்கள் கூறுகின்றன: சேமிப்பகத்தை போதுமான அளவு வேகமாகக் கருதுவதற்கு, இந்த அளவீட்டின் 99வது சதவிகிதம் 10msக்கும் குறைவாக இருக்க வேண்டும். நீங்கள் Linux கணினிகளில் ஒரு etcd கிளஸ்டரை இயக்க திட்டமிட்டு, உங்கள் சேமிப்பகம் போதுமான அளவு வேகமாக உள்ளதா என்பதை மதிப்பீடு செய்ய விரும்பினால் (எ.கா. SSD), நீங்கள் பயன்படுத்தலாம் நம்பிக்கை I/O செயல்பாடுகளை சோதிக்கும் ஒரு பிரபலமான கருவியாகும். பின்வரும் கட்டளையை இயக்கவும், அங்கு சோதனை-தரவு என்பது சேமிப்பக மவுண்ட் பாயின்ட்டின் கீழ் உள்ள கோப்பகமாகும்:

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

நீங்கள் முடிவுகளைப் பார்க்க வேண்டும் மற்றும் காலத்தின் 99 வது சதவீதத்தை சரிபார்க்க வேண்டும் fdatasync 10 ms க்கும் குறைவானது. அப்படியானால், உங்களிடம் நியாயமான வேகமான சேமிப்பிடம் உள்ளது. முடிவுகளின் எடுத்துக்காட்டு இங்கே:

  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 ஐ எவ்வாறு கட்டமைக்க கற்றுக்கொண்டோம்.
  • சோதனையின் போது, ​​அனைத்து I/O சுமைகளும் fio இலிருந்து வருகிறது. நிஜ வாழ்க்கை சூழ்நிலையில், wal_fsync_duration_seconds தொடர்பான கோரிக்கைகளைத் தவிர மற்ற எழுதும் கோரிக்கைகளும் சேமிப்பகத்திற்கு வரும். கூடுதல் சுமை wal_fsync_duration_seconds இன் மதிப்பை அதிகரிக்கும். எனவே 99வது சதவிகிதம் 10msக்கு அருகில் இருந்தால், உங்கள் சேமிப்பகத்தின் வேகம் தீர்ந்துவிடும்.
  • பதிப்பை எடுத்துக் கொள்ளுங்கள் நம்பிக்கை 3.5 க்கும் குறைவாக இல்லை (முந்தையவை fdatasync கால சதவீதங்களைக் காட்டவில்லை).
  • மேலே ஃபியோவின் முடிவுகளின் ஒரு துணுக்கு மட்டுமே.

ஃபியோ மற்றும் பலவற்றைப் பற்றிய நீண்ட கதை

etcd இல் WAL என்றால் என்ன

பொதுவாக தரவுத்தளங்கள் பயன்படுத்தப்படுகின்றன எழுத முன் பதிவு; etcd அதையும் பயன்படுத்துகிறது. எழுதுவதற்கு முன் பதிவு (WAL) பற்றி இங்கு விரிவாக விவாதிக்க மாட்டோம். etcd கிளஸ்டரின் ஒவ்வொரு உறுப்பினரும் அதை தொடர்ந்து சேமிப்பில் பராமரிக்கிறார்கள் என்பதை நாம் அறிந்தால் போதும். etcd ஒவ்வொரு முக்கிய-மதிப்பு செயல்பாட்டையும் (புதுப்பிப்பு போன்றவை) கடையில் பயன்படுத்துவதற்கு முன்பு WALக்கு எழுதுகிறது. சேமிப்பக உறுப்பினர்களில் ஒருவர் செயலிழந்து ஸ்னாப்ஷாட்டுகளுக்கு இடையில் மறுதொடக்கம் செய்தால், WAL உள்ளடக்கத்தின் மூலம் கடைசி ஸ்னாப்ஷாட்டில் இருந்து பரிமாற்றங்களை உள்நாட்டில் மீட்டெடுக்க முடியும்.

ஒரு கிளையன்ட் கீ-மதிப்பு ஸ்டோரில் ஒரு விசையைச் சேர்க்கும்போது அல்லது ஏற்கனவே உள்ள விசையின் மதிப்பைப் புதுப்பிக்கும்போது, ​​etcd ஆனது WAL இல் செயல்பாட்டைப் பதிவுசெய்கிறது, இது நிலையான சேமிப்பகத்தில் இருக்கும் வழக்கமான கோப்பாகும். etcd செயலாக்கத்தைத் தொடர்வதற்கு முன், WAL நுழைவு உண்மையில் நிகழ்ந்தது என்பதை முற்றிலும் உறுதியாக நம்ப வேண்டும். லினக்ஸில், இதற்கு ஒரு கணினி அழைப்பு போதாது. எழுத, உடல் சேமிப்பகத்திற்கான உண்மையான எழுத்து தாமதமாகலாம் என்பதால். எடுத்துக்காட்டாக, லினக்ஸ் ஒரு WAL உள்ளீட்டை கர்னல் நினைவகத்தில் (பக்க கேச் போன்றவை) தற்காலிக சேமிப்பில் சிறிது நேரம் சேமிக்கலாம். நிலையான சேமிப்பகத்திற்கு தரவு துல்லியமாக எழுதப்படுவதற்கு, எழுதப்பட்ட பிறகு fdatasync கணினி அழைப்பு தேவைப்படுகிறது, மேலும் etcd அதைப் பயன்படுத்துகிறது (நீங்கள் வேலையின் முடிவில் பார்க்க முடியும் ஸ்ட்ரேஸ், 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 கோப்பில் எழுத 10msக்கும் குறைவாக எடுத்துக் கொண்டால், சேமிப்பகம் போதுமான அளவு வேகமாக இருக்கும் என்று கருதப்படுகிறது. சேமிப்பகத்திற்கான பிற பயனுள்ள அளவீடுகள் உள்ளன, ஆனால் இந்த இடுகையில் இந்த மெட்ரிக்கைப் பற்றி மட்டுமே பேசுகிறோம்.

fio உடன் சேமிப்பகத்தை மதிப்பிடுகிறது

உங்கள் சேமிப்பகம் etcdக்கு ஏற்றதா என்பதை நீங்கள் மதிப்பீடு செய்ய வேண்டுமானால், மிகவும் பிரபலமான I/O சுமை சோதனைக் கருவியான fio ஐப் பயன்படுத்தவும். வட்டு செயல்பாடுகள் மிகவும் வித்தியாசமாக இருக்கும் என்பதை நினைவில் கொள்ள வேண்டும்: ஒத்திசைவான மற்றும் ஒத்திசைவற்ற, கணினி அழைப்புகளின் பல வகுப்புகள், முதலியன. இதன் விளைவாக, fio ஐப் பயன்படுத்துவது மிகவும் கடினம். இது பல அளவுருக்களைக் கொண்டுள்ளது மற்றும் அவற்றின் மதிப்புகளின் வெவ்வேறு சேர்க்கைகள் மிகவும் மாறுபட்ட I/O பணிச்சுமைகளை உருவாக்குகின்றன. etcdக்கான போதுமான புள்ளிவிவரங்களைப் பெற, WAL கோப்புகளை எழுதும் போது fio இலிருந்து சோதனை எழுதும் சுமை, etcd இலிருந்து உண்மையான சுமைக்கு முடிந்தவரை நெருக்கமாக இருப்பதை உறுதிசெய்ய வேண்டும்.

எனவே, ஃபியோ, குறைந்தபட்சம், கோப்பில் தொடர்ச்சியான தொடர்ச்சியான எழுத்துகளின் சுமையை உருவாக்க வேண்டும், ஒவ்வொரு எழுத்தும் ஒரு கணினி அழைப்பைக் கொண்டிருக்கும். எழுததொடர்ந்து fdatasync அமைப்பு அழைப்பு. fio க்கு தொடர்ச்சியாக எழுதுவதற்கு --rw=write விருப்பம் தேவை. fio க்கு எழுதும் போது எழுதும் முறை அழைப்பைப் பயன்படுத்துவதற்குப் பதிலாக எழுது, நீங்கள் --ioengine=sync அளவுருவைக் குறிப்பிட வேண்டும். இறுதியாக, ஒவ்வொரு எழுத்துக்குப் பிறகும் fdatasync ஐ அழைக்க, நீங்கள் --fdatasync=1 அளவுருவைச் சேர்க்க வேண்டும். இந்த எடுத்துக்காட்டில் உள்ள மற்ற இரண்டு விருப்பங்களும் (--size மற்றும் -bs) ஸ்கிரிப்ட் சார்ந்தவை. அடுத்த பகுதியில், அவற்றை எவ்வாறு அமைப்பது என்பதைக் காண்பிப்போம்.

ஏன் ஃபியோ மற்றும் அதை எப்படி அமைக்க கற்றுக்கொண்டோம்

இந்த இடுகையில், ஒரு உண்மையான வழக்கை விவரிக்கிறோம். எங்களிடம் ஒரு கிளஸ்டர் உள்ளது Kubernetes v1.13 நாங்கள் ப்ரோமிதியஸுடன் கண்காணித்தோம். etcd v3.2.24 ஒரு SSD இல் ஹோஸ்ட் செய்யப்பட்டது. Etcd அளவீடுகள், க்ளஸ்டர் ஒன்றும் செய்யாவிட்டாலும் கூட, fdatasync தாமதங்களை மிக அதிகமாகக் காட்டியது. அளவீடுகள் வித்தியாசமாக இருந்தன, அவை என்னவென்று எங்களுக்குத் தெரியவில்லை. கிளஸ்டர் மெய்நிகர் இயந்திரங்களைக் கொண்டிருந்தது, சிக்கல் என்ன என்பதைப் புரிந்துகொள்வது அவசியம்: இயற்பியல் SSD களில் அல்லது மெய்நிகராக்க அடுக்கில். கூடுதலாக, நாங்கள் அடிக்கடி வன்பொருள் மற்றும் மென்பொருள் உள்ளமைவில் மாற்றங்களைச் செய்தோம், மேலும் அவற்றின் முடிவுகளை மதிப்பிடுவதற்கு எங்களுக்கு ஒரு வழி தேவைப்பட்டது. நாம் ஒவ்வொரு உள்ளமைவிலும் etcd ஐ இயக்கலாம் மற்றும் ப்ரோமிதியஸ் அளவீடுகளைப் பார்க்கலாம், ஆனால் அது மிகவும் தொந்தரவாக இருக்கிறது. ஒரு குறிப்பிட்ட உள்ளமைவை மதிப்பிடுவதற்கு மிகவும் எளிமையான வழியைத் தேடுகிறோம். etcd இலிருந்து Prometheus அளவீடுகளை நாம் சரியாகப் புரிந்து கொண்டோமா என்பதைச் சரிபார்க்க விரும்பினோம்.

ஆனால் இதற்கு இரண்டு பிரச்சனைகள் தீர்க்கப்பட வேண்டியிருந்தது. முதலில், WALக்கு எழுதும் போது etcd உருவாக்கும் I/O லோட் எப்படி இருக்கும்? என்ன கணினி அழைப்புகள் பயன்படுத்தப்படுகின்றன? பதிவுகளின் அளவு என்ன? இரண்டாவதாக, இந்தக் கேள்விகளுக்குப் பதிலளித்தால், இதேபோன்ற பணிச்சுமையை ஃபியோவுடன் எவ்வாறு மீண்டும் உருவாக்குவது? fio பல விருப்பங்களைக் கொண்ட மிகவும் நெகிழ்வான கருவி என்பதை மறந்துவிடாதீர்கள். இரண்டு சிக்கல்களையும் ஒரே அணுகுமுறையில் தீர்த்தோம் - கட்டளைகளைப் பயன்படுத்தி lsof и ஸ்ட்ரேஸ். lsof செயல்முறையால் பயன்படுத்தப்படும் அனைத்து கோப்பு விளக்கங்களையும் அவற்றுடன் தொடர்புடைய கோப்புகளையும் பட்டியலிடுகிறது. மற்றும் strace மூலம், நீங்கள் ஏற்கனவே இயங்கும் செயல்முறையை ஆராயலாம் அல்லது ஒரு செயல்முறையைத் தொடங்கி அதை ஆராயலாம். strace ஆய்வு செய்யப்படும் செயல்முறையிலிருந்து அனைத்து கணினி அழைப்புகளையும் அச்சிடுகிறது (மற்றும் அதன் குழந்தை செயல்முறைகள்). பிந்தையது மிகவும் முக்கியமானது, ஏனெனில் etcd இதே அணுகுமுறையை எடுக்கிறது.

கிளஸ்டரில் சுமை இல்லாதபோது குபெர்னெட்டஸிற்கான etcd சேவையகத்தை ஆராய முதலில் ஸ்ட்ரேஸைப் பயன்படுத்தினோம். கிட்டத்தட்ட எல்லா WAL பதிவுகளும் ஒரே அளவில் இருப்பதைக் கண்டோம்: 2200–2400 பைட்டுகள். எனவே, இடுகையின் தொடக்கத்தில் உள்ள கட்டளையில், -bs=2300 அளவுருவைக் குறிப்பிட்டோம் (பிஎஸ் என்பது ஒவ்வொரு ஃபியோ நுழைவுக்கான பைட்டுகளில் உள்ள அளவைக் குறிக்கிறது). etcd உள்ளீட்டின் அளவு, etcd பதிப்பு, விநியோகம், அளவுரு மதிப்புகள் போன்றவற்றைப் பொறுத்தது மற்றும் fdatasync கால அளவைப் பாதிக்கிறது. உங்களுக்கு இதே போன்ற சூழல் இருந்தால், சரியான எண்களைக் கண்டறிய உங்கள் etcd செயல்முறைகளை ஸ்ட்ரேஸ் மூலம் ஆய்வு செய்யவும்.

பின்னர், etcd கோப்பு முறைமை என்ன செய்கிறது என்பதைப் பற்றிய நல்ல யோசனையைப் பெற, நாங்கள் அதை ஸ்ட்ரேஸ் மற்றும் -ffttT விருப்பங்களுடன் தொடங்கினோம். எனவே குழந்தை செயல்முறைகளை ஆய்வு செய்து அவை ஒவ்வொன்றின் வெளியீட்டையும் தனித்தனி கோப்பில் பதிவு செய்ய முயற்சித்தோம், மேலும் ஒவ்வொரு சிஸ்டம் அழைப்பின் தொடக்கம் மற்றும் கால அளவு பற்றிய விரிவான அறிக்கைகளையும் பெறுவோம். ஸ்ட்ரேஸ் வெளியீட்டின் எங்கள் பகுப்பாய்வை உறுதிப்படுத்தவும், எந்த கோப்பு விளக்கத்தை எந்த நோக்கத்திற்காகப் பயன்படுத்தப்படுகிறது என்பதைப் பார்க்கவும் lsof ஐப் பயன்படுத்தினோம். எனவே ஸ்ட்ரேஸ் உதவியுடன், மேலே காட்டப்பட்டுள்ள முடிவுகள் பெறப்பட்டன. wal_fsync_duration_seconds from etcd ஆனது WAL கோப்பு விளக்கங்களுடன் கூடிய fdatasync அழைப்புகளுடன் ஒத்துப்போகிறது என்பதை ஒத்திசைவு நேரப் புள்ளிவிவரங்கள் உறுதிப்படுத்தின.

ஃபியோவிற்கான ஆவணங்களை நாங்கள் ஆராய்ந்து, எங்களின் ஸ்கிரிப்ட்டுக்கான விருப்பங்களைத் தேர்ந்தெடுத்தோம், இதனால் ஃபியோ போன்றவை போன்ற சுமைகளை உருவாக்கும். சிஸ்டம் அழைப்புகளையும் அவற்றின் கால அளவையும் சரிபார்த்தோம்.

fio இலிருந்து முழு I/O சுமையையும் குறிக்க --size அளவுருவின் மதிப்பை கவனமாக தேர்வு செய்துள்ளோம். எங்கள் விஷயத்தில், சேமிப்பகத்தில் எழுதப்பட்ட மொத்த பைட்டுகளின் எண்ணிக்கை இதுவாகும். இது எழுதும் (மற்றும் fdatasync) கணினி அழைப்புகளின் எண்ணிக்கைக்கு நேரடியாக விகிதாசாரமாக மாறியது. bs இன் குறிப்பிட்ட மதிப்புக்கு, fdatasync அழைப்புகளின் எண்ணிக்கை = அளவு/பிஎஸ். சதவீதத்தில் நாங்கள் ஆர்வமாக இருந்ததால், உறுதிப்படுத்த போதுமான மாதிரிகள் எங்களிடம் இருக்க வேண்டும், மேலும் 10^4 எங்களுக்கு போதுமானதாக இருக்கும் என்று கணக்கிட்டோம் (அது 22 மெபிபைட்கள்). --size சிறியதாக இருந்தால், வெளிப்புறங்கள் ஏற்படலாம் (உதாரணமாக, பல fdatasync அழைப்புகள் வழக்கத்தை விட அதிக நேரம் எடுக்கும் மற்றும் 99வது சதவிகிதத்தை பாதிக்கிறது).

அதை நீங்களே முயற்சிக்கவும்

ஃபியோவைப் பயன்படுத்துவது மற்றும் etcd சிறப்பாகச் செயல்படும் வகையில் சேமிப்பகம் வேகமாக உள்ளதா என்பதைப் பார்ப்பது எப்படி என்பதை நாங்கள் உங்களுக்குக் காண்பித்தோம். இப்போது நீங்கள் SSD சேமிப்பகத்துடன் கூடிய மெய்நிகர் இயந்திரங்களைப் பயன்படுத்தி நீங்களே முயற்சி செய்யலாம் ஐபிஎம் கிளவுட்.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்