Saqlash tezligi etcd uchun mos keladimi? Keling, fiodan so'raymiz

Saqlash tezligi etcd uchun mos keladimi? Keling, fiodan so'raymiz

Fio va boshqalar haqida qisqacha hikoya

Klaster ishlashi va boshqalar ko'p jihatdan uni saqlash samaradorligiga bog'liq. etcd ba'zi ko'rsatkichlarni eksport qiladi Prometheuskerakli saqlash unumdorligi ma'lumotlarini taqdim etish. Masalan, wal_fsync_duration_seconds ko'rsatkichi. etcd uchun hujjatlar aytadi: Saqlash yetarlicha tez boʻlishi uchun ushbu koʻrsatkichning 99-persentili 10ms dan kam boʻlishi kerak. Agar siz Linux kompyuterlarida etcd klasterini ishga tushirishni rejalashtirmoqchi bo'lsangiz va xotirangiz etarlicha tez (masalan, SSD) yoki yo'qligini baholamoqchi bo'lsangiz, foydalanishingiz mumkin. fio kiritish-chiqarish operatsiyalarini sinab ko'rish uchun mashhur vositadir. Quyidagi buyruqni bajaring, bu erda test-data saqlash o'rnatish nuqtasi ostidagi katalogdir:

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

Siz shunchaki natijalarga qarashingiz va muddatning 99 foizli ekanligini tekshirishingiz kerak fdatasync 10 ms dan kam. Agar shunday bo'lsa, sizda juda tez xotira bor. Mana natijalarga misol:

  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]

Eslatmalar

  • Biz maxsus stsenariymiz uchun --size va --bs parametrlarini moslashtirdik. Fio dan foydali natija olish uchun o'z qadriyatlaringizni taqdim eting. Ularni qayerdan olish kerak? O'qing fio ni qanday sozlashni o'rgandik.
  • Sinov paytida barcha kiritish-chiqarish yuklari fio-dan keladi. Haqiqiy hayot stsenariysida wal_fsync_duration_seconds bilan bog'liq bo'lganlardan tashqari xotiraga boshqa yozish so'rovlari ham kelishi mumkin. Qo'shimcha yuk wal_fsync_duration_seconds qiymatini oshiradi. Shunday qilib, agar 99-persentil 10ms ga yaqin bo'lsa, xotirangiz tezligi tugaydi.
  • Versiyani oling fio 3.5 dan kam emas (avvalgilarida fdatasync davomiyligi foizlari ko'rsatilmaydi).
  • Yuqorida fio natijalarining faqat bir qismi.

Fio va boshqalar haqida uzoq hikoya

etcd da WAL nima

Odatda ma'lumotlar bazalari ishlatiladi oldindan yozish jurnali; etcd ham undan foydalanadi. Biz bu erda oldindan yozish jurnalini (WAL) batafsil muhokama qilmaymiz. Biz uchun etcd klasterining har bir a'zosi uni doimiy xotirada saqlashini bilish kifoya. etcd do'konga qo'llashdan oldin har bir kalit-qiymat operatsiyasini (masalan, yangilash) WAL-ga yozadi. Agar xotira a'zolaridan biri ishdan chiqsa va lahzalar o'rtasida qayta ishga tushsa, u WAL kontenti bo'yicha so'nggi suratdan keyingi tranzaktsiyalarni mahalliy ravishda tiklashi mumkin.

Mijoz kalit-qiymat do'koniga kalit qo'shganda yoki mavjud kalitning qiymatini yangilaganda, etcd operatsiyani doimiy saqlashdagi oddiy fayl bo'lgan WAL-da qayd etadi. etcd qayta ishlashni davom ettirishdan oldin WAL yozuvi haqiqatda sodir bo'lganligiga to'liq ishonch hosil qilish kerak. Linuxda buning uchun bitta tizim chaqiruvi etarli emas. yozish, chunki jismoniy xotiraga haqiqiy yozish kechikishi mumkin. Masalan, Linux WAL yozuvini yadro xotirasidagi keshda (masalan, sahifa keshi) bir muddat saqlashi mumkin. Va ma'lumotlar doimiy saqlashga to'g'ri yozilishi uchun, yozishdan keyin fdatasync tizimi chaqiruvi kerak bo'ladi va etcd uni ishlatadi (ish natijasida ko'rib turganingizdek) zo'riqish, bu erda 8 WAL fayl deskriptori):

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>

Afsuski, doimiy xotiraga yozish bir zumda sodir bo'lmaydi. Agar fdatasync chaqiruvi sekin bo'lsa, etcd tizimining ishlashi yomonlashadi. etcd uchun hujjatlar aytadiAgar 99-persentilda fdatasync qo'ng'iroqlari WAL fayliga yozish uchun 10 ms dan kam vaqt talab qilsa, saqlash etarli darajada tez hisoblanadi. Saqlash uchun boshqa foydali ko'rsatkichlar mavjud, ammo bu postda biz faqat ushbu ko'rsatkich haqida gapiramiz.

Fio bilan saqlashni taxmin qilish

Agar sizning xotirangiz etcd uchun mos yoki yo'qligini baholashingiz kerak bo'lsa, juda mashhur I/U yukini tekshirish vositasi fio dan foydalaning. Shuni esda tutish kerakki, diskdagi operatsiyalar juda xilma-xil bo'lishi mumkin: sinxron va asinxron, tizim qo'ng'iroqlarining ko'p sinflari va boshqalar. Natijada, fio-dan foydalanish juda qiyin. U juda ko'p parametrlarga ega va ularning qiymatlarining turli kombinatsiyasi juda xilma-xil kiritish-chiqarish ish yuklarini hosil qiladi. etcd uchun mos raqamlarni olish uchun siz WAL fayllarini yozishda fio dan test yozish yuki etcd dan haqiqiy yukga imkon qadar yaqin ekanligiga ishonch hosil qilishingiz kerak.

Shuning uchun, fio, hech bo'lmaganda, faylga ketma-ket yozishlar ko'rinishida yuk yaratishi kerak, har bir yozish tizim chaqiruvidan iborat bo'ladi. yozishkeyin fdatasync tizimi chaqiruvi. fio ga ketma-ket yozish uchun --rw=write opsiyasi talab qilinadi. Fio uchun yozish tizimi qo'ng'iroq qilish o'rniga yozish paytida foydalanish yozish, siz --ioengine=sync parametrini belgilashingiz kerak. Nihoyat, har bir yozishdan keyin fdatasync ni chaqirish uchun siz --fdatasync=1 parametrini qo'shishingiz kerak. Ushbu misoldagi qolgan ikkita variant (--size va -bs) skriptga xosdir. Keyingi bo'limda biz ularni qanday sozlashni ko'rsatamiz.

Nima uchun aynan fio va biz uni o'rnatishni qanday o'rgandik

Ushbu postda biz haqiqiy voqeani tasvirlaymiz. Bizda klaster bor Kubernetes v1.13, biz Prometey bilan kuzatdik. etcd v3.2.24 SSD-da joylashtirilgan. Etcd ko'rsatkichlari, hatto klaster hech narsa qilmasa ham, fdatasync kechikishlarini juda yuqori ko'rsatdi. Ko'rsatkichlar g'alati edi va biz ular nimani anglatishini bilmas edik. Klaster virtual mashinalardan iborat edi, muammo nimada ekanligini tushunish kerak edi: jismoniy SSD-larda yoki virtualizatsiya qatlamida. Bundan tashqari, biz tez-tez apparat va dasturiy ta'minot konfiguratsiyasiga o'zgartirishlar kiritdik va ularning natijalarini baholash usuli kerak edi. Biz etcd ni har bir konfiguratsiyada ishga tushirishimiz va Prometey ko'rsatkichlariga qarashimiz mumkin, ammo bu juda qiyin. Biz ma'lum bir konfiguratsiyani baholashning juda oddiy usulini qidirdik. Biz etcd dan Prometey ko'rsatkichlarini to'g'ri tushunganimizni tekshirmoqchi edik.

Ammo buning uchun ikkita muammoni hal qilish kerak edi. Birinchidan, WAL-ga yozishda etcd yaratadigan kiritish-chiqarish yuki qanday ko'rinishga ega? Qanday tizim chaqiruvlaridan foydalaniladi? Yozuvlarning hajmi qanday? Ikkinchidan, agar biz ushbu savollarga javob beradigan bo'lsak, xuddi shunday ish yukini fio bilan qanday ko'paytiramiz? Shuni unutmangki, fio juda ko'p imkoniyatlarga ega juda moslashuvchan vositadir. Biz ikkala muammoni bitta yondashuvda - buyruqlar yordamida hal qildik shunday и zo'riqish. lsof jarayon tomonidan ishlatiladigan barcha fayl identifikatorlari va ular bilan bog'liq fayllar ro'yxatini ko'rsatadi. Va strace yordamida siz allaqachon ishlayotgan jarayonni tekshirishingiz yoki jarayonni boshlashingiz va uni tekshirishingiz mumkin. strace tekshirilayotgan jarayondan barcha tizim chaqiruvlarini chop etadi (va uning asosiy jarayonlari). Ikkinchisi juda muhim, chunki etcd shunga o'xshash yondashuvni qo'llaydi.

Klasterda yuk bo'lmaganida biz Kubernetes uchun etcd serverini o'rganish uchun birinchi marta strace-dan foydalandik. Biz deyarli barcha WAL yozuvlari taxminan bir xil hajmda ekanligini ko'rdik: 2200–2400 bayt. Shuning uchun post boshidagi buyruqda -bs=2300 parametrini ko'rsatdik (bs har bir fio yozuvi uchun baytdagi o'lchamni bildiradi). E'tibor bering, etcd yozuvining o'lchami etcd versiyasiga, taqsimotiga, parametr qiymatlariga va hokazolarga bog'liq va fdatasync davomiyligiga ta'sir qiladi. Agar sizda shunga o'xshash stsenariy bo'lsa, aniq raqamlarni bilish uchun etcd jarayonlaringizni ko'rib chiqing.

Keyin etcd fayl tizimi nima qilayotgani haqida yaxshi tasavvurga ega bo'lish uchun biz uni strace va -ffttT opsiyalaridan boshladik. Shunday qilib, biz bolalar jarayonlarini tekshirishga va ularning har birining chiqishini alohida faylga yozishga harakat qildik, shuningdek, har bir tizim chaqiruvining boshlanishi va davomiyligi haqida batafsil hisobotlarni olishga harakat qildik. Biz strace chiqishi tahlilini tasdiqlash va qaysi fayl identifikatori qaysi maqsadda foydalanilganligini bilish uchun lsof dan foydalandik. Shunday qilib, strace yordamida yuqorida ko'rsatilgan natijalarga erishildi. Sinxronizatsiya vaqti statistikasi etcd dan wal_fsync_duration_seconds WAL fayl deskriptorlari bilan fdatasync qo'ng'iroqlariga mos kelishini tasdiqladi.

Biz fio uchun hujjatlarni ko'rib chiqdik va skriptimiz uchun variantlarni tanladik, shunda fio etcd ga o'xshash yuk hosil qiladi. Biz, shuningdek, etcd ga o'xshash strace dan fio ishga tushirish orqali tizim qo'ng'iroqlari va ularning davomiyligini tekshirdik.

Biz fio dan butun kiritish-chiqarish yukini ifodalash uchun --size parametrining qiymatini diqqat bilan tanladik. Bizning holatda, bu xotiraga yozilgan baytlarning umumiy soni. Bu yozish (va fdatasync) tizimi qo'ng'iroqlari soniga to'g'ridan-to'g'ri proportsional bo'lib chiqdi. Bs ning ma'lum bir qiymati uchun fdatasync qo'ng'iroqlari soni = hajmi/bs. Bizni foiz nisbati qiziqtirganligi sababli, ishonch hosil qilish uchun bizda yetarlicha namunalar bo‘lishi kerak edi va biz hisoblab chiqdikki, biz uchun 10^4 yetarli (bu 22 mebibayt). Agar --size kichikroq bo'lsa, chetlab o'tishlar paydo bo'lishi mumkin (masalan, bir nechta fdatasync qo'ng'iroqlari odatdagidan ko'proq vaqt oladi va 99-protsentilga ta'sir qiladi).

O'zingizni sinab ko'ring

Biz sizga fio-dan qanday foydalanishni ko'rsatdik va etcd yaxshi ishlashi uchun saqlash etarli darajada tez yoki yo'qligini bilib oldik. Endi siz, masalan, SSD xotirasi bo'lgan virtual mashinalar yordamida uni o'zingiz sinab ko'rishingiz mumkin IBM Cloud.

Manba: www.habr.com

a Izoh qo'shish