etcd uchun etarli ishlash uchun fio bilan disklarni qanday tekshirish mumkin

Eslatma. tarjima.: Ushbu maqola etcd ma'lumotlar bazasining ishlashi bilan bog'liq haqiqiy muammoga yechim izlash uchun IBM Cloud muhandislari tomonidan olib borilgan mini-tadqiqotlar natijasidir. Shunga o'xshash vazifa biz uchun dolzarb edi, ammo mualliflarning fikrlari va harakatlari kengroq kontekstda qiziqarli bo'lishi mumkin.

etcd uchun etarli ishlash uchun fio bilan disklarni qanday tekshirish mumkin

Butun maqolaning qisqacha mazmuni: fio va boshqalar

etcd klasterining ishlashi asosiy saqlash tezligiga juda bog'liq. etcd ishlashni kuzatish uchun turli Prometey ko'rsatkichlarini eksport qiladi. Ulardan biri wal_fsync_duration_seconds. etcd uchun hujjatlarda deyiladiAgar ushbu ko'rsatkichning 99-protsentili 10 ms dan oshmasa, bu saqlashni etarlicha tez deb hisoblash mumkin ...

Agar siz Linux kompyuterlarida etcd klasterini o'rnatishni o'ylayotgan bo'lsangiz va drayverlarning (masalan, SSD'lar) etarlicha tezligini sinab ko'rmoqchi bo'lsangiz, mashhur I/U testeridan foydalanishni tavsiya etamiz. fio. Quyidagi buyruqni bajarish kifoya (katalog test-data sinovdan o'tgan drayverning o'rnatilgan qismida joylashgan bo'lishi kerak):

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

Faqat chiqishga qarash va 99-protsentil mos kelishini tekshirish qoladi fdatasync 10 ms ichida. Agar shunday bo'lsa, unda sizning drayveringiz etarlicha tez ishlaydi. Mana misol chiqish:

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]

Bir nechta eslatma:

  1. Yuqoridagi misolda biz parametrlarni o'rnatdik --size ΠΈ --bs muayyan holat uchun. dan mazmunli natija olish uchun fio, foydalanish holatlaringizga mos qiymatlarni belgilang. Ularni qanday tanlash haqida quyida muhokama qilinadi.
  2. Faqat sinov paytida fio disk quyi tizimini yuklaydi. Haqiqiy hayotda, ehtimol, boshqa jarayonlar diskka yozilishi mumkin ( wal_fsync_duration_seconds). Bu qo'shimcha yuk ortishi mumkin wal_fsync_duration_seconds. Boshqacha qilib aytganda, agar testdan 99 foizli bo'lsa fio, atigi 10 ms dan bir oz kamroq, saqlash unumdorligi etarli emasligi uchun yaxshi imkoniyat bor.
  3. Sinov uchun sizga versiya kerak bo'ladi fio 3.5 dan kam emas, chunki eski versiyalar natijalarni jamlamaydi fdatasync foizlar shaklida.
  4. Yuqoridagi xulosa umumiy xulosadan faqat kichik bir parcha fio.

fio va boshqalar haqida ko'proq

WAL va boshqalar haqida bir necha so'z

Odatda, ma'lumotlar bazalari foydalanadi proaktiv ro'yxatga olish (oldindan yozish, WAL). etcd ham ta'sir qiladi. WAL ni muhokama qilish ushbu maqola doirasidan tashqarida, lekin bizning maqsadlarimiz uchun siz bilishingiz kerak bo'lgan narsa shuki, etcd klasterining har bir a'zosi WALni doimiy xotirada saqlaydi. etcd ba'zi kalit-qiymat saqlash operatsiyalarini (masalan, yangilanishlarni) bajarishdan oldin WAL-ga yozadi. Agar tugun ishlamay qolsa va oniy tasvirlar o'rtasida qayta ishga tushsa, etcd WAL mazmuniga asoslanib, oldingi suratdan keyingi tranzaktsiyalarni tiklashi mumkin bo'ladi.

Shunday qilib, mijoz har safar KV do'koniga kalit qo'shganda yoki mavjud kalitning qiymatini yangilaganda, etcd doimiy do'kondagi oddiy fayl bo'lgan WAL-ga operatsiya tavsifini qo'shadi. etcd Davom etishdan oldin WAL yozuvi haqiqatda saqlanganligiga 100% ishonch hosil qilishi KERAK. Linuxda bunga erishish uchun tizim chaqiruvidan foydalanish etarli emas write, chunki jismoniy muhitga yozish operatsiyasining o'zi kechiktirilishi mumkin. Misol uchun, Linux WAL yozuvini xotiradagi yadro keshida (masalan, sahifa keshida) bir muddat saqlashi mumkin. Ma'lumotlarning ommaviy axborot vositalariga yozilishini ta'minlash uchun yozishdan keyin tizim chaqiruvi chaqirilishi kerak fdatasync - aynan etcd bajaradigan narsa (quyidagi chiqishda ko'rib turganingizdek strace; Bu yerga 8 - WAL fayl deskriptori):

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>

Afsuski, doimiy xotiraga yozish biroz vaqt talab etadi. Fdatasync qo'ng'iroqlarining uzoq muddat bajarilishi etcd ishlashiga ta'sir qilishi mumkin. Repozitariy hujjatlarida ko'rsatilgan, Etarli ishlash uchun barcha qo'ng'iroqlar davomiyligining 99 foizli bo'lishi kerak fdatasync WAL fayliga yozishda 10 ms dan kam bo'lgan. Saqlash bilan bog'liq boshqa ko'rsatkichlar ham mavjud, ammo bu maqola shu narsaga qaratiladi.

Fio bilan saqlashni baholash

Yordamchi dastur yordamida ma'lum bir xotira etcd bilan foydalanish uchun mos yoki yo'qligini baholashingiz mumkin fio β€” mashhur I/U tester. Yodda tutingki, diskni kiritish-chiqarish juda ko'p turli yo'llar bilan sodir bo'lishi mumkin: sinxronlash/sinxronlash, ko'plab turli tizimli qo'ng'iroqlar sinflari va boshqalar. Tanganing boshqa tomoni ham shunday fio foydalanish juda qiyin. Yordamchi dastur juda ko'p parametrlarga ega va ularning qiymatlarining turli kombinatsiyasi butunlay boshqacha natijalarga olib keladi. etcd uchun oqilona baho olish uchun fio tomonidan yaratilgan yozish yuki etcd WAL fayl yozish yukiga imkon qadar yaqin ekanligiga ishonch hosil qilishingiz kerak:

  • Bu ishlab chiqarilgan degan ma'noni anglatadi fio yuk kamida faylga ketma-ket yozishlar seriyasi bo'lishi kerak, bu erda har bir yozish tizim chaqiruvidan iborat. writedan so'ng fdatasync.
  • Ketma-ket yozishni yoqish uchun siz bayroqni ko'rsatishingiz kerak --rw=write.
  • ekan fio qo'ng'iroqlar yordamida yozgan write (boshqa tizim chaqiruvlaridan ko'ra - masalan, pwrite), bayroqdan foydalaning --ioengine=sync.
  • Nihoyat, bayroq --fdatasync=1 har bir ekanligini ta'minlaydi write bo'lishi kerak fdatasync.
  • Bizning misolimizdagi boshqa ikkita parametr: --size ΠΈ --bs - muayyan foydalanish holatiga qarab farq qilishi mumkin. Keyingi bo'limda ularning konfiguratsiyasi tasvirlanadi.

Nima uchun biz fio ni tanladik va uni qanday sozlashni o'rgandik

Ushbu eslatma biz duch kelgan haqiqiy voqeadan olingan. Bizda Kubernetes v1.13 da Prometeyda monitoring bilan klaster mavjud edi. SSD'lar etcd v3.2.24 uchun saqlash sifatida ishlatilgan. Etcd ko'rsatkichlari juda yuqori kechikishlarni ko'rsatdi fdatasync, hatto klaster ishlamay qolganda ham. Biz uchun bu ko'rsatkichlar juda shubhali bo'lib tuyuldi va biz ular aniq nimani anglatishini bilmas edik. Bundan tashqari, klaster virtual mashinalardan iborat edi, shuning uchun kechikish virtualizatsiya bilan bog'liqmi yoki SSD aybdorligini aytish mumkin emas edi.

Bundan tashqari, biz apparat va dasturiy ta'minot konfiguratsiyasidagi turli o'zgarishlarni ko'rib chiqdik, shuning uchun ularni baholash usuli kerak edi. Albatta, har bir konfiguratsiyada etcd ni ishga tushirish va tegishli Prometey ko'rsatkichlarini ko'rib chiqish mumkin bo'ladi, ammo bu katta kuch talab qiladi. Bizga kerak bo'lgan narsa ma'lum bir konfiguratsiyani baholashning oddiy usuli edi. Biz etcd dan kelgan Prometey ko'rsatkichlari haqidagi tushunchamizni sinab ko'rmoqchi edik.

Buning uchun ikkita muammoni hal qilish kerak edi:

  • Birinchidan, WAL fayllariga yozishda etcd tomonidan yaratilgan kiritish-chiqarish yuki qanday ko'rinishga ega? Qanday tizim chaqiruvlaridan foydalaniladi? Rekord bloklarining o'lchami qanday?
  • Ikkinchidan, yuqoridagi savollarga javobimiz bor deylik. Tegishli yukni qanday qilib ko'paytirish kerak fio? Hammasidan keyin; axiyri fio - juda ko'p parametrlarga ega juda moslashuvchan yordamchi dastur (buni tekshirish oson, masalan, shu yerda - taxminan. tarjima.).

Biz ikkala muammoni bir xil buyruqqa asoslangan yondashuv bilan hal qildik lsof ΠΈ strace:

  • Yordamida lsof jarayon tomonidan ishlatiladigan barcha fayl identifikatorlarini, shuningdek, ular murojaat qilgan fayllarni ko'rishingiz mumkin.
  • Yordamida strace siz allaqachon ishlayotgan jarayonni tahlil qilishingiz yoki jarayonni ishga tushirishingiz va uni tomosha qilishingiz mumkin. Buyruq ushbu jarayon tomonidan amalga oshirilgan barcha tizim qo'ng'iroqlarini va agar kerak bo'lsa, uning avlodlarini ko'rsatadi. Ikkinchisi vilkalar bo'ladigan jarayonlar uchun muhimdir va etcd shunday jarayonlardan biridir.

Biz qilgan birinchi narsa foydalanish edi strace Kubernetes klasteridagi etcd serverini u ishlamay qolganda tekshirish uchun.

Shunday qilib, WAL rekord bloklari juda zich guruhlanganligi aniqlandi, ko'pchilikning hajmi 2200-2400 bayt oralig'ida edi. Shuning uchun ushbu maqolaning boshidagi buyruq bayroqdan foydalanadi --bs=2300 (bs har bir yozish blokining baytdagi hajmi fio).

E'tibor bering, etcd yozish bloklarining o'lchami versiya, joylashtirish, parametr qiymatlari va boshqalarga qarab farq qilishi mumkin. - bu muddatga ta'sir qiladi fdatasync. Agar sizda shunga o'xshash foydalanish holati bo'lsa, bilan tahlil qiling strace dolzarb qiymatlarni olish uchun etcd jarayonlaringiz.

Keyin etcd fayl tizimi bilan qanday ishlashi haqida aniq va to'liq tasavvurga ega bo'lish uchun biz uni quyidan boshladik. strace bayroqlar bilan -ffttT. Bu bolalar jarayonlarini yozib olish va har birining chiqishini alohida faylga yozish imkonini berdi. Bundan tashqari, har bir tizim chaqiruvining boshlanish vaqti va davomiyligi haqida batafsil ma'lumot olindi.

Biz ham buyruqdan foydalandik lsofchiqish haqidagi tushunchangizni tasdiqlash uchun strace qaysi fayl deskriptoridan qaysi maqsadda foydalanilganligi nuqtai nazaridan. Men xulosaga keldim strace, yuqoridagiga o'xshash. Sinxronizatsiya vaqtlari bilan statistik manipulyatsiyalar metrikani tasdiqladi wal_fsync_duration_seconds etcd qo'ng'iroqlariga mos keladi fdatasync WAL fayl deskriptorlari bilan.

Bilan yaratish uchun fio etcd dan shunga o'xshash ish yuki, yordamchi dasturning hujjatlari o'rganildi va bizning vazifamiz uchun mos parametrlar tanlandi. Biz toΚ»gΚ»ri tizim qoΚ»ngΚ»iroqlari amalga oshirilayotganini tasdiqladik va ishga tushirish orqali ularning davomiyligini tasdiqladik fio dan strace (bu etcd holatlarida qilinganidek).

Parametrning qiymatini aniqlashga alohida e'tibor qaratildi --size. Bu fio yordam dasturi tomonidan yaratilgan umumiy kiritish/chiqarish yukini ifodalaydi. Bizning holatda, bu ommaviy axborot vositalariga yozilgan baytlarning umumiy soni. Bu qo'ng'iroqlar soniga to'g'ridan-to'g'ri proportsionaldir write (va fdatasync). Muayyan uchun bs qo'ng'iroqlar soni fdatasync tengdir size / bs.

Bizni foiz nisbati qiziqtirganligi sababli, biz namunalar soni statistik ahamiyatga ega bo'lishi uchun etarlicha katta bo'lishini xohladik. Va shunday qaror qildi 10^4 (22 MB hajmga to'g'ri keladi) etarli bo'ladi. Kichikroq parametr qiymatlari --size aniqroq shovqin berdi (masalan, qo'ng'iroqlar fdatasync, bu odatdagidan ko'proq vaqt talab qiladi va 99 foizga ta'sir qiladi).

Bu o'zingizga bog'liq

Maqolada qanday foydalanish kerakligi ko'rsatilgan fio etcd bilan foydalanish uchun mo'ljallangan ommaviy axborot vositalari etarlicha tez yoki yo'qligini aniqlash mumkin. Endi bu sizga bog'liq! Xizmatda SSD-ga asoslangan xotiraga ega virtual mashinalarni o'rganishingiz mumkin IBM Cloud.

Tarjimondan PS

Tayyor foydalanish holatlari bilan fio Boshqa vazifalar uchun qarang hujjatlar yoki to'g'ridan-to'g'ri loyiha omborlari (ularning soni hujjatlarda ko'rsatilganidan ko'p).

Tarjimondan PPS

Shuningdek, bizning blogimizda o'qing:

Manba: www.habr.com

a Izoh qo'shish