
Kasutades Ceph'i kui vÔrgu salvestusruumi erinevate koormustega projektides, vÔime kokku puutuda erinevate probleemidega, mis esmapilgul ei tundu lihtsad vÔi triviaalsetena. NÀiteks:
- andmete migratsioon vana Ceph'ist uude, osaliselt kasutades eelmisi servereid uues klastris;
- probleemi lahendamine Ceph'i kettaruumi jaotuse osas.
Selliste ĂŒlesannete lahendamisel seisame silmitsi vajadusega Ă”igesti eemaldada OSD andmete kaotamata, mis on eriti oluline suurte andmemahtude korral. Just sellest juttu tuleb artiklis.
Allpool kirjeldatud meetodid kehtivad kÔikide Ceph'i versioonide jaoks. Lisaks arvestatakse selle faktiga, et Ceph's vÔib talletuda suur andmemahutus: andmete kaotuse ja muude probleemide vÀltimiseks jagatakse mÔned toimingud mitmeks.
EessÔna OSD-st
Kuna kaks kolmest kĂ€sitletavast retseptist on pĂŒhendatud OSD-le (), enne praktilisse ossa sukeldumist â lĂŒhidalt, mis see tegelikult on Ceph'is ja miks see on nii oluline.
Esiteks tuleb öelda, et kogu Ceph'i klaster koosneb paljusid OSD-dest. Mida rohkem neid on, seda suurem on vaba andmemaht Ceph'is. Sealt on lihtne mĂ”ista OSD peamist funktsiooni: see salvestab Ceph'i objektide andmed klastris olevate node'ide failisĂŒsteemidesse ja pakub neile vĂ”rgu ligipÀÀsu (lugemiseks, kirjutamiseks ja muudele pĂ€ringutele).
Samuti seadistatakse replikatsiooni parameetrid, kopeerides objekte erinevate OSD-de vahel. Ja siin vÔime kokku puutuda erinevate probleemidega, mille lahendamist kÀsitletakse hiljem.
Juhtum nr 1. OSD turvaline eemaldamine Ceph'i klastrist andmete kaotamata
OSD eemaldamise vajadus vĂ”ib tuleneda serveri eemaldamisest klastrist - nĂ€iteks asendamiseks teise serveriga - mis juhtus ka meie puhul, andes pĂ”hjuse artikli kirjutamiseks. Seega on operatsioonide lĂ”ppeesmĂ€rk eemaldada kĂ”ik OSD-d ja monâid antud serveris, et see saaks vĂ€lja lĂŒlitada.
Mugavuse ja olukorra vĂ€ltimiseks, kus oleme kĂ€skude tĂ€itmise protsessis eksinud vajaliku OSD mÀÀramisel, seame eraldi muutuja, mille vÀÀrtuseks saab eemaldatava OSD number. Nimetame selle ${ID} â siin ja edaspidi asendab see muutuja 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 eemaldamiseks on vajalik sujuvalt reweight seda nulli. Nii vÀhendame OSD-s olevate andmete hulka, suunates need teistesse OSD-desse. Selle jaoks tuleb kÀivitada jÀrgmised kÀsud:
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 tasakaalustus on vajalik, et andmeid ei kaotataks. See on eriti oluline, kui OSD-s on palju andmeid. Et veenduda, et pÀrast kÀskude tÀitmist reweight on kÔik lÀinud edukalt, saab kÀivitada ceph -s vÔi avada eraldi terminaliaknas ceph -w kui soovite jÀlgida muudatusi reaalajas.
Kui OSD on "tĂŒhjendatud", saab alustada selle eemaldamise standardset protseduuri. Selleks viime soovitud OSD seisundisse down:
ceph osd down osd.${ID}"TÔmbame" OSD klastrist vÀlja:
ceph osd out osd.${ID}Peatame OSD teenuse ja eemaldame selle jagamise failisĂŒsteemist:
systemctl stop ceph-osd@${ID}
umount /var/lib/ceph/osd/ceph-${ID}Eemaldame OSD :
ceph osd crush remove osd.${ID}Eemaldame OSD kasutaja:
ceph auth del osd.${ID}Ja lÔpuks eemaldame ise OSD:
ceph osd rm osd.${ID}MĂ€rkus: kui kasutate Ceph Luminous vĂ”i uuemat versiooni, siis vĂ”ivad ĂŒlaltoodud OSD eemaldamise toimetamised kokku leppida kahes kĂ€sus:
ceph osd out osd.${ID}
ceph osd purge osd.${ID}
Kui pĂ€rast ĂŒlaltoodud kĂ€skude tĂ€itmist kĂ€ivitada kĂ€sk ceph osd tree, siis peaks olema nĂ€ha, et serveris, kus tööd tehti, pole enam OSD-sid, mille jaoks operatsioone tehti:
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 MÀrgin ka, et Ceph klastri olek muudab HEALTH_WARN, samuti mÀrkame OSD-de arvu vÀhendamist ja saadaval oleva kettaruumi vÀhenemist.
Edasi kirjeldatakse toiminguid, mis on vajalikud, kui soovite serveri tĂ€ielikult peatada ja seega ka Ceph-st eemaldada. Sellisel juhul on oluline meeles pidada, et enne serveri vĂ€ljalĂŒlitamist tuleb eemaldada kĂ”ik OSD-d selles serveris.
Kui selles serveris pole enam OSD-sid, tuleb nende eemaldamise jÀrel OSD kaardilt vÀlja jÀtta server hv-2, kÀivitades jÀrgmise kÀsu:
ceph osd crush rm hv-2 Kustutame mon serverist hv-2, kĂ€ivitades alloleva kĂ€su teises serveris (st sel juhul â hv-1):
ceph-deploy mon destroy hv-2PÀrast seda vÔib serveri kinni panna ja liikuda jÀrgmiste toimingute juurde (nÀiteks selle uuesti seadistamine jne.).
Juhtum nr 2. Diskiruumi jaotus juba loodud Ceph-klastris
Teise loo alustamiseks teen sissejuhatuse PG (). PG peamine roll Cephis on eelkĂ”ige Ceph-objektide agregatsioon ja edasine replikatsioon OSDs. PG vajaliku arvu arvutamise valem on toodud Cephi dokumentatsioonis. Seal kĂ€sitletakse seda kĂŒsimust ka konkreetsete nĂ€idete kaudu.
Nii et ĂŒks levinumaid probleme Cephi kasutamise ajal on OSD ja PG vahelise tasakaalu puudumine klastris.
Esiteks vĂ”ib see tekitada olukorra, kus vĂ€ikese mahuga basseinis on liiga palju PG-sid, mis on sisuliselt diskiruumi ebaefektiivne kasutamine klastris. Teiseks, praktikas tekib tĂ”sisem probleem: andmete ĂŒlekĂŒllus ĂŒhes OSD-s. See toob kaasa klastris kĂ”igepealt oleku HEALTH_WARN, ja siis HEALTH_ERR. KĂ”ik selle tĂ”ttu, et Ceph arvutab saadaval oleva andmemahu (mida saab kontrollida MAX AVAIL kĂ€sku andmete vĂ€ljastamise ajal ceph df iga basseini kohta eraldi) OSD-s saadaval oleva andmemahu pĂ”hjal. Kui vĂ€hemalt ĂŒhes OSD-s on ruumi liiga vĂ€he, siis rohkem andmeid salvestada ei Ă”nnestu, kuni andmed on kĂ”ikides OSD-des korralikult jaotatud.
Oluline on mĂ€rkida, et need probleemid lahendatakse suuresti Ceph-klastri seadistamise etapis.Ăks tööriist, mida kasutada, on . Selle abil arvutatakse visuaalselt vajalik PG-de arv. Sellegipoolest vĂ”ib selle poole pöörduda ka olukordades, kui Ceph-klaster juba on vale seadistusega. Siinkohal tuleb mĂ€rkida, et tĂ”rgete parandamise kĂ€igus peate tĂ”enĂ€oliselt PG-de arvu vĂ€hendama, kuid see vĂ”imalus ei ole vanades Cephi versioonides saadaval (see ilmus alles versiooniga ).
Nii et kujutame ette jĂ€rgmist stsenaariumi: klastril on olek HEALTH_WARN selle tĂ”ttu, et ĂŒhes OSD-s on ruum otsa saamas. Seda tĂ”endab tĂ”rge HEALTH_WARN: 1 near full osd. Allpool on toodud algoritm, et sellisest olukorrast vĂ€lja pÀÀseda.
Esmalt on vaja olemasolevad andmed jagada teiste OSDe vahel. Sarnast toimingut oleme juba teinud esimeses juhtumis, kui me "kuivasime" sĂ”lme â ainsaks erinevuseks on see, et nĂŒĂŒd tuleb vÀÀrtust veidi vĂ€hendada. reweight. NĂ€iteks 0.95:
ceph osd reweight osd.${ID} 0.95Nii vabanevad OSDes kettaruumi ja kÔrvaldatakse viga ceph health'is. Siiski, nagu juba mainitud, tekib see probleem enamasti vale Cephi seadistamise tÔttu algstaadiumis: on ÀÀrmiselt oluline teha rekondigureerimine, et see ei korduks tulevikus.
Meie konkreetses juhul kÔik seisnes:
- liialt kÔrge vÀÀrtus
replication_countĂŒhes basseinist, - liialt kĂ”rge PG arv ĂŒhes basseinist ja liiga madal â teises.
Kasutame juba mainitud kalkulaatorit. Selles on selgelt nÀha, mida sisestada, ja pÔhimÔtteliselt pole seal midagi keerulist. Sisestades vajalikud parameetrid, saame jÀrgmised soovitused:
MĂ€rkus: kui seadistate Cephi klastrit nullist, osutub kalkulaatori abiks veel ĂŒks kasulik funktsioon, nimelt kĂ€skude genereerimine, mis loob basseinid nullist tabelis toodud parameetritega.
Kitsendatud aitab viimane veerg â Suggested PG Count. Meie puhul on kasulik ka teine, kus on mĂ€rgitud replikatsiooni parameeter, kuna otsustasime muuta ka replikatsiooni kordajat.
Nii et esmalt tuleb muuta replikatsiooni parameetreid â seda tuleks teha esimesena, kuna kordaja vĂ€hendamine vabastab kettaruumi. KĂ€skude tĂ€itmise protsessis vĂ”ib tĂ€heldada, et vaba kettamaht kasvab:
ceph osd pool $pool_name set $replication_size Ja pĂ€rast selle lĂ”petamist â muutke parameetreid 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_numberOluline: peame jÀrjestikku igas basseinis muutma PG arvu ja mitte muutma vÀÀrtusi teistes basseinides, kuni hoiatused kaovad "Degraded data redundancy" ja "n-number of pgs degraded".
Kontrollida, et kÔik lÀks sujuvalt, saab ka kÀskude vÀljundite kaudu ceph health detail ja ceph -s.
Juhtum nr 3. Virtuaalse masina migratsioon LVM-ist Ceph RBD-sse
Kui projektis kasutatakse virtuaalseid masinaid, mis on paigaldatud renditud bare-metal serveritele, tekib sageli kĂŒsimus, kuidas tagada uuendatav salvestuslahendus. Samuti on oluline, et salvestuspinda oleks piisavalt... Teine levinud olukord: virtuaalne masin, millel on serveris kohalik salvestus, vajab ketta laiendamist, aga vaba kettaruumi pole jÀÀnud.
Selle probleemi saab lahendada erinevate meetoditega â nĂ€iteks migratsiooniga teisele serverile (kui selline on olemas) vĂ”i uute ketaste lisamisega serverisse. Kuid see ei Ă”nnestu alati, seega vĂ”ib migratsioon LVM-ist Ceph-i olla suurepĂ€rane lahendus. Sellise variandi valimisel lihtsustame ka edasist migratsiooniprotsessi serverite vahel, sest ei ole vaja kohalikku salvestust ĂŒhest hĂŒperviisorist teise viia. Ainuke takistus on see, et virtuaalne masin tuleb tööde ajaks peatada.
Tuleks tuua jĂ€rgmine retsept , mille juhised on praktikas proovitud. Muide, seal on kirjeldatud ka sĂŒsteemi migratsiooni viisi,aga meie juhul ei olnud see vajalik, seega me ei kontrollinud seda. Kui see on teie projekti jaoks kriitiline â oleme tĂ€nulikud, kui jagate tulemusi kommentaarides.
LĂ€heme praktilise osa juurde. NĂ€ites kasutame virshâi ja vastavalt libvirtâi. Esiteks veenduge, et Cephâi bassein, kuhu andmed migratsiooniks suunatakse, on libvirtâiga ĂŒhendatud:
virsh pool-dumpxml $ceph_poolBasseini kirjelduses peaksid olema Cephâi ĂŒhenduse andmed koos autoriseerimise andmetega.
JÀrgmine samm on see, et LVM-pilt 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_namePĂ€rast konversiooni jÀÀb LVM-pilt, mis on kasulik juhul, kui migratsioon virtuaalsest masinast RBD-sse ei Ă”nnestu ja muudatused tuleb tagasi rullida. Samuti â muutuste kiireks tagasi rullimiseks â teeme varukoopia virtuaalse masina konfigureerimisfailist:
virsh dumpxml $vm_name > $vm_name.xml
cp $vm_name.xml $vm_name_backup.xml ⊠ja redigeerime originaali (vm_name.xml). Leidke plokk ketta kirjeldusega (algab realt <disk type='file' device='disk'> ja lÔpeb </disk>) ja toome selle jÀrgmisesse vormi:
Vaatame mÔningaid detaile:
- Protokollis
sourcetuletatakse vahehoidla aadress Ceph RBD (see on aadress, mis nÀitab Ceph basseini ja RBD pilti, mis mÀÀrati esimeses etapis). - Plokis
secretnĂ€idatakse tĂŒĂŒpiceph, samuti salajase ID, et kasutada sellele ĂŒhendust. Selle uuid'i saab teada kĂ€sugavirsh secret-list. - Plokis
hostnÀidatakse Ceph jÀlgijate aadresse.
PĂ€rast konfiguratsioonifaili redigeerimist ja LVM-i ĂŒmberkujundamist RBD-sse saab rakendada muudetud konfiguratsioonifaili ja kĂ€ivitada virtuaalse masina:
virsh define $vm_name.xml
virsh start $vm_name On aeg kontrollida, kas virtuaalne masin kĂ€ivitus Ă”igesti: seda saab teha nĂ€iteks, ĂŒhendudes temaga SSH kaudu vĂ”i lĂ€bi virsh.
Kui virtuaalne masin töötab Ôigesti ja te ei leidnud muid probleeme, saate eemaldada LVM-pildi, mis ei ole enam kasutuses:
lvremove main/$vm_image_nameKokkuvÔte
KĂ”ikide kirjeldatud juhtumite korral oleme praktikas kokku puutunud â loodame, et juhised aitavad ka teisi haldureid sarnaste probleemide lahendamisel. Kui teil on mĂ€rkusi vĂ”i muid sarnaseid kogemusi Ceph'i kasutamisest â oleksime rÔÔmsad neid kommenteerida!
P.S.
Lugege ka meie blogist:
- «»;
- «»;
- «»;
- «».
Allikas: habr.com
