Ceph bilan band loyihalarda ishlash bo'yicha maslahatlar va fokuslar

Ceph bilan band loyihalarda ishlash bo'yicha maslahatlar va fokuslar

Ceph-dan turli xil yuklarga ega bo'lgan loyihalarda tarmoq xotirasi sifatida foydalanish, biz bir qarashda oddiy yoki ahamiyatsiz ko'rinmaydigan turli xil vazifalarga duch kelishimiz mumkin. Masalan:

  • yangi klasterdagi oldingi serverlardan qisman foydalangan holda ma'lumotlarni eski Ceph-dan yangisiga ko'chirish;
  • Ceph-da disk maydonini ajratish muammosini hal qilish.

Bunday muammolarni hal qilishda biz ma'lumotlarni yo'qotmasdan OSDni to'g'ri olib tashlash zarurati bilan duch kelamiz, bu katta hajmdagi ma'lumotlar bilan ishlashda ayniqsa muhimdir. Bu maqolada muhokama qilinadi.

Quyida tavsiflangan usullar Ceph ning har qanday versiyasiga tegishli. Bundan tashqari, Ceph katta hajmdagi ma'lumotlarni saqlashi mumkinligi hisobga olinadi: ma'lumotlar yo'qolishi va boshqa muammolarni oldini olish uchun ba'zi harakatlar bir nechta boshqalarga "bo'linadi".

OSD haqida so'zboshi

Ko'rib chiqilayotgan uchta retseptdan ikkitasi OSD ga bag'ishlanganligi sababli (Ob'ektni saqlash Daemon), amaliy qismga sho'ng'ishdan oldin - bu Cephda nima borligi va nima uchun bu juda muhimligi haqida qisqacha.

Avvalo, shuni aytish kerakki, butun Ceph klasteri ko'plab OSDlardan iborat. Qanchalik ko'p bo'lsa, Ceph-dagi bepul ma'lumotlar hajmi shunchalik katta bo'ladi. Bu erdan tushunish oson asosiy ekran funksiyasi: U Ceph ob'ekt ma'lumotlarini barcha klaster tugunlarining fayl tizimlarida saqlaydi va unga tarmoq kirishini ta'minlaydi (o'qish, yozish va boshqa so'rovlar uchun).

Xuddi shu darajada replikatsiya parametrlari ob'ektlarni turli OSDlar o'rtasida nusxalash orqali o'rnatiladi. Va bu erda siz turli xil muammolarga duch kelishingiz mumkin, ularning echimlari quyida muhokama qilinadi.

Ish β„– 1. Ma'lumotlarni yo'qotmasdan OSDni Ceph klasteridan xavfsiz olib tashlang

OSD-ni olib tashlash zarurati serverni klasterdan olib tashlashdan kelib chiqishi mumkin - masalan, uni boshqa server bilan almashtirish - bu biz bilan sodir bo'lgan voqea, bu maqolani yozishga sabab bo'ldi. Shunday qilib, manipulyatsiyaning yakuniy maqsadi ma'lum bir serverdagi barcha OSD va monslarni chiqarib tashlashdir, shunda uni to'xtatish mumkin.

Qulaylik va buyruqlarni bajarishda biz kerakli OSDni ko'rsatishda xatolikka yo'l qo'yadigan vaziyatni oldini olish uchun biz alohida o'zgaruvchini o'rnatamiz, uning qiymati o'chiriladigan OSD raqami bo'ladi. Keling, unga qo'ng'iroq qilaylik ${ID} β€” bu yerda va pastda, bunday o'zgaruvchi biz ishlayotgan OSD raqamini almashtiradi.

Ishni boshlashdan oldin shartni ko'rib chiqaylik:

root@hv-1 ~ # ceph osd tree
ID CLASS WEIGHT  TYPE NAME      STATUS REWEIGHT PRI-AFF
-1       0.46857 root default
-3       0.15619      host hv-1
-5       0.15619      host hv-2
 1   ssd 0.15619      osd.1     up     1.00000  1.00000
-7       0.15619      host hv-3
 2   ssd 0.15619      osd.2     up     1.00000  1.00000

OSDni olib tashlashni boshlash uchun siz muammosiz bajarishingiz kerak reweight unda nolga. Shunday qilib, biz ekrandagi ma'lumotlar miqdorini boshqa OSDlar bilan muvozanatlash orqali kamaytiramiz. Buning uchun quyidagi buyruqlarni bajaring:

ceph osd reweight osd.${ID} 0.98
ceph osd reweight osd.${ID} 0.88
ceph osd reweight osd.${ID} 0.78

... va hokazo nolga qadar.

Silliq muvozanat talab qilinadima'lumotlarni yo'qotmaslik uchun. Bu, ayniqsa, agar OSD katta hajmdagi ma'lumotlarni o'z ichiga olgan bo'lsa, to'g'ri keladi. Buyruqlarni bajargandan so'ng ishonch hosil qilish uchun reweight hamma narsa yaxshi o'tdi, siz uni to'ldirishingiz mumkin ceph -s yoki alohida terminal oynasida ishga tushirish ceph -w real vaqtda o'zgarishlarni kuzatish uchun.

OSD "bo'shatilgan" bo'lsa, uni olib tashlash uchun standart operatsiyani davom ettirishingiz mumkin. Buning uchun kerakli OSD ni davlatga o'tkazing down:

ceph osd down osd.${ID}

Keling, OSD-ni klasterdan "tortib olaylik":

ceph osd out osd.${ID}

Keling, OSD xizmatini to'xtatamiz va uning FSdagi bo'limini ajratamiz:

systemctl stop ceph-osd@${ID}
umount /var/lib/ceph/osd/ceph-${ID}

OSD ni oβ€˜chirib tashlang CRUSH xaritasi:

ceph osd crush remove osd.${ID}

OSD foydalanuvchisini oΚ»chirib tashlaymiz:

ceph auth del osd.${ID}

Va nihoyat, keling, OSD-ning o'zini olib tashlaymiz:

ceph osd rm osd.${ID}

nota: Agar siz Ceph Luminous yoki undan yuqori versiyadan foydalanayotgan bo'lsangiz, yuqoridagi ekran ekranini o'chirish bosqichlarini ikkita buyruqqa qisqartirish mumkin:

ceph osd out osd.${ID}
ceph osd purge osd.${ID}

Agar yuqorida tavsiflangan amallarni bajarganingizdan so'ng, siz buyruqni bajarsangiz ceph osd tree, keyin ish bajarilgan serverda yuqoridagi operatsiyalar bajarilgan OSDlar yo'qligi aniq bo'lishi kerak:

root@hv-1 ~ # ceph osd tree
ID CLASS WEIGHT  TYPE NAME     STATUS REWEIGHT PRI-AFF
-1       0.46857      root default
-3       0.15619      host hv-1
-5       0.15619      host hv-2
-7       0.15619      host hv-3
 2   ssd 0.15619      osd.2    up     1.00000  1.00000

Yo'l davomida, Ceph klasterining holatiga e'tibor bering HEALTH_WARN, va biz shuningdek, OSD sonining va mavjud disk maydonining kamayishini ko'ramiz.

Agar siz serverni to'liq to'xtatmoqchi bo'lsangiz va shunga mos ravishda uni Ceph-dan olib tashlamoqchi bo'lsangiz, quyida talab qilinadigan qadamlar tasvirlanadi. Bunday holda, buni yodda tutish muhimdir Serverni o'chirishdan oldin barcha OSD'larni olib tashlashingiz kerak ushbu serverda.

Agar ushbu serverda boshqa OSDlar qolmasa, ularni olib tashlaganingizdan so'ng serverni OSD xaritasidan chiqarib tashlashingiz kerak. hv-2quyidagi buyruqni ishga tushirish orqali:

ceph osd crush rm hv-2

O'chir mon serverdan hv-2quyidagi buyruqni boshqa serverda ishga tushirish orqali (ya'ni, bu holda, on hv-1):

ceph-deploy mon destroy hv-2

Shundan so'ng siz serverni to'xtatib, keyingi harakatlarni boshlashingiz mumkin (uni qayta joylashtirish va h.k.).

Ish β„– 2. Yaratilgan Ceph klasterida disk maydonini taqsimlash

Men ikkinchi hikoyani PG haqidagi so'zboshi bilan boshlayman (Joylashtirish guruhlari). Ceph-da PG ning asosiy roli birinchi navbatda Ceph ob'ektlarini yig'ish va ularni OSDda ko'paytirishdir. Kerakli PG miqdorini hisoblashingiz mumkin bo'lgan formula mavjud tegishli bo'lim Ceph hujjatlari. Bu masala ham u yerda aniq misollar bilan muhokama qilinadi.

Shunday qilib: Ceph-dan foydalanishda keng tarqalgan muammolardan biri bu Ceph-dagi hovuzlar orasidagi muvozanatsiz OSD va PG soni.

Birinchidan, shuning uchun kichik hovuzda juda ko'p PG ko'rsatilganda vaziyat yuzaga kelishi mumkin, bu klasterdagi disk maydonidan asossiz foydalanishdir. Ikkinchidan, amalda jiddiyroq muammo bor: OSDlardan birida ma'lumotlarning to'lib ketishi. Bu klasterning davlatga birinchi o'tishini talab qiladi HEALTH_WARN, undan keyin HEALTH_ERR. Buning sababi shundaki, Ceph, mavjud ma'lumotlar miqdorini hisoblashda (siz buni bilib olishingiz mumkin MAX AVAIL buyruq chiqishida ceph df har bir hovuz uchun alohida) OSDdagi mavjud ma'lumotlar miqdoriga asoslanadi. Agar kamida bitta OSDda etarli joy bo'lmasa, ma'lumotlar barcha OSDlar o'rtasida to'g'ri taqsimlanmaguncha boshqa ma'lumotlarni yozib bo'lmaydi.

Bu muammolarga aniqlik kiritishga arziydi asosan Ceph klasterini konfiguratsiya bosqichida hal qilinadi. Siz foydalanishingiz mumkin bo'lgan vositalardan biri Ceph PGCalc. Uning yordami bilan kerakli PG miqdori aniq hisoblab chiqiladi. Biroq, siz Ceph klasteri bo'lgan vaziyatda ham murojaat qilishingiz mumkin allaqachon noto'g'ri sozlangan. Bu erda aniqlik kiritish kerakki, tuzatish ishlarining bir qismi sifatida siz PG sonini kamaytirishingiz kerak bo'ladi va bu xususiyat Cephning eski versiyalarida mavjud emas (u faqat versiyada paydo bo'lgan). Nautilus).

Shunday qilib, keling, quyidagi rasmni tasavvur qilaylik: klaster maqomga ega HEALTH_WARN OSD dan birida bo'sh joy tugashi tufayli. Bu xato bilan ko'rsatiladi HEALTH_WARN: 1 near full osd. Quyida ushbu vaziyatdan chiqish algoritmi keltirilgan.

Avvalo, mavjud ma'lumotlarni qolgan OSDlar o'rtasida taqsimlashingiz kerak. Biz tugunni "to'kib tashlaganimizda" birinchi holatda shunga o'xshash operatsiyani bajargan edik - yagona farq shundaki, endi biz biroz qisqartirishimiz kerak. reweight. Masalan, 0.95 gacha:

ceph osd reweight osd.${ID} 0.95

Bu OSDda diskda bo'sh joyni bo'shatadi va seph salomatligidagi xatoni tuzatadi. Biroq, yuqorida aytib o'tilganidek, bu muammo, asosan, dastlabki bosqichlarda Cephning noto'g'ri konfiguratsiyasi tufayli yuzaga keladi: kelajakda paydo bo'lmasligi uchun qayta konfiguratsiya qilish juda muhimdir.

Bizning alohida holatda, hammasi quyidagicha bo'ldi:

  • qiymati juda yuqori replication_count basseynlardan birida,
  • bir hovuzda juda ko'p PG, boshqasida juda kam.

Keling, yuqorida aytib o'tilgan kalkulyatordan foydalanamiz. U nimani kiritish kerakligini aniq ko'rsatib beradi va printsipial jihatdan hech qanday murakkab narsa yo'q. Kerakli parametrlarni o'rnatib, biz quyidagi tavsiyalarni olamiz:

nota: Agar siz Ceph klasterini noldan o'rnatayotgan bo'lsangiz, kalkulyatorning yana bir foydali funktsiyasi - bu jadvalda ko'rsatilgan parametrlar bilan noldan hovuzlar yaratadigan buyruqlar yaratish.

Oxirgi ustun navigatsiya qilishga yordam beradi - Tavsiya etilgan PG soni. Bizning holatda, ikkinchisi ham foydali, bu erda replikatsiya parametri ko'rsatilgan, chunki biz replikatsiya multiplikatorini o'zgartirishga qaror qildik.

Shunday qilib, avval siz replikatsiya parametrlarini o'zgartirishingiz kerak - bu birinchi navbatda bajarishga arziydi, chunki multiplikatorni kamaytirish orqali biz diskda bo'sh joyni bo'shatamiz. Buyruq bajarilganda, mavjud disk maydoni ko'payishini sezasiz:

ceph osd pool $pool_name set $replication_size

Va u tugagandan so'ng biz parametr qiymatlarini o'zgartiramiz pg_num ΠΈ pgp_num quyida bayon qilinganidek:

ceph osd pool set $pool_name pg_num $pg_number
ceph osd pool set $pool_name pgp_num $pg_number

Muhim: biz har bir hovuzdagi PG sonini ketma-ket o'zgartirishimiz kerak va ogohlantirishlar yo'qolguncha boshqa hovuzlardagi qiymatlarni o'zgartirmasligimiz kerak. "Ma'lumotlarning kamayishi" ΠΈ "n-pastlangan sahifalar soni".

Bundan tashqari, buyruq chiqishlari yordamida hamma narsa yaxshi ekanligini tekshirishingiz mumkin ceph health detail ΠΈ ceph -s.

Ish β„– 3. Virtual mashinani LVM dan Ceph RBD ga ko'chirish

Loyiha ijaraga olingan yalang'och serverlarda o'rnatilgan virtual mashinalardan foydalanadigan vaziyatda ko'pincha xatolarga chidamli saqlash muammosi paydo bo'ladi. Bundan tashqari, bu saqlash joyida etarli joy mavjudligi juda ma'qul ... Yana bir keng tarqalgan holat: serverda mahalliy xotiraga ega virtual mashina mavjud va siz diskni kengaytirishingiz kerak, lekin boradigan joy yo'q, chunki u erda serverda bo'sh disk maydoni.

Muammoni turli yo'llar bilan hal qilish mumkin - masalan, boshqa serverga o'tish (agar mavjud bo'lsa) yoki serverga yangi disklar qo'shish. Ammo buni qilish har doim ham mumkin emas, shuning uchun LVM dan Cephga ko'chib o'tish bu muammoning ajoyib echimi bo'lishi mumkin. Ushbu parametrni tanlash orqali biz serverlar o'rtasidagi keyingi ko'chirish jarayonini ham soddalashtiramiz, chunki mahalliy xotirani bitta gipervisordan boshqasiga o'tkazishga hojat qolmaydi. Yagona narsa shundaki, ish olib borilayotganda siz VMni to'xtatishingiz kerak bo'ladi.

Quyidagi retseptdan olingan ushbu blogdagi maqola, ko'rsatmalari amalda sinovdan o'tgan. Aytmoqchi, muammosiz ko'chish usuli ham u erda tasvirlangan, ammo bizning holatlarimizda bu shunchaki kerak emas edi, shuning uchun biz buni tekshirmadik. Agar bu sizning loyihangiz uchun juda muhim bo'lsa, sharhlarda natijalar haqida eshitishdan xursand bo'lamiz.

Keling, amaliy qismga o'tamiz. Misolda biz virsh va shunga mos ravishda libvirt dan foydalanamiz. Birinchidan, ma'lumotlar ko'chiradigan Ceph hovuzi libvirtga ulanganligiga ishonch hosil qiling:

virsh pool-dumpxml $ceph_pool

Hovuz tavsifi avtorizatsiya ma'lumotlari bilan Cephga ulanish ma'lumotlarini o'z ichiga olishi kerak.

Keyingi qadam, LVM tasvirining Ceph RBD ga aylantirilishidir. Bajarish vaqti birinchi navbatda tasvir hajmiga bog'liq:

qemu-img convert -p -O rbd /dev/main/$vm_image_name rbd:$ceph_pool/$vm_image_name

Konvertatsiyadan so'ng LVM tasviri qoladi, bu VM ni RBD ga ko'chirish muvaffaqiyatsiz tugasa va siz o'zgarishlarni orqaga qaytarishingiz kerak bo'lsa foydali bo'ladi. Shuningdek, o'zgarishlarni tezda orqaga qaytarish uchun virtual mashina konfiguratsiya faylining zaxira nusxasini yarataylik:

virsh dumpxml $vm_name > $vm_name.xml
cp $vm_name.xml $vm_name_backup.xml

... va asl nusxasini tahrirlang (vm_name.xml). Disk tavsifi bilan blokni topamiz (chiziqdan boshlanadi <disk type='file' device='disk'> va bilan tugaydi </disk>) va uni quyidagi shaklga qisqartiring:

<disk type='network' device='disk'>
<driver name='qemu'/>
<auth username='libvirt'>
  <secret type='ceph' uuid='sec-ret-uu-id'/>
 </auth>
<source protocol='rbd' name='$ceph_pool/$vm_image_name>
  <host name='10.0.0.1' port='6789'/>
  <host name='10.0.0.2' port='6789'/>
</source>
<target dev='vda' bus='virtio'/> 
<alias name='virtio-disk0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</disk>

Keling, ba'zi tafsilotlarni ko'rib chiqaylik:

  1. Protokol uchun source Ceph RBD-dagi saqlash manzili ko'rsatilgan (bu birinchi bosqichda aniqlangan Ceph hovuzining nomi va RBD tasvirini ko'rsatadigan manzil).
  2. Blokda secret turi ko'rsatilgan ceph, shuningdek, unga ulanish uchun sirning UUID-si. Uning uuid-ni buyruq yordamida topish mumkin virsh secret-list.
  3. Blokda host Ceph monitorlariga manzillar ko'rsatilgan.

Konfiguratsiya faylini tahrirlash va LVM-ni RBDga aylantirishni tugatgandan so'ng, siz o'zgartirilgan konfiguratsiya faylini qo'llashingiz va virtual mashinani ishga tushirishingiz mumkin:

virsh define $vm_name.xml
virsh start $vm_name

Virtual mashinaning to'g'ri ishga tushirilganligini tekshirish vaqti keldi: siz, masalan, SSH orqali yoki unga ulanish orqali bilib olishingiz mumkin. virsh.

Agar virtual mashina to'g'ri ishlayotgan bo'lsa va boshqa muammolar topilmasa, endi ishlatilmaydigan LVM tasvirini o'chirishingiz mumkin:

lvremove main/$vm_image_name

xulosa

Biz ta'riflangan barcha holatlarga amalda duch keldik - umid qilamizki, ko'rsatmalar boshqa ma'murlarga shunga o'xshash muammolarni hal qilishga yordam beradi. Agar Ceph-dan foydalanish tajribangiz bo'yicha sharhlaringiz yoki boshqa shunga o'xshash voqealaringiz bo'lsa, biz ularni sharhlarda ko'rishdan xursand bo'lamiz!

PS

Shuningdek, bizning blogimizda o'qing:

Manba: www.habr.com

a Izoh qo'shish