Маслиҳатҳо ва ҳилаҳо барои кор бо Ceph дар лоиҳаҳои банд

Маслиҳатҳо ва ҳилаҳо барои кор бо Ceph дар лоиҳаҳои банд

Истифодаи Ceph ҳамчун нигаҳдории шабака дар лоиҳаҳои дорои сарбориҳои гуногун, мо метавонем бо вазифаҳои гуногун дучор шавем, ки дар назари аввал оддӣ ё ночиз ба назар намерасанд. Барои намуна:

  • интиқоли маълумот аз Ceph-и кӯҳна ба нав бо истифодаи қисман серверҳои қаблӣ дар кластери нав;
  • ҳалли масъалаи тақсимоти фазои диск дар Ceph.

Ҳангоми мубориза бо чунин мушкилот, мо ба зарурати дуруст хориҷ кардани OSD бе гум кардани маълумот дучор мешавем, ки ин махсусан ҳангоми кор бо миқдори зиёди маълумот муҳим аст. Ин дар мақола муҳокима хоҳад шуд.

Усулҳои дар зер тавсифшуда барои ҳама версияи Ceph мувофиқанд. Илова бар ин, далели он, ки Ceph метавонад миқдори зиёди маълумотро нигоҳ дорад, ба назар гирифта мешавад: барои пешгирии талафи маълумот ва мушкилоти дигар, баъзе амалҳо ба якчанд амали дигар "тақсим" карда мешаванд.

Сарсухан дар бораи OSD

Азбаски ду аз се рецепти дар баррасишуда ба OSD бахшида шудаанд (Демон нигаҳдории объект), пеш аз ворид шудан ба қисми амалӣ - мухтасар дар бораи он, ки он дар Ceph чист ва чаро он ин қадар муҳим аст.

Пеш аз ҳама, бояд гуфт, ки тамоми кластери Ceph аз бисёр OSD-ҳо иборат аст. Чӣ қадаре ки онҳо зиёд бошанд, ҳаҷми маълумот дар Ceph ҳамон қадар зиёд мешавад. Аз ин ҷо фаҳмидан осон аст Функсияи асосии OSD: Он маълумоти объекти Ceph-ро дар системаҳои файлии ҳама гиреҳҳои кластер нигоҳ медорад ва дастрасии шабакаро ба он таъмин мекунад (барои хондан, навиштан ва дархостҳои дигар).

Дар як сатҳ, параметрҳои такрорӣ тавассути нусхабардории объектҳо байни экранҳои гуногун муқаррар карда мешаванд. Ва дар ин ҷо шумо метавонед бо мушкилоти гуногун рӯ ба рӯ шавед, ки роҳҳои ҳалли онҳо минбаъд муҳокима хоҳанд шуд.

Парвандаи № 1. OSD-ро аз кластери Ceph бе гум кардани маълумот бехатар хориҷ кунед

Зарурати хориҷ кардани OSD метавонад аз хориҷ кардани сервер аз кластер бошад - масалан, иваз кардани он бо сервери дигар - ин чизест, ки бо мо рӯй дод ва боиси навиштани ин мақола гардид. Ҳамин тариқ, ҳадафи ниҳоии манипуляция истихроҷи ҳама OSD-ҳо ва монҳо дар сервери додашуда мебошад, то он боздошта шавад.

Барои роҳат ва роҳ надодан ба вазъияте, ки ҳангоми муайян кардани OSD-и зарурӣ ҳангоми иҷрои фармонҳо хато мекунем, мо тағирёбандаи алоҳидаеро муқаррар мекунем, ки арзиши он рақами экрани ҳазфшаванда хоҳад буд. Биёед ба вай занг занем ${ID} — дар ин чо ва дар поён чунин тагйирёбанда шумораи ОСД-ро, ки мо бо он кор карда истодаем, иваз мекунад.

Пеш аз оғози кор, биёед ба вазъият назар андозем:

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

Барои оғози тозакунии экрани экран, ба шумо лозим меояд, ки бемаънӣ иҷро кунед reweight дар бораи он ба сифр. Ҳамин тариқ, мо миқдори маълумотро дар OSD тавассути мувозинат кардани он ба дигар экранҳои экран кам мекунем. Барои ин, фармонҳои зеринро иҷро кунед:

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

... ва ғайра то сифр.

Мувозинати ҳамвор талаб карда мешавадто ки маълумот гум нашавад. Ин махсусан дуруст аст, агар OSD миқдори зиёди маълумотро дар бар гирад. Барои боварӣ ҳосил кардан, ки пас аз иҷрои фармонҳо reweight ҳама чиз хуб рафт, шумо метавонед онро анҷом диҳед ceph -s ё дар равзанаи терминали алоҳида иҷро кунед ceph -w то ки тағиротро дар вақти воқеӣ мушоҳида кунанд.

Вақте ки экрани экран "холӣ" мешавад, шумо метавонед амалиёти стандартиро барои хориҷ кардани он идома диҳед. Барои ин, OSD-и дилхоҳро ба давлат интиқол диҳед down:

ceph osd down osd.${ID}

Биёед OSD-ро аз кластер "кашем":

ceph osd out osd.${ID}

Биёед хидмати OSD-ро қатъ кунем ва қисмати онро дар FS ҷудо кунем:

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

OSD-ро аз Харитаи CRUSH:

ceph osd crush remove osd.${ID}

Биёед корбари OSD-ро нест кунем:

ceph auth del osd.${ID}

Ва ниҳоят, биёед худи OSD-ро хориҷ кунем:

ceph osd rm osd.${ID}

эрод гирифтан: Агар шумо версияи Ceph Luminous ё навтарро истифода баред, пас қадамҳои дар боло зикршуда барои бартараф кардани экрани экран метавонанд ба ду фармон кам карда шаванд:

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

Агар пас аз анҷом додани амалҳои дар боло тавсифшуда, шумо фармонро иҷро кунед ceph osd tree, пас бояд равшан бошад, ки дар сервере, ки кор анҷом дода шудааст, дигар OSD-ҳо вуҷуд надоранд, ки барои онҳо амалҳои дар боло зикршуда иҷро шудаанд:

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

Дар баробари ин, қайд кунед, ки ҳолати кластери Ceph ба HEALTH_WARN, ва мо инчунин коҳиши шумораи OSD-ҳо ва ҳаҷми фазои дастраси дискро мебинем.

Дар зер қадамҳое тасвир карда мешаванд, ки агар шумо хоҳед, ки серверро комилан қатъ кунед ва мувофиқан онро аз Ceph хориҷ кунед. Дар ин ҳолат, муҳим аст, ки дар хотир доред Пеш аз хомӯш кардани сервер, шумо бояд ҳамаи экранҳои экранро хориҷ кунед дар ин сервер.

Агар дар ин сервер дигар экранҳои экран набошанд, пас аз нест кардани онҳо шумо бояд серверро аз харитаи OSD хориҷ кунед hv-2бо иҷро кардани фармони зерин:

ceph osd crush rm hv-2

Нест кардан mon аз сервер hv-2тавассути иҷро кардани фармони зер дар сервери дигар (яъне дар ин ҳолат, дар hv-1):

ceph-deploy mon destroy hv-2

Пас аз ин, шумо метавонед серверро қатъ кунед ва амалҳои минбаъдаро оғоз кунед (аз нав ҷойгиркунии он ва ғайра).

Парвандаи № 2. Тақсимоти фазои диск дар кластери аллакай сохташудаи Ceph

Ман ҳикояи дуюмро бо муқаддима дар бораи PG оғоз мекунам (Гурӯҳҳои ҷойгиркунӣ). Нақши асосии PG дар Ceph пеш аз ҳама ҷамъ кардани объектҳои Ceph ва такрори минбаъдаи онҳо дар OSD мебошад. Формулае, ки бо он шумо метавонед миқдори зарурии PG-ро ҳисоб кунед фасли дахлдор Ҳуҷҷатҳои Ceph. Дар он чо ин масъала хам бо мисолхои конкретй мухокима карда мешавад.

Ҳамин тавр: яке аз мушкилоти маъмул ҳангоми истифодаи Ceph ин шумораи номутаносиби OSD ва PG байни ҳавзҳо дар Ceph мебошад.

Аввалан, аз ин сабаб, вазъ метавонад ба миён ояд, ки дар ҳавзи хурд миқдори зиёди PG-ҳо нишон дода шудаанд, ки аслан истифодаи беақлонаи фазои диск дар кластер мебошад. Сониян, дар амал як мушкили чиддитаре ба миён меояд: пур шудани маълумот дар яке аз ОСД. Ин дар навбати аввал ба давлат гузаштани кластерро дар назар дорад HEALTH_WARN, ва он гоҳ HEALTH_ERR. Сабаби ин дар он аст, ки Ceph, ҳангоми ҳисоб кардани миқдори мавҷудаи маълумот (шумо метавонед онро тавассути MAX AVAIL дар баромади фармон ceph df барои ҳар як ҳавзи алоҳида) ба миқдори маълумоти мавҷуда дар OSD асос ёфтааст. Агар дар ҳадди аққал як экрани экран фазои кофӣ набошад, то он даме, ки маълумот дар байни ҳамаи экранҳои экран дуруст тақсим карда нашавад, дигар маълумот навишта намешавад.

Бояд равшан кард, ки ин мушкилот асосан дар марҳилаи конфигуратсияи кластери Ceph ҳал карда мешаванд. Яке аз воситаҳое, ки шумо метавонед истифода баред Ceph PGCalc. Бо ёрии он микдори зарурии PG аник хисоб карда мешавад. Аммо, шумо инчунин метавонед ба он дар вазъияте муроҷиат кунед, ки кластери Ceph аллакай нодуруст танзим карда шудааст. Дар ин ҷо фаҳмондан лозим аст, ки ҳамчун як қисми корҳои ислоҳӣ ба шумо эҳтимоли зиёд лозим аст, ки шумораи PGҳоро кам кунед ва ин хусусият дар версияҳои кӯҳнаи Ceph мавҷуд нест (он танҳо дар версия пайдо шудааст) Nautilus).

Пас, биёед тасвири зеринро тасаввур кунем: кластер дорои статус аст HEALTH_WARN аз сабаби он ки яке аз OSD кор намекунад. Ин бо хатогӣ нишон дода мешавад HEALTH_WARN: 1 near full osd. Дар зер алгоритми баромадан аз ин вазъият оварда шудааст.

Пеш аз ҳама, шумо бояд маълумоти мавҷударо байни OSD-ҳои боқимонда тақсим кунед. Мо аллакай як амалиёти шабеҳро дар ҳолати аввал анҷом дода будем, вақте ки гиреҳро "резондем" - бо ягона фарқият, ки ҳоло мо бояд каме кам кунем reweight. Масалан, то 0.95:

ceph osd reweight osd.${ID} 0.95

Ин фазои дискро дар OSD холӣ мекунад ва хатогиро дар саломатии ceph ислоҳ мекунад. Аммо, тавре ки аллакай зикр гардид, ин мушкилот асосан аз сабаби конфигуратсияи нодурусти Ceph дар марҳилаҳои аввал ба миён меояд: аз нав конфигуратсия кардан хеле муҳим аст, то ки он дар оянда пайдо нашавад.

Дар мисоли мо, ҳамааш ба чунин натиҷа расид:

  • арзиши хеле баланд replication_count дар яке аз ҳавзҳо,
  • аз ҳад зиёд PG дар як ҳавз ва хеле кам дар дигар.

Биёед ҳисобкунаки дар боло зикршударо истифода барем. Он ба таври возеҳ нишон медиҳад, ки чӣ бояд ворид карда шавад ва дар асл, ҳеҷ чизи мураккаб нест. Пас аз муқаррар кардани параметрҳои зарурӣ, мо тавсияҳои зеринро мегирем:

эрод гирифтан: Агар шумо кластери Ceph-ро аз сифр насб карда истода бошед, вазифаи дигари муфиди ҳисобкунак тавлиди фармонҳост, ки ҳавзҳоро аз сифр бо параметрҳои дар ҷадвал нишондодашуда эҷод мекунанд.

Сутуни охирин ба шумо барои паймоиш кӯмак мекунад - Шумораи тавсияшудаи PG. Дар ҳолати мо, дуюмаш низ муфид аст, ки дар он параметри такрорӣ нишон дода шудааст, зеро мо тасмим гирифтем, ки мултипликатори такрориро иваз кунем.

Ҳамин тавр, аввал ба шумо лозим аст, ки параметрҳои такрориро тағир диҳед - ин аввал бояд иҷро шавад, зеро бо кам кардани мултипликатор мо фазои дискро холӣ мекунем. Вақте ки фармон иҷро мешавад, шумо хоҳед дид, ки фазои мавҷудаи диск зиёд мешавад:

ceph osd pool $pool_name set $replication_size

Ва пас аз анҷоми он, мо арзишҳои параметрҳоро тағир медиҳем pg_num и pgp_num чунин аст:

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

муҳим: мо бояд шумораи PG-ро дар ҳар як ҳавз пай дар пай тағир диҳем ва то он даме ки огоҳиҳо нопадид нашавад, арзишҳоро дар ҳавзҳои дигар тағир надиҳем. "Истифодаи маълумоти пастшуда" и "n-шумораи саҳифаҳои таназзулшуда".

Шумо инчунин метавонед тафтиш кунед, ки ҳама чиз бо истифода аз натиҷаҳои фармон хуб буд ceph health detail и ceph -s.

Парвандаи № 3. Муҳоҷирати мошини виртуалӣ аз LVM ба Ceph RBD

Дар вазъияте, ки лоиҳа мошинҳои виртуалии дар серверҳои луён-металии ба иҷора гирифташударо истифода мебарад, аксар вақт масъалаи нигоҳдории ба хатогиҳо тобовар ба миён меояд. Инчунин хеле матлуб аст, ки дар ин анбор фазои кофӣ мавҷуд бошад... Вазъияти дигари маъмул: дар сервер мошини маҷозӣ мавҷуд аст ва шумо бояд дискро васеъ кунед, аммо ҷои рафтан нест, зеро он ҷо нест. фазои диски озод дар сервер боқӣ мемонад.

Мушкилотро бо роҳҳои гуногун ҳал кардан мумкин аст - масалан, бо интиқол ба сервери дигар (агар мавҷуд бошад) ё илова кардани дискҳои нав ба сервер. Аммо ин кор на ҳама вақт имконпазир аст, аз ин рӯ муҳоҷират аз LVM ба Ceph метавонад як ҳалли аълои ин мушкилот бошад. Бо интихоби ин хосият, мо инчунин раванди минбаъдаи интиқоли байни серверҳоро содда мекунем, зеро зарурати интиқоли нигаҳдории маҳаллӣ аз як гипервизор ба дигараш вуҷуд надорад. Ягона сайд дар он аст, ки шумо бояд VM-ро ҳангоми иҷрои кор қатъ кунед.

Дорухат зерин аз он гирифта шудааст мақола аз ин блог, ки дастурхои он дар амал санчида шудаанд. Дар омади гап, дар он чо усули мухочирати бемалол низ баён шудааст, аммо дар мо ин оддй лозим набуд, бинобар ин мо онро тафтиш накардем. Агар ин барои лоиҳаи шумо муҳим бошад, мо аз шунидани натиҷаҳо дар шарҳҳо шод хоҳем шуд.

Биёед ба қисми амалӣ гузарем. Дар мисол мо virsh ва мувофиқан libvirt-ро истифода мебарем. Аввалан, боварӣ ҳосил кунед, ки ҳавзи Ceph, ки маълумот ба он интиқол дода мешавад, ба libvirt пайваст аст:

virsh pool-dumpxml $ceph_pool

Тавсифи ҳавз бояд дорои маълумоти пайвастшавӣ ба Ceph бо маълумоти иҷозат.

Қадами навбатӣ ин аст, ки тасвири LVM ба Ceph RBD табдил дода мешавад. Вақти иҷро асосан аз андозаи тасвир вобаста аст:

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

Пас аз табдилдиҳӣ, тасвири LVM боқӣ мемонад, ки агар интиқоли VM ба RBD ноком шавад ва шумо бояд тағиротро баргардонед, муфид хоҳад буд. Инчунин, барои зуд баргардонидани тағирот, биёед файли конфигуратсияи мошини виртуалиро нусхабардорӣ кунем:

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

... ва нусхаи аслиро таҳрир кунед (vm_name.xml). Биёед блокеро бо тавсифи диск пайдо кунем (аз сатри <disk type='file' device='disk'> ва бо тамом мешавад </disk>) ва онро ба шакли зерин кам кунед:

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

Биёед ба баъзе тафсилот назар андозем:

  1. Ба протокол source суроғаи нигаҳдорӣ дар Ceph RBD нишон дода шудааст (ин суроғаест, ки номи ҳавзи Ceph ва тасвири RBD, ки дар марҳилаи аввал муайян шудааст) нишон дода шудааст.
  2. Дар блок secret намуд нишон дода шудааст ceph, инчунин UUID-и сирри пайваст шудан ба он. uuid-и онро бо истифода аз фармон пайдо кардан мумкин аст virsh secret-list.
  3. Дар блок host суроғаҳо ба мониторҳои Ceph нишон дода шудаанд.

Пас аз таҳрири файли конфигуратсия ва ба итмом расонидани табдили LVM ба RBD, шумо метавонед файли конфигуратсияи тағирёфтаро татбиқ кунед ва мошини виртуалиро оғоз кунед:

virsh define $vm_name.xml
virsh start $vm_name

Вақти он расидааст, ки мошини маҷозӣ дуруст оғоз шудааст: шумо метавонед, масалан, тавассути пайваст шудан ба он тавассути SSH ё тавассути virsh.

Агар мошини виртуалӣ дуруст кор кунад ва шумо ягон мушкилоти дигар наёфта бошед, шумо метавонед тасвири LVM-ро, ки дигар истифода намешавад, нест кунед:

lvremove main/$vm_image_name

хулоса

Мо бо ҳамаи ҳолатҳои тавсифшуда дар амал дучор омадем - мо умедворем, ки дастурҳо ба маъмурони дигар дар ҳалли мушкилоти шабеҳ кӯмак хоҳанд кард. Агар шумо аз таҷрибаи худ бо истифодаи Ceph шарҳҳо ё дигар ҳикояҳои шабеҳ дошта бошед, мо аз дидани онҳо дар шарҳҳо хушҳолем!

PS

Инчунин дар блоги мо хонед:

Манбаъ: will.com

Илова Эзоҳ