Tip & trik pikeun gawé bareng Ceph dina proyék sibuk

Tip & trik pikeun gawé bareng Ceph dina proyék sibuk

Ngagunakeun Ceph salaku panyimpen jaringan dina proyék-proyék kalayan beban anu béda-béda, urang tiasa mendakan rupa-rupa pancén anu saheulaanan sigana henteu saderhana atanapi sepele. Salaku conto:

  • migrasi data ti Ceph heubeul ka nu anyar kalawan parsial pamakéan server saméméhna dina klaster anyar;
  • solusi pikeun masalah alokasi spasi disk di Ceph.

Ngungkulan masalah sapertos kitu, urang disanghareupan kabutuhan pikeun ngahapus OSD anu leres tanpa kaleungitan data, anu penting pisan nalika ngurus data anu ageung. Ieu bakal dibahas dina artikel.

Métode anu dijelaskeun di handap ieu relevan pikeun sagala vérsi Ceph. Salaku tambahan, kanyataan yén Ceph tiasa nyimpen data anu ageung bakal dipertimbangkeun: pikeun nyegah leungitna data sareng masalah sanésna, sababaraha tindakan bakal "dibagi" kana sababaraha anu sanés.

Mukadimah ngeunaan OSD

Kusabab dua tina tilu resep anu dibahas dikhususkeun pikeun OSD (Objék Panyimpenan Daemon), sateuacan nyilem kana bagian praktis - sakedap ngeunaan naon anu aya di Ceph sareng naha éta penting pisan.

Anu mimiti, éta kudu ngomong yén sakabéh klaster Ceph diwangun ku loba OSDs. Langkung seueur, langkung ageung volume data gratis di Ceph. Ieu gampang ngartos ti dieu fungsi OSD utama: Ieu nyimpen data objék Ceph dina sistem file sadaya titik klaster jeung nyadiakeun aksés jaringan ka dinya (pikeun maca, nulis, jeung requests séjén).

Dina tingkat nu sarua, parameter réplikasi diatur ku nyalin objék antara OSDs béda. Sareng di dieu anjeun tiasa mendakan sababaraha masalah, solusi anu bakal dibahas di handap ieu.

Kasus No.1. Cabut OSD aman tina klaster Ceph tanpa kaleungitan data

Kabutuhan pikeun miceun OSD bisa jadi dibalukarkeun ku nyoplokkeun server ti kluster - contona, pikeun ngaganti eta kalawan server sejen - nu naon anu lumangsung nepi ka urang, ngabalukarkeun tulisan artikel ieu. Ku kituna, tujuan pamungkas manipulasi téh nimba sagala OSDs na mons on server dibikeun meh bisa dieureunkeun.

Pikeun genah sareng ngahindarkeun kaayaan dimana, nalika ngalaksanakeun paréntah, urang ngalakukeun kasalahan dina nunjukkeun OSD anu diperyogikeun, kami bakal nyetél variabel anu misah, anu nilaina nyaéta jumlah OSD anu bakal dihapus. Hayu urang nelepon manehna ${ID} — di dieu sareng di handap, variabel sapertos ngagentos jumlah OSD anu kami damel.

Hayu urang tingali kaayaan sateuacan ngamimitian damel:

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

Pikeun ngamimitian panyabutan OSD, anjeun kedah lancar ngalaksanakeun reweight kana éta nol. Ku cara kieu urang ngurangan jumlah data dina OSD ku kasaimbangan ka OSDs séjén. Jang ngalampahkeun ieu, ngajalankeun paréntah di handap ieu:

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

... jeung saterusna nepi ka nol.

Balancing lemes diperlukeunsangkan teu leungit data. Ieu hususna leres lamun OSD ngandung jumlah badag data. Pikeun mastikeun yén sanggeus executing paréntah reweight sagalana indit ogé, anjeun tiasa ngalengkepan eta ceph -s atawa dina ngajalankeun jandela terminal misah ceph -w pikeun niténan parobahan sacara real waktos.

Nalika OSD "dikosongkeun", anjeun tiasa neraskeun operasi standar pikeun ngaleupaskeun. Jang ngalampahkeun ieu, mindahkeun OSD dipikahoyong kana kaayaan down:

ceph osd down osd.${ID}

Hayu urang "tarik" OSD kaluar tina klaster:

ceph osd out osd.${ID}

Hayu urang ngeureunkeun jasa OSD sareng cabut partisi na di FS:

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

Cabut OSD tina peta CRUSH:

ceph osd crush remove osd.${ID}

Hayu urang ngahapus pangguna OSD:

ceph auth del osd.${ID}

Sarta pamustunganana, hayu urang cabut OSD sorangan:

ceph osd rm osd.${ID}

nyarios: Upami Anjeun keur make versi Ceph Luminous atawa nu leuwih luhur, léngkah panyabutan OSD di luhur bisa diréduksi jadi dua paréntah:

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

Upami, saatos ngalengkepan léngkah-léngkah anu dijelaskeun di luhur, anjeun ngajalankeun paréntah ceph osd tree, teras kedah écés yén dina pangladén dimana pagawéan dilaksanakeun teu aya deui OSD anu ngalaksanakeun operasi di luhur:

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

Sapanjang jalan, dicatet yén kaayaan klaster Ceph bakal balik ka HEALTH_WARN, sarta kami ogé bakal ningali panurunan dina jumlah OSDs sarta jumlah spasi disk sadia.

Di handap ieu bakal ngajelaskeun léngkah-léngkah anu bakal diperyogikeun upami anjeun hoyong ngeureunkeun lengkep server sareng, sasuai, dipiceun tina Ceph. Dina hal ieu, hal anu penting pikeun nginget éta Sateuacan mareuman server, anjeun kedah ngahapus sadaya OSD dina server ieu.

Upami teu aya deui OSD anu tinggaleun dina server ieu, maka saatos ngahapus aranjeunna anjeun kedah ngaluarkeun server tina peta OSD. hv-2ku ngajalankeun paréntah di handap ieu:

ceph osd crush rm hv-2

Mupus mon ti server hv-2ku ngajalankeun paréntah di handap dina server sejen (ie dina hal ieu, on hv-1):

ceph-deploy mon destroy hv-2

Saatos ieu, anjeun tiasa ngeureunkeun server sareng ngawitan tindakan anu salajengna (deui nyebarkeun éta, jsb.).

Kasus No.2. Distribusi spasi disk dina klaster Ceph geus dijieun

Kuring bakal ngamimitian carita kadua ku mukadimah ngeunaan PG (Grup panempatan). Peran utama PG di Ceph utamana pikeun agrégat objék Ceph sarta salajengna ngayakeun réplikasi aranjeunna dina OSD. Rumus anu anjeun tiasa ngitung jumlah PG anu diperyogikeun aya bagian relevan dokuméntasi Ceph. Masalah ieu ogé dibahas di dinya sareng conto khusus.

Janten: salah sahiji masalah anu umum nalika nganggo Ceph nyaéta jumlah henteu saimbang OSD sareng PG antara pools di Ceph.

Firstly, kusabab ieu, kaayaan bisa timbul nalika loba teuing PGs dieusian dina kolam renang leutik, nu dasarna mangrupa pamakéan irasional spasi disk dina kluster. Bréh, dina prakna aya masalah leuwih serius: data mudal dina salah sahiji OSDs. Ieu merlukeun klaster mimiti transisi ka nagara HEALTH_WARN, teras salajengna HEALTH_ERR. Alesan pikeun ieu nyaéta Ceph, nalika ngitung jumlah data anu sayogi (anjeun tiasa mendakanana ku MAX AVAIL dina kaluaran paréntah ceph df pikeun tiap kolam renang misah) dumasar kana jumlah data sadia dina OSD. Lamun teu cukup spasi dina sahanteuna hiji OSD, euweuh deui data bisa ditulis nepi ka data bener disebarkeun diantara sakabeh OSDs.

Eta sia clarifying yén masalah ieu anu sakitu legana mutuskeun dina tahap konfigurasi klaster Ceph. Salah sahiji alat anu anjeun tiasa dianggo nyaéta Ceph PGCalc. Kalayan bantosanana, jumlah PG anu diperyogikeun jelas diitung. Najan kitu, anjeun ogé tiasa Resort ka eta dina kaayaan dimana klaster Ceph enggeus ngonpigurasi salah. Perlu dijelaskeun di dieu yén salaku bagian tina perbaikan anjeun paling dipikaresep kedah ngirangan jumlah PG, sareng fitur ieu henteu sayogi dina versi Ceph anu langkung lami (ngan ukur muncul dina versi. nautilus).

Ku kituna, hayu urang ngabayangkeun gambar di handap ieu: klaster boga status HEALTH_WARN alatan salah sahiji OSD kaluar tina spasi. Ieu bakal dituduhkeun ku kasalahan HEALTH_WARN: 1 near full osd. Di handap ieu algoritma pikeun kaluar tina kaayaan ieu.

Anu mimiti, Anjeun kudu ngadistribusikaeun data sadia antara OSDs sésana. Kami parantos ngalaksanakeun operasi anu sami dina kasus anu munggaran, nalika urang "ngalemeskeun" titik - ngan ukur bédana anu ayeuna urang kedah rada ngirangan. reweight. Contona, nepi ka 0.95:

ceph osd reweight osd.${ID} 0.95

Ieu ngabebaskeun rohangan disk dina OSD sareng ngalereskeun kasalahan dina kaséhatan ceph. Sanajan kitu, sakumaha geus disebutkeun, masalah ieu utamana lumangsung alatan konfigurasi lepat tina Ceph dina tahap awal: hal anu penting pikeun nyieun reconfiguration a supados teu muncul dina mangsa nu bakal datang.

Dina kasus khusus urang, éta sadayana turun ka:

  • nilai teuing tinggi replication_count di salah sahiji kolam renang,
  • teuing PG dina hiji kolam renang na teuing saeutik di sejen.

Hayu urang nganggo kalkulator anu parantos disebatkeun. Éta jelas nunjukkeun naon anu kedah dilebetkeun sareng, prinsipna, teu aya anu rumit. Saatos nyetél parameter anu diperyogikeun, kami nampi saran ieu:

nyarios: Upami Anjeun keur nyetel hiji klaster Ceph ti scratch, fungsi sejen mangpaat kalkulator nyaéta generasi paréntah anu bakal nyieun pools ti scratch jeung parameter dieusian dina tabél.

Kolom terakhir ngabantosan anjeun nganapigasi - Disarankeun PG Count. Dina kasus urang, anu kadua ogé mangpaat, dimana parameter réplikasi dituduhkeun, sabab urang mutuskeun pikeun ngarobah multiplier réplikasi.

Janten, mimitina anjeun kedah ngarobih parameter réplikasi - ieu kedah dilakukeun heula, sabab ku ngirangan multiplier, urang bakal ngosongkeun rohangan disk. Nalika paréntah dieksekusi, anjeun bakal perhatikeun yén rohangan disk anu sayogi bakal ningkat:

ceph osd pool $pool_name set $replication_size

Sareng saatos parantosan, urang ngarobih nilai parameter pg_num и pgp_num saperti kieu:

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

penting: urang kedah ngarobih jumlah PG sacara berurutan dina unggal kolam renang sareng henteu ngarobih nilai-nilai dina kolam renang sanés dugi ka peringatan ngaleungit "Data redundansi didegradasi" и "n-jumlah pgs didegradasi".

Anjeun oge bisa pariksa yen sagalana jalan ogé ngagunakeun kaluaran paréntah ceph health detail и ceph -s.

Kasus No.3. Migrasi mesin virtual tina LVM ka Ceph RBD

Dina kaayaan dimana hiji proyék ngagunakeun mesin virtual dipasang dina server bare-logam disewa, masalah gudang lepat-toleran mindeng timbul. Éta ogé pisan desirable yén aya cukup spasi dina gudang ieu ... kaayaan umum sejen: aya mesin virtual kalawan gudang lokal dina server jeung anjeun kudu dilegakeun disk, tapi aya nowhere mun balik, sabab teu aya. spasi disk bébas ditinggalkeun dina server.

Masalahna tiasa direngsekeun ku sababaraha cara - contona, ku migrasi ka server anu sanés (upami aya) atanapi nambihan disk énggal ka server. Tapi teu salawasna mungkin mun ngalakukeun ieu, jadi migrasi ti LVM ka Ceph bisa jadi hiji solusi alus teuing pikeun masalah ieu. Ku milih pilihan ieu, urang ogé simplify prosés salajengna migrasi antara server, saprak aya moal kudu mindahkeun gudang lokal ti hiji hypervisor ka nu sejen. Hijina nyekel éta anjeun bakal kudu eureun VM bari karya keur dilumangsungkeun.

Resep handap dicokot tina artikel ti blog ieu, parentah nu geus diuji dina aksi. Ngomong-ngomong, métode migrasi repot-gratis ogé digambarkeun aya, kumaha oge, dina hal urang ieu ngan saukur teu diperlukeun, jadi urang teu pariksa deui. Upami ieu penting pikeun proyék anjeun, kami bakal bungah ngadangu ngeunaan hasil dina koméntar.

Hayu urang ngaléngkah ka bagian praktis. Dina conto kami nganggo virsh sareng, sasuai, libvirt. Kahiji, pastikeun yén kolam renang Ceph nu data bakal hijrah disambungkeun ka libvirt:

virsh pool-dumpxml $ceph_pool

Pedaran kolam renang kedah ngandung data sambungan kana Ceph kalawan data otorisasina.

Lengkah saterusna nyaeta gambar LVM dirobah jadi Ceph RBD. Waktu palaksanaan utamana gumantung kana ukuran gambar:

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

Saatos konvérsi, gambar LVM bakal tetep, anu bakal mangpaat upami migrasi VM ka RBD gagal sareng anjeun kedah ngagulung deui parobihan. Ogé, pikeun gancang ngagulung deui parobihan, hayu urang ngadamel cadangan file konfigurasi mesin virtual:

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

... jeung édit aslina (vm_name.xml). Hayu urang milarian blok kalayan pedaran disk (dimimitian ku garis <disk type='file' device='disk'> sarta ditungtungan make </disk>) sareng ngirangan kana bentuk ieu:

<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>

Hayu urang nempo sababaraha rinci:

  1. Pikeun protokol source alamat ka gudang di Ceph RBD dituduhkeun (ieu alamat nunjukkeun nami kolam renang Ceph jeung gambar RBD, nu ditangtukeun dina tahap kahiji).
  2. Dina blok secret tipe dituduhkeun ceph, kitu ogé UUID tina rusiah pikeun nyambung ka dinya. uuid na tiasa dipendakan nganggo paréntah virsh secret-list.
  3. Dina blok host alamat ka monitor Ceph dituduhkeun.

Saatos ngédit file konfigurasi sareng ngalengkepan konversi LVM kana RBD, anjeun tiasa nerapkeun file konfigurasi anu dirobih sareng ngamimitian mesin virtual:

virsh define $vm_name.xml
virsh start $vm_name

Waktosna pikeun pariksa yén mesin virtual ngamimitian leres: anjeun tiasa terang, contona, ku cara ngahubungkeun éta via SSH atanapi via virsh.

Upami mesin virtual berpungsi leres sareng anjeun henteu mendakan masalah anu sanés, maka anjeun tiasa ngahapus gambar LVM anu henteu dianggo deui:

lvremove main/$vm_image_name

kacindekan

Kami mendakan sadaya kasus anu dijelaskeun dina prakna - kami ngarepkeun petunjuk bakal ngabantosan pangurus anu sanés ngabéréskeun masalah anu sami. Upami anjeun gaduh koméntar atanapi carita anu sami tina pangalaman anjeun nganggo Ceph, kami bakal bungah ningali éta dina koméntar!

PS

Baca ogé dina blog urang:

sumber: www.habr.com

Tambahkeun komentar