Nippe ja trikke Cephiga töötamiseks koormatud projektides.

Tips & tricks Ceph-i kasutamisel koormatud projektides

Kasutades Cephi kui vĂ”rgu salvestust erineva koormusega projektides, vĂ”ime silmitsi seista mitmesuguste ĂŒlesannetega, mis esmapilgul ei tundu lihtsad vĂ”i triviaalsetena. NĂ€iteks:

  • andmete migreerimine vanast Cephist uude osaliselt varasemaid servereid uues klastris kasutades;
  • ketta ruumi jaotuse probleemide lahendamine Cephis.

Selliste ĂŒlesannete lahendamisel seisame silmitsi vajadusega Ă”igesti OSDd eemaldada andmete kaotamata, mis on eriti oluline suurte andmemahtude puhul. Just sellest rÀÀgitakse artiklis.

Allpool kirjeldatud meetodid kehtivad igasuguste Cephi versioonide jaoks. Samuti arvestatakse, et Cephis vÔib olla suures koguses andmeid: andmekao ja teiste probleemide vÀltimiseks jagatakse mÔned toimingud mitmeks.

Sissejuhatus OSD-le

Kuna kaks kolmest kĂ€sitletavast retseptist on pĂŒhendatud OSD-le (Object Storage Daemon), enne praktilisse ossa sukeldumist — lĂŒhidalt, mis see Cephis ĂŒldse on ja miks see nii oluline on.

Esiteks tuleb öelda, et kogu Ceph-klaster koosneb paljusid OSD-dest. Mida rohkem OSD-sid, seda suurem on Ceph-i vaba andmemaht. Siit on lihtne mĂ”ista peamist OSD funktsiooni: see salvestab Ceph objektide andmed klasteri kĂ”igi sĂ”lmede failisĂŒsteemides ja tagab neile vĂ”rguĂŒhenduse (lugemiseks, kirjutamiseks ja muude taotlusteks).

Samas tasemes seadistatakse replikatsiooni parameetrid, kopeerides objekte erinevate OSD-de vahel. Siin vÔivad tekkida erinevad probleemid, mille lahendamisest rÀÀgitakse jÀrgmiselt.

Juhtum nr 1. OSD ohutu eemaldamine Ceph-klastrist andmete kaotuseta

OSD eemaldamise vajadus vĂ”ib tuleneda serveri vĂ€ljavĂ”tmisest klastrist — nĂ€iteks teise serveri asendamiseks, — mis juhtus ka meil ja mis oli pĂ”hjuseks selle artikli kirjutamiseks. Nii et toimingute lĂ”ppeesmĂ€rk on eemaldada kĂ”ik OSD-d ja mon’id sellest serverist, et see saaks peatada.

Mugavuse ja olukorra vĂ€ltimiseks, kus me kĂ€ske tĂ€ites eksime vajaliku OSD mÀÀramisel, mÀÀrame eraldi muutuja, mille vÀÀrtuseks on eemaldatava OSD number. Nimeks paneme selle ${ID} — siin ja edaspidi selline muutuja asendab OSD numbri, millega me töötame.

Vaadake seisundit enne tööde alustamist:

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

OSD eemaldamise algatamiseks on vaja sujuvalt teostada reweight sellel nulliks. Nii vÀhendame OSD-s toimuvaid andmeid, tasakaalustades need teistesse OSD-desse. Selleks tÀidetakse jÀrgmised kÀsklused:

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


 ja nii edasi kuni nullini.

Sujuv tasakaalustamine on vajalik, et mitte kaotada andmeid. See on eriti oluline, kui OSD-s on suur andmemaht. Et veenduda, et pÀrast kÀskluste tÀitmist reweight kÔik on lÀinud edukalt, vÔib tÀita ceph -s vÔi avada eraldi terminaliaknas ceph -w et jÀlgida muudatusi reaalajas.

Kui OSD on "tĂŒhjendatud", vĂ”ib alustada selle eemaldamise standardprotseduuri. Selleks viime vajalik OSD seisundisse down:

ceph osd down osd.${ID}

"TÔmbame" OSD klastrist vÀlja:

ceph osd out osd.${ID}

Peatame OSD teenuse ja demonteerime selle faili sĂŒsteemis:

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

Kustutame OSD-st CRUSH kaardist:

ceph osd crush remove osd.${ID}

Kustutame OSD kasutaja:

ceph auth del osd.${ID}

Ja lÔpuks kustutame OSD enda:

ceph osd rm osd.${ID}

MĂ€rkus: kui kasutate Ceph Luminous vĂ”i uuemat versiooni, saab ĂŒlaltoodud OSD eemaldamisprotseduurid minimaliseerida kahele kĂ€sule:

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

Kui pĂ€rast ĂŒlaltoodud toimingute tegemist kĂ€ivitate kĂ€su ceph osd tree, peaks olema nĂ€ha, et serveris, kus tööd tehti, ei ole enam OSD-d, millele ĂŒlaltoodud toimingud said teostatud:

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

Juhime tÀhelepanu, et Ceph klastrite olek muutub HEALTH_WARN, lisaks nÀeme OSD-de arvu ja vaba kettaruumi vÀhenemist.

Edasi kirjeldatakse toiminguid, mis on vajalikud, kui soovite serveri tĂ€ielikult peatada ning vastavalt eemaldada selle Ceph-ist. Sellisel juhul on oluline meeles pidada, et enne serveri vĂ€lja lĂŒlitamist tuleb igal OSD-l sellel serveril eemaldada.

Kui sellel serveril ei ole enam OSD-sid, siis nende eemaldamise jÀrel tuleb need OSD kaardilt vÀlja jÀtta. hv-2, tÀites jÀrgmise kÀsu:

ceph osd crush rm hv-2

Kustutame mon serverilt hv-2, kĂ€ivitades alltoodud kĂ€su teises serveris (st antud juhul — hv-1):

ceph-deploy mon destroy hv-2

PĂ€rast seda vĂ”ib serveri vĂ€lja lĂŒlitada ja jĂ€tkata jĂ€rgmiste toimingutega (uuesti seadistamine jne).

Juhtum nr 2. Diskiruumi jaotamine juba loodud Ceph-klusteris

Teise loo alustamiseks teen sissejuhatuse PG (Placement Groups). PG peamine roll Cephis on peamiselt Ceph-objektide kogumine ja edasine replikatsioon OSD-sse. PG vajaliku arvu arvutamiseks vajalik valem on toodud vastavas jaotises Ceph'i dokumentatsioonis. Seal on sama teema kÀsitletud ka konkreetsete nÀidete abil.

Nii et: ĂŒks levinumaid probleeme Cephi kasutamise ajal on OSD-de ja PG-de tasakaalustamatus Cephis.

Esiteks, vĂ”ib tekkida olukord, kus vĂ€ikeses mahus basseinis on mÀÀratud liiga palju PG-d, mis on oma olemuselt ebaefektiivne kettaruumi kasutamine klastris. Teiseks, praktikas tekib tĂ”sisem probleem: ĂŒhte OSD-d andmete ĂŒlevool. See toob kaasa klastrisse esialgu seisundi HEALTH_WARN, seejĂ€rel ka HEALTH_ERR. KĂ”ik see juhtub seetĂ”ttu, et Ceph tugineb arvutuste tegemisel OSD-s oleva andmehulga suurusele (mida saab teada MAX AVAIL kĂ€skluse tulemuses ceph df iga basseini jaoks eraldi), kui arvutatakse andmete saadavust. Kui vĂ€hemalt ĂŒhes OSD-s on ruumi ebapiisavalt, ei ole vĂ”imalik rohkem andmeid salvestada, kuni andmed ei ole korralikult jaotatud kĂ”igi OSD-de vahel.

Oluline on mĂ€rkida, et neid probleeme lahendatakse suurel mÀÀral Ceph-klastri konfiguratsiooni etapis. Üks tööriist, millele toetuda, on Ceph PGCalc. Selle abil saab selgelt arvutada vajalike PG-de arvu. Siiski vĂ”ib sellele tugineda ka olukordades, kus Ceph klaster juba on vale vale. Siin tasub mĂ€rkida, et vigade parandamise kĂ€igus peate tĂ”enĂ€oliselt vĂ€hendama PG arvu, kuid see vĂ”imalus ei ole vanades Ceph versioonides saadaval (see ilmus alles versiooniga Nautilus).

Kujutame nĂŒĂŒd jĂ€rgmisi stsenaariume: klastri staatus on HEALTH_WARN selle tĂ”ttu, et ĂŒhe OSD kohta lĂ”peb ruum. Sellest annab mĂ€rku viga HEALTH_WARN: 1 near full osd. Allpool on esitatud algoritm, kuidas sellisest olukorrast vĂ€lja pÀÀseda.

Esiteks tuleb olemasolevaid andmeid teiste OSD-de vahel jaotada. Sarnast toimingut oleme juba teinud esimeses juhtumis, kui „kuivasime“ sĂ”lme — ainus erinevus on see, et nĂŒĂŒd tuleb veidi vĂ€hendada reweight. NĂ€iteks kuni 0.95:

ceph osd reweight osd.${ID} 0.95

Nii vabastatakse OSD-s diskiruumi ja viga ceph healthis parandatakse. Kuid nagu juba mainitud, tekib see probleem peamiselt Cephi vale seadistamise tÔttu algstaadiumis: vÀga oluline on rekonstrueerimine, et see tulevikus ei ilmneks.

Meie konkreetsel juhul seisis see kÔik:

  • liialt suur vÀÀrtus replication_count ĂŒhes basseinides,
  • ĂŒhe laval on liiga suur PG arv ja teisel liiga vĂ€ike.

Kasutame juba mainitud kalkulaatorit. Selles on selgelt nĂ€idatud, mida sisestada, ja ĂŒldiselt pole seal midagi keerulist. Sisestades vajalikud parameetrid, saame jĂ€rgmised soovitused:

MĂ€rkus: kui seadistate Ceph-klusterit nullist, on kalkulaatori veel ĂŒheks kasulikuks funktsiooniks kĂ€skude genereerimine, mis loovad lĂ€htestatud basseinid tabelis toodud parameetritega.

Oleneb viimasest veerust — Suggested PG Count. Meie puhul on kasulik ka teine, kus on nĂ€idatud replikatsiooni parameeter, kuna otsustasime muuta replikatsiooni kordajat.

Nii et kĂ”igepealt tuleb muuta replikatsiooni parameetreid — seda tuleks teha kĂ”igepealt, kuna kordaja vĂ€hendamine vabastab salvestusruumi. KĂ€sku tĂ€itmisel vĂ”ib mĂ€rgata, et saadaval oleva salvestusruumi vÀÀrtus suureneb:

ceph osd pool $pool_name set $replication_size

Ja pÀrast selle lÔpetamist muudame parameetrite vÀÀrtused pg_num ja pgp_num jÀrgmiselt:

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

Oluline: peame jĂ€rk-jĂ€rgult igas rippes muutma PG arvut ja mitte muutma vÀÀrtusi teistes rippes, kuni hoiatused kaovad „Degradeeritud andmete ĂŒlekandmine“ ja „n-arvu pgs on degradeeritud“.

Kontrollige, et kÔik on lÀinud edukalt, samuti saab kontrollida kÀskude vÀljundeid ceph health detail ja ceph -s.

Juhtum nr 3. Virtuaalmasina migratsioon LVM-st Ceph RBD-le

Kui projektis kasutatakse virtuaalmasinaid, mis on paigaldatud renditud bare-metal-serveritele, siis tekib sageli kĂŒsimus tagavarakoopia kvaliteetse salvestamise kohta. Ja oleks vĂ€ga soovitav, et selle salvestuse jaoks oleks piisavalt ruumi
 Teine levinud olukord: on virtuaalmasin, millel on lokaalne salvestusserveris ja on vaja ketast laiendada, kuid ruumi ei ole, kuna serveris ei ole vaba ketaruum.

Probleemi saab lahendada mitmesuguste vahenditega — nĂ€iteks migreerimisega teisele serverile (kui see on saadaval) vĂ”i uute kettaste lisamisega serverisse. Kuid mitte alati ei ole seda vĂ”imalik teha, seetĂ”ttu vĂ”ib migreerimine LVM-ilt Ceph-ile olla suurepĂ€rane lahendus sellele probleemile. Sellise variandi valides lihtsustame ka edasist migreerimisprotsessi serverite vahel, kuna ei pea kohalikku salvestust ĂŒhelt hĂŒpervisorilt teisele tarnima. Ainuke konks on see, et peate VM-i töö ajaks peatama.

Nagu allpool toodud retseptis on see blogi artikli pĂ”hjal, mille juhiseid on praktikas katsetatud. Üldsega, seal on samuti kirjeldatud lihtsustatud migreerimise viisi, kuid meie juhtumil ei olnud see lihtsalt vajalik, seega me ei kontrollinud seda. Kui see on teie projekti jaoks kriitiline — oleksime rÔÔmsad, kui kuuleksime teie tulemustest kommentaarides.

Alustame praktilise osaga. NĂ€ites kasutame virsh'i ja vastavalt ka libvirt'i. Esiteks veenduge, et Ceph'i bassein, kuhu andmed migreeritakse, on libvirt'iga ĂŒhendatud:

virsh pool-dumpxml $ceph_pool

Puhangus kirjelduses peavad olema ĂŒhendusandmed Ceph'iga koos autentimisteabega.

JÀrgmine etapp on see, et LVM-i pildist konverteeritakse Ceph RBD-ks. TÀitmise aeg sÔltub peamiselt pildi suurusest:

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

PÀrast konverteerimist jÀÀb LVM-i pilt, mis on kasulik, kui VM-i rÀndamine RBD-sse ei Ônnestu ja tuleb muudatused tagasi vÔtta. Samuti, et vÔimalikult kiiresti muudatusi tagasi vÔtta, teeme varukoopia virtuaalmasina konfiguratsioonifailist:

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


 ja muudame originaali (vm_name.xml). Otsime vÀlja plaadi kirjelduse ploki (mis algab reaalta: <disk type='file' device='disk'> ja lÔpetab </disk>) ja viime selle jÀrgmisesse vormi:

Vaatame mÔningaid detaile:

  1. Protokoll source mÀÀratakse Ceph RBD salvestuse aadress (see on aadress, kus on nÀidatud Ceph-aluse ja RBD-pildi nimi, mis mÀÀrati esimesel etapil).
  2. Blokis salajane mÀÀratakse tĂŒĂŒp ceph, samuti salajase ĂŒhiku UUID selle ĂŒhendamiseks. Selle uuid saab teada jĂ€rgmise kĂ€sklusega virsh secret-list.
  3. Blokis host mÀÀratakse Ceph-i monitoride aadressid.

PÀrast konfiguratsioonifaili redigeerimist ja LVM-i konverteerimist RBD-ks saab rakendada muudetud konfiguratsioonifaili ja kÀivitada virtuaalmasina:

virsh define $vm_name.xml
virsh start $vm_name

On Ă”ige aeg kontrollida, kas virtuaalmasin kĂ€ivitus korrektselt: seda saab teada nĂ€iteks SSH kaudu ĂŒhendust luues vĂ”i virsh.

Kui virtuaalmasin töötab korrektselt ja te ei leia muid probleeme, siis saab eemaldada LVM-pildi, mida enam ei kasutata:

lvremove main/$vm_image_name

KokkuvÔte

KĂ”igi eelnevalt kirjeldatud juhtumitega oleme praktikas kokku puutunud — loodame, et juhised aitavad ka teisi administraatoreid sarnaste probleemide lahendamisel. Kui teil on mĂ€rkusi vĂ”i muid sarnaseid lugusid Ceph-i kasutamisest — oleksime rÔÔmsad neid kommentaarides nĂ€ha!

P.S.

Lugege ka meie blogist:

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster