Tip & trik kanggo nggarap Ceph ing proyek sing sibuk

Tip & trik kanggo nggarap Ceph ing proyek sing sibuk

Nggunakake Ceph minangka panyimpenan jaringan ing proyek kanthi macem-macem beban, kita bisa nemoni macem-macem tugas sing sepisanan ora katon prasaja utawa ora pati penting. Tuladhane:

  • migrasi data saka Ceph lawas menyang anyar kanthi nggunakake sebagean saka server sadurungé ing kluster anyar;
  • solusi kanggo masalah alokasi spasi disk ing Ceph.

Nangani masalah kasebut, kita kudu ngilangi OSD kanthi bener tanpa kelangan data, sing penting banget nalika nangani data sing akeh. Iki bakal dibahas ing artikel kasebut.

Cara sing diterangake ing ngisor iki cocog kanggo versi Ceph apa wae. Kajaba iku, kasunyatan manawa Ceph bisa nyimpen data sing akeh bakal dianggep: kanggo nyegah mundhut data lan masalah liyane, sawetara tumindak bakal "dibagi" dadi sawetara liyane.

Pambuka babagan OSD

Wiwit loro saka telung resep sing dibahas dikhususake kanggo OSD (Daemon Panyimpenan Obyek), sadurunge nyilem menyang bagean praktis - sedhela babagan apa sing ana ing Ceph lan kenapa penting banget.

Kaping pisanan, kudu dikandhakake manawa kabeh klompok Ceph kalebu akeh OSD. Sing luwih akeh, luwih akeh volume data gratis ing Ceph. Iku gampang dingerteni saka kene fungsi utama OSD: Iki nyimpen data obyek Ceph ing sistem file kabeh kelenjar kluster lan menehi akses jaringan menyang (kanggo maca, nulis, lan panjalukan liyane).

Ing tingkat sing padha, paramèter replikasi disetel kanthi nyalin obyek ing antarane OSD sing beda. Lan ing kene sampeyan bisa nemoni macem-macem masalah, solusi sing bakal dibahas ing ngisor iki.

Kasus No.1. Mbusak OSD saka klompok Ceph kanthi aman tanpa kelangan data

Perlu kanggo mbusak OSD bisa disebabake njabut server saka kluster - contone, kanggo ngganti karo server liyane - kang kedaden kanggo kita, menehi munggah kanggo nulis artikel iki. Mangkono, goal pokok saka manipulasi kanggo extract kabeh OSDs lan mons ing server diwenehi supaya bisa mandegake.

Kanggo penak lan supaya kahanan ing ngendi, nalika nglakokaké printah, kita nggawe kesalahan ing nuduhake OSD dibutuhake, kita bakal nyetel variabel kapisah, Nilai kang bakal nomer OSD bakal dibusak. Ayo nelpon dheweke ${ID} - ing kene lan ing ngisor iki, variabel kasebut ngganti nomer OSD sing digunakake.

Ayo ndeleng kahanan sadurunge miwiti karya:

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

Kanggo miwiti mbusak OSD, sampeyan kudu nindakake kanthi lancar reweight ing nol. Kanthi cara iki, kita nyuda jumlah data ing OSD kanthi ngimbangi menyang OSD liyane. Kanggo nindakake iki, jalanake printah ing ngisor iki:

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

... lan sateruse nganti nul.

Wawas Gamelan dibutuhakesupaya ora ilang data. Iki utamané bener yen OSD ngemot jumlah gedhe saka data. Kanggo mesthekake yen sawise nglakokake printah reweight kabeh mlaku kanthi apik, sampeyan bisa ngrampungake ceph -s utawa ing mbukak jendhela terminal kapisah ceph -w kanggo mirsani owah-owahan ing wektu nyata.

Nalika OSD "kosong", sampeyan bisa nerusake operasi standar kanggo nyopot. Kanggo nindakake iki, transfer OSD sing dikarepake menyang negara down:

ceph osd down osd.${ID}

Ayo "narik" OSD metu saka kluster:

ceph osd out osd.${ID}

Ayo mungkasi layanan OSD lan copot partisi ing FS:

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

Mbusak OSD saka peta CRUSH:

ceph osd crush remove osd.${ID}

Ayo mbusak pangguna OSD:

ceph auth del osd.${ID}

Lan pungkasane, ayo mbusak OSD dhewe:

ceph osd rm osd.${ID}

komentar: Yen sampeyan nggunakake versi Ceph Luminous utawa sing luwih dhuwur, langkah-langkah mbusak OSD ing ndhuwur bisa dikurangi dadi rong perintah:

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

Yen, sawise ngrampungake langkah-langkah kasebut ing ndhuwur, sampeyan mbukak printah kasebut ceph osd tree, mula kudu jelas manawa ing server sing ditindakake pakaryan ora ana maneh OSD sing ditindakake ing ndhuwur:

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

Sadawane dalan, Wigati sing negara cluster Ceph bakal pindhah menyang HEALTH_WARN, lan kita uga bakal weruh nyuda ing jumlah OSD lan jumlah papan disk sing kasedhiya.

Ing ngisor iki bakal njlèntrèhaké langkah-langkah sing bakal dibutuhake yen sampeyan pengin mungkasi server lan, kanthi mangkono, mbusak saka Ceph. Ing kasus iki, iku penting kanggo elinga Sadurunge mateni server, sampeyan kudu mbusak kabeh OSD ing server iki.

Yen ora ana maneh OSD ing server iki, banjur sawise ngilangi, sampeyan kudu ngilangi server saka peta OSD. hv-2kanthi mbukak printah ing ngisor iki:

ceph osd crush rm hv-2

Mbusak mon saka server hv-2kanthi mbukak printah ing ngisor iki ing server liyane (yaiku, ing hv-1):

ceph-deploy mon destroy hv-2

Sawise iki, sampeyan bisa mungkasi server lan miwiti tumindak sakteruse (re-deploying, etc.).

Kasus No. 2. Distribusi ruang disk ing kluster Ceph sing wis digawe

Aku bakal miwiti crita kapindho kanthi pambuka babagan PG (Kelompok Panggonan). Peran utama PG ing Ceph utamane kanggo nglumpukake obyek Ceph lan luwih akeh niru ing OSD. Rumus sing sampeyan bisa ngetung jumlah PG sing dibutuhake bagean cocog Dokumentasi Ceph. Masalah iki uga dibahas ing kana kanthi conto tartamtu.

Dadi: salah sawijining masalah umum nalika nggunakake Ceph yaiku nomer OSD lan PG sing ora seimbang ing antarane blumbang ing Ceph.

Sepisanan, amarga iki, kahanan bisa njedhul nalika akeh banget PGs ditemtokake ing blumbang cilik, kang ateges nggunakake ora klebu nalar saka papan disk ing kluster. Kapindho, ing praktik ana masalah sing luwih serius: kebanjiran data ing salah sawijining OSD. Iki mbutuhake kluster pisanan transisi menyang negara HEALTH_WARN, banjur HEALTH_ERR. Alesan kanggo iki yaiku Ceph, nalika ngitung jumlah data sing kasedhiya (sampeyan bisa nemokake kanthi MAX AVAIL ing output printah ceph df kanggo saben blumbang kanthi kapisah) adhedhasar jumlah data sing kasedhiya ing OSD. Yen ora cukup spasi ing paling sethithik sak OSD, ora ana data liyane sing bisa ditulis nganti data kasebut disebarake kanthi bener ing kabeh OSD.

Iku worth clarifying sing masalah iki umume diputusake ing tataran konfigurasi kluster Ceph. Salah sawijining alat sing bisa digunakake yaiku Ceph PGCalc. Kanthi bantuan, jumlah PG sing dibutuhake diitung kanthi jelas. Nanging, sampeyan uga bisa Resor kanggo ing kahanan ngendi cluster Ceph wis dikonfigurasi ora bener. Iku worth njlentrehake kene sing minangka bagéan saka karya ndandani sampeyan bakal paling kamungkinan kudu ngurangi jumlah PGs, lan fitur iki ora kasedhiya ing versi lawas saka Ceph (mung muncul ing versi. Nautilus).

Dadi, ayo bayangake gambar ing ngisor iki: kluster duwe status HEALTH_WARN amarga salah siji saka OSD entek spasi. Iki bakal dituduhake kanthi kesalahan HEALTH_WARN: 1 near full osd. Ing ngisor iki minangka algoritma kanggo metu saka kahanan iki.

Kaping pisanan, sampeyan kudu nyebarake data sing kasedhiya ing antarane OSD sing isih ana. Kita wis nindakake operasi sing padha ing kasus sing sepisanan, nalika "ngeculake" simpul - mung bedane sing saiki kudu dikurangi. reweight. Contone, nganti 0.95:

ceph osd reweight osd.${ID} 0.95

Iki mbebasake ruang disk ing OSD lan ndandani kesalahan ing kesehatan ceph. Nanging, kaya sing wis kasebut, masalah iki utamane amarga konfigurasi Ceph sing salah ing tahap awal: penting banget kanggo nggawe konfigurasi ulang supaya ora katon ing mangsa ngarep.

Ing kasus khusus kita, kabeh kedadeyan:

  • regane dhuwur banget replication_count ing salah sawijining kolam,
  • kakehan PG ing siji blumbang lan banget sethitik ing liyane.

Ayo nggunakake kalkulator sing wis kasebut. Cetha nuduhake apa sing kudu dilebokake lan, ing asas, ora ana sing rumit. Sawise nyetel paramèter sing dibutuhake, kita entuk rekomendasi ing ngisor iki:

komentar: Yen sampeyan nyetel cluster Ceph saka ngeruk, fungsi liyane migunani kalkulator generasi printah sing bakal nggawe pools saka ngeruk karo paramèter kasebut ing meja.

Kolom pungkasan mbantu sampeyan navigasi - Jumlah PG sing disaranake. Ing kasus kita, sing kapindho uga migunani, ing ngendi parameter replikasi dituduhake, amarga kita mutusake kanggo ngganti multiplier replikasi.

Dadi, pisanan sampeyan kudu ngganti paramèter replikasi - iki kudu ditindakake dhisik, amarga kanthi nyuda multiplier, kita bakal mbebasake ruang disk. Nalika printah kasebut mlaku, sampeyan bakal weruh manawa ruang disk sing kasedhiya bakal nambah:

ceph osd pool $pool_name set $replication_size

Lan sawise rampung, kita ngganti nilai parameter pg_num и pgp_num kaya mangkene:

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

penting: kita kudu ngganti jumlah PG kanthi urutan ing saben blumbang lan ora ngganti nilai ing blumbang liyane nganti bebaya ilang "Redundansi data sing rusak" и "n-jumlah pgs rusak".

Sampeyan uga bisa mriksa manawa kabeh mlaku kanthi apik nggunakake output printah ceph health detail и ceph -s.

Kasus No. 3. Migrasi mesin virtual saka LVM menyang Ceph RBD

Ing kahanan nalika proyek nggunakake mesin virtual sing diinstal ing server bare-metal sing disewakake, masalah panyimpenan tahan kesalahan asring muncul. Iku uga banget seng di pengeni sing ana cukup papan ing panyimpenan iki ... Liyane kahanan umum: ana mesin virtual karo panyimpenan lokal ing server lan sampeyan kudu nggedhekake disk, nanging ora ana ngendi kanggo pindhah, amarga ora ana. papan disk free kiwa ing server.

Masalah bisa ditanggulangi kanthi macem-macem cara - contone, kanthi migrasi menyang server liyane (yen ana) utawa nambah disk anyar menyang server. Nanging ora mesthi bisa ditindakake, mula migrasi saka LVM menyang Ceph bisa dadi solusi sing apik kanggo masalah iki. Kanthi milih pilihan iki, kita uga nyederhanakake proses migrasi ing antarane server, amarga ora perlu mindhah panyimpenan lokal saka siji hypervisor menyang liyane. Siji-sijine yaiku sampeyan kudu mungkasi VM nalika karya ditindakake.

Resep ing ngisor iki dijupuk saka artikel saka blog iki, instruksi sing wis dites ing tumindak. Miturut cara, cara migrasi tanpa repot uga diterangake ing kono, Nanging, ing kasus kita iki mung ora perlu, supaya kita ora mriksa. Yen iki kritis kanggo proyek sampeyan, kita bakal seneng krungu babagan asil ing komentar.

Ayo pindhah menyang bagean praktis. Ing conto kita nggunakake virsh lan, miturut, libvirt. Pisanan, priksa manawa blumbang Ceph sing data bakal dipindhah disambungake menyang libvirt:

virsh pool-dumpxml $ceph_pool

Katrangan blumbang kudu ngemot data sambungan menyang Ceph kanthi data wewenang.

Langkah sabanjure yaiku gambar LVM diowahi dadi Ceph RBD. Wektu eksekusi gumantung utamane ing ukuran gambar:

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

Sawise konversi, gambar LVM bakal tetep, sing bakal migunani yen migrasi VM menyang RBD gagal lan sampeyan kudu mbaleni owah-owahan kasebut. Uga, supaya bisa cepet mbaleni owah-owahan, ayo gawe serep file konfigurasi mesin virtual:

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

... lan nyunting asli (vm_name.xml). Ayo goleki blok kanthi deskripsi disk (diwiwiti karo baris <disk type='file' device='disk'> lan mungkasi karo </disk>) lan suda dadi wangun ing ngisor iki:

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

Ayo ndeleng sawetara rincian:

  1. Kanggo protokol source alamat kanggo panyimpenan ing Ceph RBD dituduhake (iki alamat nuduhake jeneng blumbang Ceph lan gambar RBD, kang ditemtokake ing tataran pisanan).
  2. Ing blok secret jinis dituduhake ceph, uga UUID saka rahasia kanggo nyambung menyang. Sawijining uuid bisa ditemokake nggunakake printah virsh secret-list.
  3. Ing blok host alamat kanggo monitor Ceph dituduhake.

Sawise nyunting file konfigurasi lan ngrampungake konversi LVM menyang RBD, sampeyan bisa ngetrapake file konfigurasi sing diowahi lan miwiti mesin virtual:

virsh define $vm_name.xml
virsh start $vm_name

Wektu kanggo mriksa manawa mesin virtual diwiwiti kanthi bener: sampeyan bisa ngerteni, contone, kanthi nyambungake liwat SSH utawa liwat virsh.

Yen mesin virtual bisa digunakake kanthi bener lan sampeyan ora nemokake masalah liyane, sampeyan bisa mbusak gambar LVM sing ora digunakake maneh:

lvremove main/$vm_image_name

kesimpulan

Kita nemoni kabeh kasus sing diterangake ing praktik - muga-muga pandhuan kasebut bakal mbantu pangurus liyane ngatasi masalah sing padha. Yen sampeyan duwe komentar utawa crita liyane sing padha saka pengalaman sampeyan nggunakake Ceph, kita bakal seneng ndeleng ing komentar!

PS

Waca uga ing blog kita:

Source: www.habr.com

Add a comment