Padomi un ieteikumi darbam ar Ceph aizÅemtos projektos
Izmantojot Ceph kÄ tÄ«kla krÄtuvi projektos ar dažÄdu slodzi, mÄs varam saskarties ar dažÄdiem uzdevumiem, kas no pirmÄ acu uzmetiena neŔķiet vienkÄrÅ”i vai triviÄli. PiemÄram:
datu migrÄÅ”ana no vecÄ Ceph uz jaunu, daļÄji izmantojot iepriekÅ”Äjos serverus jaunajÄ klasterÄ«;
risinÄjums diska vietas pieŔķirÅ”anas problÄmai Ceph.
Risinot Å”Ädas problÄmas, mÄs saskaramies ar nepiecieÅ”amÄ«bu pareizi noÅemt OSD, nezaudÄjot datus, kas ir Ä«paÅ”i svarÄ«gi, strÄdÄjot ar lielu datu apjomu. Tas tiks apspriests rakstÄ.
TÄlÄk aprakstÄ«tÄs metodes attiecas uz jebkuru Ceph versiju. TurklÄt tiks Åemts vÄrÄ fakts, ka Ceph var uzglabÄt lielu datu apjomu: lai novÄrstu datu zudumu un citas problÄmas, dažas darbÄ«bas tiks āsadalÄ«tasā vairÄkÄs citÄs.
PriekÅ”vÄrds par OSD
TÄ kÄ divas no trim apspriestajÄm receptÄm ir veltÄ«tas OSD (Objektu glabÄÅ”anas dÄmons), pirms iedziļinÄties praktiskajÄ daÄ¼Ä - Ä«sumÄ par to, kas tas ir Ceph un kÄpÄc tas ir tik svarÄ«gi.
PirmkÄrt, jÄsaka, ka viss Ceph klasteris sastÄv no daudziem OSD. Jo vairÄk to ir, jo lielÄks ir bezmaksas datu apjoms Ceph. No Å”ejienes to ir viegli saprast galvenÄ OSD funkcija: tas saglabÄ Ceph objektu datus visu klasteru mezglu failu sistÄmÄs un nodroÅ”ina tiem piekļuvi tÄ«klam (lasÄ«Å”anai, rakstÄ«Å”anai un citiem pieprasÄ«jumiem).
TajÄ paÅ”Ä lÄ«menÄ« replikÄcijas parametri tiek iestatÄ«ti, kopÄjot objektus starp dažÄdiem OSD. Un Å”eit jÅ«s varat saskarties ar dažÄdÄm problÄmÄm, kuru risinÄjumi tiks apspriesti tÄlÄk.
Lieta Nr.1. DroÅ”i noÅemiet OSD no Ceph klastera, nezaudÄjot datus
NepiecieÅ”amÄ«bu noÅemt OSD var izraisÄ«t servera noÅemÅ”ana no klastera, piemÄram, lai to aizstÄtu ar citu serveri. Tas ir tas, kas notika ar mums, un tÄpÄc tika izveidots Å”is raksts. TÄdÄjÄdi manipulÄcijas galvenais mÄrÄ·is ir iegÅ«t visus OSD un mons uz dotÄ servera, lai to varÄtu apturÄt.
ÄrtÄ«bas labad un lai izvairÄ«tos no situÄcijas, kad, izpildot komandas, kļūdÄmies, norÄdot vajadzÄ«go OSD, iestatÄ«sim atseviŔķu mainÄ«go, kura vÄrtÄ«ba bÅ«s dzÄÅ”amÄ OSD numurs. Sauksim viÅu ${ID} ā Å”eit un tÄlÄk Å”Äds mainÄ«gais aizstÄj OSD numuru, ar kuru mÄs strÄdÄjam.
ApskatÄ«sim stÄvokli pirms darba sÄkÅ”anas:
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
Lai sÄktu OSD noÅemÅ”anu, jums bÅ«s jÄrÄ«kojas vienmÄrÄ«gi reweight par to uz nulli. TÄdÄ veidÄ mÄs samazinÄm datu apjomu OSD, lÄ«dzsvarojot to ar citiem OSD. Lai to izdarÄ«tu, palaidiet Å”Ädas komandas:
NepiecieÅ”ama vienmÄrÄ«ga balansÄÅ”analai nezaudÄtu datus. Tas jo Ä«paÅ”i attiecas uz gadÄ«jumiem, kad OSD satur lielu datu apjomu. Lai pÄrliecinÄtos, ka pÄc komandu izpildes reweight viss gÄja labi, jÅ«s varat to pabeigt ceph -s vai atseviÅ”Ä·Ä terminÄļa logÄ palaist ceph -w lai novÄrotu izmaiÅas reÄllaikÄ.
Kad OSD ir āiztukÅ”otsā, varat turpinÄt standarta darbÄ«bu, lai to noÅemtu. Lai to izdarÄ«tu, pÄrsÅ«tiet vÄlamo OSD uz stÄvokli down:
ceph osd down osd.${ID}
āIzvilksimā OSD no klastera:
ceph osd out osd.${ID}
ApturÄsim OSD pakalpojumu un atvienosim tÄ nodalÄ«jumu FS:
PiezÄ«me: Ja izmantojat Ceph Luminous versiju vai jaunÄku, iepriekÅ” minÄtÄs OSD noÅemÅ”anas darbÄ«bas var samazinÄt lÄ«dz divÄm komandÄm:
ceph osd out osd.${ID}
ceph osd purge osd.${ID}
Ja pÄc iepriekÅ” aprakstÄ«to darbÄ«bu veikÅ”anas palaižat komandu ceph osd tree, tad jÄbÅ«t skaidram, ka serverÄ«, kurÄ tika veikts darbs, vairs nav OSD, kuriem tika veiktas iepriekÅ” minÄtÄs darbÄ«bas:
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
Pa ceļam Åemiet vÄrÄ, ka Ceph klastera stÄvoklis tiks sasniegts HEALTH_WARN, un mÄs redzÄsim arÄ« OSD skaita un pieejamÄs diska vietas samazinÄÅ”anos.
TÄlÄk tiks aprakstÄ«tas darbÄ«bas, kas bÅ«s jÄveic, ja vÄlaties pilnÄ«bÄ apturÄt serveri un attiecÄ«gi noÅemt to no Ceph. Å ajÄ gadÄ«jumÄ ir svarÄ«gi to atcerÄties Pirms servera izslÄgÅ”anas ir jÄnoÅem visi OSD Å”ajÄ serverÄ«.
Ja Å”ajÄ serverÄ« vairs nav palicis OSD, tad pÄc to noÅemÅ”anas serveris jÄizslÄdz no OSD kartes hv-2izpildot Å”Ädu komandu:
ceph osd crush rm hv-2
NoÅemt mon no servera hv-2palaižot tÄlÄk norÄdÄ«to komandu citÄ serverÄ« (t.i., Å”ajÄ gadÄ«jumÄ uz hv-1):
ceph-deploy mon destroy hv-2
PÄc tam varat apturÄt serveri un sÄkt turpmÄkÄs darbÄ«bas (tÄ atkÄrtoti izvietot utt.).
Lieta Nr.2. Diska vietas sadalÄ«jums jau izveidotÄ Ceph klasterÄ«
Otro stÄstu sÄkÅ”u ar priekÅ”vÄrdu par PG (Izvietojuma grupas). PG galvenÄ loma Ceph ir galvenokÄrt Ceph objektu apkopoÅ”ana un turpmÄka to atkÄrtoÅ”ana OSD. Formula, ar kuru jÅ«s varat aprÄÄ·inÄt nepiecieÅ”amo PG daudzumu, ir norÄdÄ«ta attiecÄ«gÄ sadaļa Ceph dokumentÄcija. ArÄ« Å”is jautÄjums tur tiek apspriests ar konkrÄtiem piemÄriem.
TÄtad: viena no izplatÄ«tÄkajÄm problÄmÄm, lietojot Ceph, ir nesabalansÄtais OSD un PG skaits starp kopumiem Ceph.
PirmkÄrt, Ŕī iemesla dÄļ var rasties situÄcija, kad mazÄ pÅ«lÄ ir norÄdÄ«ts pÄrÄk daudz PG, kas bÅ«tÄ«bÄ ir neracionÄla diska vietas izmantoÅ”ana klasterÄ«. OtrkÄrt, praksÄ pastÄv nopietnÄka problÄma: datu pÄrpilde vienÄ no OSD. Tas nozÄ«mÄ, ka klasteris vispirms pÄriet uz stÄvokli HEALTH_WARN, un tad HEALTH_ERR. Iemesls tam ir tas, ka Ceph, aprÄÄ·inot pieejamo datu apjomu (to varat uzzinÄt pÄc MAX AVAIL komandas izvadÄ ceph df katram pÅ«lam atseviŔķi) ir balstÄ«ts uz OSD pieejamo datu apjomu. Ja vismaz vienÄ OSD nav pietiekami daudz vietas, vairs nevar ierakstÄ«t datus, kamÄr dati nav pareizi sadalÄ«ti starp visiem OSD.
Ir vÄrts precizÄt, ka Ŕīs problÄmas lielÄkoties tiek izlemti Ceph klastera konfigurÄcijas posmÄ. Viens no rÄ«kiem, ko varat izmantot, ir Ceph PGCalc. Ar tÄs palÄ«dzÄ«bu tiek skaidri aprÄÄ·inÄts nepiecieÅ”amais PG daudzums. TomÄr jÅ«s varat arÄ« izmantot to situÄcijÄ, kad Ceph klasteris jau nepareizi konfigurÄts. Å eit ir vÄrts paskaidrot, ka laboÅ”anas darbu ietvaros jums, visticamÄk, bÅ«s jÄsamazina PG skaits, un Ŕī funkcija nav pieejama vecÄkÄs Ceph versijÄs (tÄ parÄdÄ«jÄs tikai versijÄ MÄ«kstmiesis).
TÄtad, iedomÄsimies Å”Ädu attÄlu: klasterim ir statuss HEALTH_WARN jo vienam no OSD pietrÅ«kst vietas. Par to tiks norÄdÄ«ta kļūda HEALTH_WARN: 1 near full osd. ZemÄk ir algoritms, kÄ izkļūt no Ŕīs situÄcijas.
PirmkÄrt, jums ir jÄsadala pieejamie dati starp atlikuÅ”ajiem OSD. MÄs jau veicÄm lÄ«dzÄ«gu darbÄ«bu pirmajÄ gadÄ«jumÄ, kad mÄs āiztukÅ”ojÄmā mezglu - ar vienÄ«go atŔķirÄ«bu, ka tagad mums bÅ«s nedaudz jÄsamazina reweight. PiemÄram, lÄ«dz 0.95:
ceph osd reweight osd.${ID} 0.95
Tas atbrÄ«vo diska vietu OSD un novÄrÅ” ceph veselÄ«bas kļūdu. TomÄr, kÄ jau minÄts, Ŕī problÄma galvenokÄrt rodas nepareizas Ceph konfigurÄcijas dÄļ sÄkotnÄjos posmos: ir ļoti svarÄ«gi veikt pÄrkonfigurÄciju, lai tÄ neparÄdÄ«tos nÄkotnÄ.
MÅ«su konkrÄtajÄ gadÄ«jumÄ viss beidzÄs Å”Ädi:
vÄrtÄ«ba ir pÄrÄk augsta replication_count vienÄ no baseiniem,
pÄrÄk daudz PG vienÄ baseinÄ un pÄrÄk maz citÄ.
Izmantosim jau minÄto kalkulatoru. Tas skaidri parÄda, kas jÄievada, un principÄ nav nekÄ sarežģīta. PÄc nepiecieÅ”amo parametru iestatÄ«Å”anas mÄs saÅemam Å”Ädus ieteikumus:
PiezÄ«me: Ja Ceph klasteri iestatÄt no jauna, vÄl viena noderÄ«ga kalkulatora funkcija ir komandu Ä£enerÄÅ”ana, kas no jauna izveidos pÅ«lus ar tabulÄ norÄdÄ«tajiem parametriem.
TÄtad, vispirms ir jÄmaina replikÄcijas parametri - vispirms ir vÄrts to izdarÄ«t, jo, samazinot reizinÄtÄju, mÄs atbrÄ«vosim vietu diskÄ. Kad komanda tiek izpildÄ«ta, pamanÄ«sit, ka palielinÄsies pieejamÄ vieta diskÄ:
ceph osd pool set $pool_name pg_num $pg_number
ceph osd pool set $pool_name pgp_num $pg_number
Tas ir svarÄ«gi: mums ir jÄmaina PG skaits secÄ«gi katrÄ pÅ«lÄ un nemaina vÄrtÄ«bas citos baseinos, kamÄr brÄ«dinÄjumi nav pazuduÅ”i "PazeminÄta datu dublÄÅ”ana" Šø "n-degradÄto lapu skaits".
Varat arÄ« pÄrbaudÄ«t, vai viss noritÄja labi, izmantojot komandu izejas ceph health detail Šø ceph -s.
Lieta Nr.3. VirtuÄlÄs maŔīnas migrÄÅ”ana no LVM uz Ceph RBD
SituÄcijÄ, kad projektÄ tiek izmantotas virtuÄlÄs maŔīnas, kas uzstÄdÄ«tas uz Ä«rÄtÄm plikmetÄla serveriem, bieži rodas jautÄjums par kļūdu izturÄ«gu krÄtuvi. Ä»oti vÄlams arÄ«, lai Å”ajÄ krÄtuvÄ bÅ«tu pietiekami daudz vietas... VÄl viena izplatÄ«ta situÄcija: uz servera atrodas virtuÄlÄ maŔīna ar lokÄlo atmiÅu un vajag paplaÅ”inÄt disku, bet nav kur iet, jo nav serverÄ« palikusi brÄ«va vieta diskÄ.
ProblÄmu var atrisinÄt dažÄdi ā piemÄram, migrÄjot uz citu serveri (ja tÄds ir) vai pievienojot serverim jaunus diskus. TaÄu ne vienmÄr to ir iespÄjams izdarÄ«t, tÄpÄc migrÄÅ”ana no LVM uz Ceph var bÅ«t lielisks Ŕīs problÄmas risinÄjums. IzvÄloties Å”o opciju, mÄs arÄ« vienkÄrÅ”ojam turpmÄko migrÄcijas procesu starp serveriem, jo āānebÅ«s jÄpÄrvieto lokÄlÄ krÄtuve no viena hipervizora uz citu. VienÄ«gÄ problÄma ir tÄda, ka jums bÅ«s jÄpÄrtrauc VM, kamÄr darbs tiek veikts.
SekojoÅ”Ä recepte ir Åemta no raksts no Ŕī emuÄra, kuras norÄdÄ«jumi ir pÄrbaudÄ«ti darbÄ«bÄ. Starp citu, tur ir aprakstÄ«ta arÄ« bezproblÄmu migrÄcijas metode, tomÄr mÅ«su gadÄ«jumÄ tas vienkÄrÅ”i nebija vajadzÄ«gs, tÄpÄc nepÄrbaudÄ«jÄm. Ja tas ir bÅ«tiski jÅ«su projektam, mÄs ar prieku uzzinÄsim par rezultÄtiem komentÄros.
PÄrejam uz praktisko daļu. PiemÄrÄ lietojam virsh un attiecÄ«gi libvirt. Vispirms pÄrliecinieties, vai Ceph pÅ«ls, uz kuru tiks migrÄti dati, ir savienots ar libvirt:
virsh pool-dumpxml $ceph_pool
PÅ«la aprakstÄ ir jÄietver savienojuma dati ar Ceph ar autorizÄcijas datiem.
NÄkamais solis ir tas, ka LVM attÄls tiek pÄrveidots par Ceph RBD. Izpildes laiks galvenokÄrt ir atkarÄ«gs no attÄla lieluma:
PÄc konvertÄÅ”anas paliks LVM attÄls, kas noderÄs, ja VM migrÄÅ”ana uz RBD neizdodas un izmaiÅas ir jÄatceļ. TurklÄt, lai varÄtu Ätri atsaukt izmaiÅas, izveidosim virtuÄlÄs maŔīnas konfigurÄcijas faila dublÄjumu:
... un rediÄ£Ät oriÄ£inÄlu (vm_name.xml). AtradÄ«sim bloku ar diska aprakstu (sÄkas ar rindiÅu <disk type='file' device='disk'> un beidzas ar </disk>) un samaziniet to lÄ«dz Å”Ädai formai:
Uz protokolu source ir norÄdÄ«ta adrese krÄtuvei Ceph UBR (Ŕī ir adrese, kas norÄda Ceph baseina nosaukumu un UBR attÄlu, kas tika noteikts pirmajÄ posmÄ).
BlokÄ secret veids ir norÄdÄ«ts ceph, kÄ arÄ« noslÄpuma UUID, lai ar to izveidotu savienojumu. TÄs uuid var atrast, izmantojot komandu virsh secret-list.
BlokÄ host ir norÄdÄ«tas Ceph monitoru adreses.
PÄc konfigurÄcijas faila rediÄ£ÄÅ”anas un LVM konvertÄÅ”anas uz RBD pabeigÅ”anas varat lietot modificÄto konfigurÄcijas failu un startÄt virtuÄlo maŔīnu:
virsh define $vm_name.xml
virsh start $vm_name
Ir pienÄcis laiks pÄrbaudÄ«t, vai virtuÄlÄ maŔīna startÄja pareizi: to varat uzzinÄt, piemÄram, pieslÄdzoties tai caur SSH vai virsh.
Ja virtuÄlÄ maŔīna darbojas pareizi un citas problÄmas nav atrastas, varat izdzÄst LVM attÄlu, kas vairs netiek izmantots:
lvremove main/$vm_image_name
SecinÄjums
Ar visiem aprakstÄ«tajiem gadÄ«jumiem saskÄrÄmies praksÄ ā ceram, ka norÄdÄ«jumi palÄ«dzÄs citiem administratoriem atrisinÄt lÄ«dzÄ«gas problÄmas. Ja jums ir komentÄri vai citi lÄ«dzÄ«gi stÄsti no jÅ«su pieredzes, izmantojot Ceph, mÄs ar prieku tos redzÄsim komentÄros!