اسٽوريج جي رفتار وغيره لاء مناسب؟ اچو ته فيو کان پڇون

اسٽوريج جي رفتار وغيره لاء مناسب؟ اچو ته فيو کان پڇون

fio ۽ وغيره جي باري ۾ هڪ مختصر ڪهاڻي

ڪلستر ڪارڪردگي وغيره گهڻو ڪري ان جي اسٽوريج جي ڪارڪردگي تي منحصر آهي. etcd ڪجهه ميٽرڪس کي برآمد ڪري ٿو Prometheusگهربل اسٽوريج ڪارڪردگي جي معلومات مهيا ڪرڻ لاء. مثال طور، wal_fsync_duration_seconds ميٽرڪ. وغيره لاء دستاويز چوي ٿو: اسٽوريج لاءِ ڪافي تيز سمجهي وڃي، هن ميٽرڪ جو 99 سيڪڙو حصو 10ms کان گهٽ هجڻ گهرجي. جيڪڏهن توهان لينڪس مشينن تي هڪ etcd ڪلستر هلائڻ جي منصوبابندي ڪري رهيا آهيو ۽ جائزو وٺڻ چاهيو ٿا ته توهان جي اسٽوريج ڪافي تيز آهي (مثال طور SSD)، توهان استعمال ڪري سگهو ٿا fio I/O عملن کي جانچڻ لاءِ هڪ مشهور اوزار آهي. ھيٺ ڏنل حڪم ھلايو، جتي ٽيسٽ-ڊيٽا ڊاريڪٽري آھي اسٽوريج ماؤنٽ پوائنٽ جي ھيٺان:

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

توھان کي صرف نتيجن کي ڏسڻ جي ضرورت آھي ۽ چيڪ ڪريو ته مدت جو 99th سيڪڙو 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 کي ترتيب ڏيڻ.
  • جاچ دوران، سڀ I/O لوڊ فيو مان اچي ٿو. حقيقي زندگي جي منظرنامي ۾، امڪاني طور تي ٻيون لکڻيون درخواستون هونديون جيڪي اسٽوريج ۾ اچن ٿيون ان کان علاوه جيڪي لاڳاپيل آهن wal_fsync_duration_seconds. اضافي لوڊ wal_fsync_duration_seconds جي قيمت وڌائيندو. تنهن ڪري جيڪڏهن 99th فيصد 10ms جي ويجهو آهي، توهان جي اسٽوريج جي رفتار ختم ٿي رهي آهي.
  • نسخو وٺو fio 3.5 کان گهٽ ناهي (اڳيون fdatasync جي مدت في سيڪڙو نه ڏيکاريندا آھن).
  • مٿين فائيو مان نتيجن جو صرف هڪ ٽڪرو آهي.

فيو ۽ وغيره بابت ڊگهي ڪهاڻي

وغيره ۾ WAL ڇا آهي؟

عام طور تي ڊيٽابيس استعمال ڪن ٿا لکڻ-اڳتي لاگ؛ etcd پڻ استعمال ڪري ٿو. اسان هتي تفصيل سان لکڻ واري لاگ (WAL) تي بحث نه ڪنداسين. اسان لاءِ اهو ڄاڻڻ ڪافي آهي ته هر ميمبر وغيره ڊي ڪلستر ان کي مسلسل اسٽوريج ۾ رکي ٿو. 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 سسٽم جي ڪارڪردگي متاثر ٿيندي. وغيره لاء دستاويز چوي ٿوته اسٽوريج کي ڪافي تيز سمجهيو ويندو آهي، جيڪڏهن 99 هين فيصد ۾، fdatasync ڪالون WAL فائل ۾ لکڻ لاءِ 10ms کان گهٽ وٺن ٿيون. اسٽوريج لاءِ ٻيا ڪارآمد ميٽرڪ آهن، پر هن پوسٽ ۾ اسان صرف هن ميٽرڪ بابت ڳالهائي رهيا آهيون.

فيو سان گڏ اسٽوريج جو اندازو لڳائڻ

جيڪڏهن توهان کي اندازو لڳائڻ جي ضرورت آهي ته توهان جي اسٽوريج وغيره لاءِ موزون آهي، استعمال ڪريو fio، هڪ تمام مشهور I/O لوڊ ٽيسٽنگ اوزار. اهو ياد رکڻ گهرجي ته ڊسڪ آپريشن تمام مختلف ٿي سگهي ٿو: هم وقت سازي ۽ هم وقت ساز، سسٽم ڪالن جا ڪيترائي طبقا، وغيره. نتيجي طور، فيو استعمال ڪرڻ ڪافي ڏکيو آهي. ان ۾ ڪيترائي پيٽرول آھن، ۽ انھن جي قدرن جا مختلف ميلاپ تمام مختلف I/O ڪم لوڊ پيدا ڪن ٿا. etcd لاءِ مناسب انگ اکر حاصل ڪرڻ لاءِ، توهان کي پڪ ڪرڻ گهرجي ته WAL فائلون لکڻ دوران fio مان ٽيسٽ لکندڙ لوڊ etcd جي حقيقي لوڊ جي جيترو ممڪن هجي.

تنهن ڪري، fio، گهٽ ۾ گهٽ، فائل ۾ ترتيب وار لکڻين جي هڪ سيريز جو لوڊ ٺاهيو، هر لکڻ هڪ سسٽم ڪال تي مشتمل هوندو. لکڻبعد ۾ fdatasync سسٽم ڪال. fio تي ترتيب وار لکڻ جي ضرورت آهي --rw=write آپشن. فيو استعمال ڪرڻ لاءِ لکڻ جو نظام ڪال ڪريو جڏهن لکڻ، بجاءِ لکڻ، توهان کي وضاحت ڪرڻ گهرجي --ioengine=sync پيٽرول. آخرڪار، هر لکڻ کان پوءِ fdatasync کي ڪال ڪرڻ لاءِ، توهان کي --fdatasync=1 پيٽرول شامل ڪرڻو پوندو. ھن مثال ۾ ٻيا ٻه اختيار (-size ۽ -bs) اسڪرپٽ-مخصوص آھن. ايندڙ سيڪشن ۾، اسان توهان کي ڏيکارينداسين ته انهن کي ڪيئن ترتيب ڏيو.

ڇو fio ۽ ڪيئن اسان ان کي سيٽ ڪرڻ سکيو

هن پوسٽ ۾، اسان هڪ حقيقي ڪيس بيان ڪريون ٿا. اسان وٽ هڪ ڪلستر آهي ڪوبنيٿس v1.13 جنهن کي اسان Prometheus سان مانيٽر ڪيو. etcd v3.2.24 هڪ SSD تي ميزباني ڪئي وئي. Etcd ميٽرڪس ڏيکاريا آهن fdatasync دير سان تمام گهڻيون، جيتوڻيڪ جڏهن ڪلستر ڪجھ به نه ڪري رهيو هو. ميٽرڪ عجيب هئا ۽ اسان کي خبر ناهي ته انهن جو مطلب ڇا آهي. ڪلستر ورچوئل مشينن تي مشتمل هو، اهو سمجهڻ ضروري هو ته مسئلو ڇا هو: جسماني SSDs ۾ يا ورچوئلائيزيشن پرت ۾. اضافي طور تي، اسان اڪثر ڪري هارڊويئر ۽ سافٽ ويئر جي ترتيب ۾ تبديليون ڪيون، ۽ اسان کي انهن جي نتيجن جو جائزو وٺڻ لاء هڪ طريقي جي ضرورت آهي. اسان هر ترتيب ۾ etcd هلائي سگهون ٿا ۽ Prometheus ميٽرڪس کي ڏسو، پر اهو تمام گهڻو پريشان آهي. اسان ڳولي رھيا ھئاسين ھڪڙو سادو طريقو ھڪڙي مخصوص تشڪيل جو جائزو وٺڻ لاءِ. اسان چيڪ ڪرڻ چاهيون ٿا ته ڇا اسان سمجھون ٿا Prometheus metrics from etcd.

پر ان لاءِ ٻه مسئلا حل ٿيڻ گهرجن. پهريون، I/O لوڊ ڇا ٿو ٿئي جيڪا etcd ٺاهي ٿي جڏهن WAL ڏانهن لکجي ٿي؟ ڇا سسٽم ڪالون استعمال ڪيا ويا آهن؟ رڪارڊ جي ماپ ڇا آهي؟ ٻيو، جيڪڏهن اسان انهن سوالن جو جواب ڏيون ٿا، اسان ڪيئن ٻيهر پيدا ڪريون ٿا ساڳئي ڪم لوڊ فيو سان؟ اهو نه وساريو ته فائيو هڪ تمام لچڪدار اوزار آهي ڪيترن ئي اختيارن سان. اسان ٻنهي مسئلن کي هڪ طريقي سان حل ڪيو - حڪمن کي استعمال ڪندي لسٽ и ڀا .و. lsof سڀني فائل بيان ڪندڙن کي لسٽ ڪري ٿو جيڪو پروسيس ۽ انهن سان لاڳاپيل فائلن پاران استعمال ڪيو ويو آهي. ۽ اسٽريس سان، توهان جانچ ڪري سگهو ٿا اڳ ۾ ئي هلندڙ عمل، يا هڪ عمل شروع ڪري ان کي جانچيو. strace سڀني سسٽم ڪالن کي پرنٽ ڪري ٿو جنهن جي عمل جي جانچ ڪئي پئي وڃي (۽ ان جي ٻار جي عمل). بعد ۾ تمام ضروري آهي، ڇاڪاڻ ته etcd صرف ساڳئي طريقي سان وٺي رهيو آهي.

اسان پهريون ڀيرو ڪبرنيٽس لاءِ etcd سرور کي ڳولڻ لاءِ اسٽريس استعمال ڪيو جڏهن ڪلستر تي ڪو به لوڊ نه هو. اسان ڏٺو ته لڳ ڀڳ سڀئي WAL ريڪارڊ ساڳي سائيز جا هئا: 2200-2400 بائيٽ. تنهن ڪري، پوسٽ جي شروعات ۾ ڪمانڊ ۾، اسان وضاحت ڪئي پيراميٽر -bs = 2300 (bs جو مطلب آهي بائيٽ ۾ سائيز هر فيو داخلا لاءِ). نوٽ ڪريو ته etcd داخلا جي سائيز etcd ورزن، تقسيم، پيٽرولر ويلز، وغيره تي منحصر آهي، ۽ fdatasync جي مدت کي متاثر ڪري ٿو. جيڪڏهن توهان وٽ ساڳيو منظر آهي، صحيح انگن اکرن کي ڳولڻ لاء strace سان توهان جي etcd پروسيس کي جانچيو.

پوء، هڪ سٺو خيال حاصل ڪرڻ لاء etcd فائل سسٽم ڇا ڪري رهيو آهي، اسان ان کي اسٽريس ۽ -ffttT اختيارن سان شروع ڪيو. تنهن ڪري اسان ڪوشش ڪئي ته ٻار جي عملن کي جانچيو ۽ انهن مان هر هڪ جي پيداوار کي هڪ الڳ فائل ۾ رڪارڊ ڪيو، ۽ هر سسٽم ڪال جي شروعات ۽ مدت بابت تفصيلي رپورٽون پڻ حاصل ڪيون. اسان lsof استعمال ڪيو اسان جي تجزيو جي تصديق ڪرڻ لاءِ strace output ۽ ڏسو ته ڪھڙي فائل ڊسڪرپٽر کي ڪھڙي مقصد لاءِ استعمال ڪيو پيو وڃي. تنهن ڪري اسٽريس جي مدد سان، مٿي ڏيکاريل نتيجا حاصل ڪيا ويا. هم وقت سازي جي انگن اکرن جي تصديق ڪئي وئي آهي ته wal_fsync_duration_seconds from etcd هڪجهڙائي آهي fdatasync ڪالن سان WAL فائل بيان ڪندڙن سان.

اسان fio لاءِ دستاويزن جي ذريعي ويا ۽ اسان جي اسڪرپٽ لاءِ اختيارن کي چونڊيو ته جيئن fio وغيره وانگر لوڊ پيدا ڪري. اسان پڻ سسٽم ڪالز ۽ انهن جي مدت کي چڪاس ڪيو fio مان اسٽريس، جهڙوڪ وغيره.

اسان احتياط سان چونڊيو آهي -size پيٽرولر جي قيمت کي نمائندگي ڪرڻ لاءِ پوري I/O لوڊ کي fio مان. اسان جي صورت ۾، هي ڪل تعداد آهي بائيٽ جو ذخيرو ڏانهن لکيل آهي. اهو ظاهر ٿيو سڌو سنئون متناسب لکت (۽ fdatasync) سسٽم ڪالن جي تعداد لاءِ. bs جي هڪ خاص قدر لاءِ، fdatasync ڪالن جو تعداد = سائيز/bs. جيئن ته اسان فيصد ۾ دلچسپي وٺندا هئاسين، اسان کي پڪ ڪرڻ لاء ڪافي نمونا هجڻ گهرجن، ۽ اسان حساب ڪيو ته 10^4 اسان لاء ڪافي هوندو (اهو 22 ميبائيٽس آهي). جيڪڏهن --size ننڍو آهي، ٻاهر نڪرڻ وارا ٿي سگهن ٿا (مثال طور، ڪيترائي fdatasync ڪالون معمول کان وڌيڪ وقت وٺن ٿيون ۽ 99 سيڪڙو تي اثر انداز ٿين ٿيون).

پاڻ ڪوشش ڪريو

اسان توهان کي ڏيکاريو ته ڪيئن استعمال ڪجي fio ۽ ڏسو ته اسٽوريج ڪافي تيز آهي وغيره لاءِ سٺي ڪارڪردگي لاءِ. ھاڻي توھان ان کي استعمال ڪندي پنھنجي لاءِ آزمائي سگھو ٿا، مثال طور، ورچوئل مشينون ايس ايس ڊي اسٽوريج سان آئي بي ايم کلاڊ.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو