Vidokezo na mbinu za kufanya kazi na Ceph katika miradi yenye shughuli nyingi

Vidokezo na mbinu za kufanya kazi na Ceph katika miradi yenye shughuli nyingi

Kwa kutumia Ceph kama hifadhi ya mtandao katika miradi iliyo na mizigo tofauti, tunaweza kukutana na kazi mbalimbali ambazo mwanzoni hazionekani kuwa rahisi au ndogo. Kwa mfano:

  • uhamiaji wa data kutoka kwa Ceph ya zamani hadi mpya na matumizi ya sehemu ya seva za awali kwenye nguzo mpya;
  • suluhisho la shida ya ugawaji wa nafasi ya diski katika Ceph.

Kukabiliana na matatizo hayo, tunakabiliwa na haja ya kuondoa kwa usahihi OSD bila kupoteza data, ambayo ni muhimu hasa wakati wa kushughulika na kiasi kikubwa cha data. Hii itajadiliwa katika makala.

Njia zilizoelezewa hapa chini zinafaa kwa toleo lolote la Ceph. Kwa kuongeza, ukweli kwamba Ceph inaweza kuhifadhi kiasi kikubwa cha data itazingatiwa: ili kuzuia kupoteza data na matatizo mengine, baadhi ya vitendo "vitapasuliwa" katika wengine kadhaa.

Dibaji kuhusu OSD

Kwa kuwa mapishi mawili kati ya matatu yaliyojadiliwa yamewekwa kwa OSD (Daemon ya Hifadhi ya Kitu), kabla ya kupiga mbizi katika sehemu ya vitendo - kwa ufupi kuhusu ni nini katika Ceph na kwa nini ni muhimu sana.

Kwanza kabisa, inapaswa kusemwa kuwa nguzo nzima ya Ceph ina OSD nyingi. Kadiri zinavyozidi, ndivyo idadi ya data ya bure inavyoongezeka katika Ceph. Ni rahisi kuelewa kutoka hapa kazi kuu ya OSD: Huhifadhi data ya kitu cha Ceph kwenye mifumo ya faili ya nodi zote za nguzo na hutoa ufikiaji wa mtandao kwa hiyo (kwa kusoma, kuandika, na maombi mengine).

Katika kiwango sawa, vigezo vya kurudia vimewekwa kwa kunakili vitu kati ya OSD tofauti. Na hapa unaweza kukutana na matatizo mbalimbali, ufumbuzi ambao utajadiliwa hapa chini.

Kesi namba 1. Ondoa OSD kwa usalama kutoka kwa nguzo ya Ceph bila kupoteza data

Haja ya kuondoa OSD inaweza kusababishwa na kuondoa seva kutoka kwa nguzo - kwa mfano, kuibadilisha na seva nyingine - ambayo ndiyo iliyotupata, na kusababisha uandishi wa nakala hii. Kwa hivyo, lengo kuu la udanganyifu ni kutoa OSD na mons zote kwenye seva fulani ili iweze kusimamishwa.

Kwa urahisi na kuepuka hali ambapo, wakati wa kutekeleza amri, tunafanya makosa katika kuonyesha OSD inayohitajika, tutaweka kutofautiana tofauti, thamani ambayo itakuwa namba ya OSD kufutwa. Hebu tumpigie ${ID} - hapa na chini, tofauti kama hiyo inachukua nafasi ya nambari ya OSD ambayo tunafanya kazi nayo.

Wacha tuangalie hali kabla ya kuanza kazi:

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

Ili kuanzisha uondoaji wa OSD, utahitaji kufanya kazi vizuri reweight juu yake hadi sifuri. Kwa njia hii tunapunguza kiasi cha data katika OSD kwa kuisawazisha kwa OSD nyingine. Ili kufanya hivyo, endesha amri zifuatazo:

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

... na kadhalika hadi sifuri.

Usawazishaji laini unahitajikaili usipoteze data. Hii ni kweli hasa ikiwa OSD ina kiasi kikubwa cha data. Ili kuhakikisha kuwa baada ya kutekeleza amri reweight kila kitu kilikwenda vizuri, unaweza kuikamilisha ceph -s au katika dirisha la terminal tofauti kukimbia ceph -w ili kuona mabadiliko katika muda halisi.

Wakati OSD "imeondolewa", unaweza kuendelea na operesheni ya kawaida ili kuiondoa. Ili kufanya hivyo, uhamishe OSD inayotaka kwa serikali down:

ceph osd down osd.${ID}

Wacha "tuvute" OSD kutoka kwa nguzo:

ceph osd out osd.${ID}

Wacha tusitishe huduma ya OSD na tupunguze kizigeu chake katika FS:

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

Ondoa OSD kutoka Ramani ya CRUSH:

ceph osd crush remove osd.${ID}

Wacha tufute mtumiaji wa OSD:

ceph auth del osd.${ID}

Na mwishowe, wacha tuondoe OSD yenyewe:

ceph osd rm osd.${ID}

Kumbuka: Ikiwa unatumia toleo la Ceph Luminous au toleo la juu zaidi, basi hatua za juu za kuondoa OSD zinaweza kupunguzwa hadi amri mbili:

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

Ikiwa, baada ya kukamilisha hatua zilizoelezwa hapo juu, unaendesha amri ceph osd tree, basi inapaswa kuwa wazi kuwa kwenye seva ambapo kazi ilifanywa hakuna OSD tena ambazo shughuli zilizo hapo juu zilifanywa:

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

Njiani, kumbuka kuwa hali ya nguzo ya Ceph itaenda HEALTH_WARN, na pia tutaona kupungua kwa idadi ya OSD na kiasi cha nafasi ya disk inapatikana.

Ifuatayo itaelezea hatua ambazo zitahitajika ikiwa unataka kuzima kabisa seva na, ipasavyo, uiondoe kutoka kwa Ceph. Katika kesi hii, ni muhimu kukumbuka Kabla ya kuzima seva, lazima uondoe OSD zote kwenye seva hii.

Ikiwa hakuna OSD zaidi zilizobaki kwenye seva hii, basi baada ya kuziondoa unahitaji kuwatenga seva kutoka kwa ramani ya OSD. hv-2kwa kuendesha amri ifuatayo:

ceph osd crush rm hv-2

Futa mon kutoka kwa seva hv-2kwa kuendesha amri hapa chini kwenye seva nyingine (yaani katika kesi hii, on hv-1):

ceph-deploy mon destroy hv-2

Baada ya hayo, unaweza kusimamisha seva na kuanza vitendo vifuatavyo (kuipeleka tena, nk).

Kesi namba 2. Usambazaji wa nafasi ya diski katika nguzo ya Ceph iliyoundwa tayari

Nitaanza hadithi ya pili na utangulizi kuhusu PG (Vikundi vya Uwekaji) Jukumu kuu la PG katika Ceph kimsingi ni kukusanya vitu vya Ceph na kuiga zaidi katika OSD. Fomula ambayo unaweza kuhesabu kiasi kinachohitajika cha PG iko ndani sehemu husika Nyaraka za Ceph. Suala hili pia linajadiliwa hapo kwa mifano maalum.

Kwa hivyo: moja ya shida za kawaida wakati wa kutumia Ceph ni nambari isiyo na usawa ya OSD na PG kati ya mabwawa katika Ceph.

Kwanza, kwa sababu ya hili, hali inaweza kutokea wakati PG nyingi sana zimeainishwa kwenye bwawa ndogo, ambayo kimsingi ni matumizi yasiyo ya busara ya nafasi ya diski kwenye nguzo. Pili, katika mazoezi kuna tatizo kubwa zaidi: data kufurika katika moja ya OSDs. Hii inahusisha kundi la mpito la kwanza kwa jimbo HEALTH_WARN, na kisha HEALTH_ERR. Sababu ya hii ni kwamba Ceph, wakati wa kuhesabu idadi inayopatikana ya data (unaweza kuipata kwa MAX AVAIL katika pato la amri ceph df kwa kila dimbwi kivyake) inategemea kiasi cha data inayopatikana katika OSD. Ikiwa hakuna nafasi ya kutosha katika angalau OSD moja, hakuna data zaidi inayoweza kuandikwa hadi data isambazwe ipasavyo kati ya OSD zote.

Inafaa kufafanua kuwa shida hizi huamuliwa kwa kiasi kikubwa katika hatua ya usanidi wa nguzo ya Ceph. Moja ya zana unaweza kutumia ni Ceph PGCalc. Kwa msaada wake, kiasi kinachohitajika cha PG kinahesabiwa wazi. Walakini, unaweza pia kuigeukia katika hali ambayo nguzo ya Ceph tayari imeundwa vibaya. Inafaa kufafanua hapa kuwa kama sehemu ya kazi ya kurekebisha utahitaji kupunguza idadi ya PGs, na huduma hii haipatikani katika matoleo ya zamani ya Ceph (ilionekana tu katika toleo. Nautilus).

Kwa hiyo, hebu fikiria picha ifuatayo: nguzo ina hali HEALTH_WARN kutokana na moja ya OSD kukosa nafasi. Hii itaonyeshwa na hitilafu HEALTH_WARN: 1 near full osd. Chini ni algorithm ya kupata nje ya hali hii.

Kwanza kabisa, unahitaji kusambaza data inayopatikana kati ya OSD zilizobaki. Tayari tulifanya operesheni kama hiyo katika kesi ya kwanza, tulipo "mimina" nodi - na tofauti pekee ambayo sasa tutahitaji kupunguza kidogo. reweight. Kwa mfano, hadi 0.95:

ceph osd reweight osd.${ID} 0.95

Hii inafungua nafasi ya diski katika OSD na kurekebisha hitilafu katika ceph health. Walakini, kama ilivyosemwa tayari, shida hii hufanyika kwa sababu ya usanidi usio sahihi wa Ceph katika hatua za mwanzo: ni muhimu sana kufanya urekebishaji ili isionekane katika siku zijazo.

Katika kesi yetu maalum, yote yalikuja kwa:

  • thamani ya juu sana replication_count katika moja ya mabwawa,
  • PG nyingi sana kwenye bwawa moja na kidogo sana kwenye lingine.

Hebu tumia kikokotoo kilichotajwa tayari. Inaonyesha wazi kile kinachohitajika kuingizwa na, kwa kanuni, hakuna chochote ngumu. Baada ya kuweka vigezo muhimu, tunapata mapendekezo yafuatayo:

Kumbuka: Ikiwa unasanidi nguzo ya Ceph kutoka mwanzo, kazi nyingine muhimu ya kikokotoo ni uundaji wa amri ambazo zitaunda mabwawa kutoka mwanzo na vigezo vilivyoainishwa kwenye jedwali.

Safu wima ya mwisho hukusaidia kusogeza - Hesabu ya PG Iliyopendekezwa. Kwa upande wetu, ya pili pia ni muhimu, ambapo parameta ya kuiga inaonyeshwa, kwani tuliamua kubadilisha kizidishi cha replication.

Kwa hivyo, kwanza unahitaji kubadilisha vigezo vya kurudia - hii inafaa kufanya kwanza, kwani kwa kupunguza kizidisha, tutafungua nafasi ya diski. Wakati amri inavyofanya, utaona kuwa nafasi inayopatikana ya diski itaongezeka:

ceph osd pool $pool_name set $replication_size

Na baada ya kukamilika kwake, tunabadilisha maadili ya parameter pg_num ΠΈ pgp_num kama ifuatavyo:

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

Ni muhimu: ni lazima tubadilishe idadi ya PG kwa mfuatano katika kila dimbwi na tusibadilishe thamani katika madimbwi mengine hadi maonyo yatoweke. "Upungufu wa data iliyoharibika" ΠΈ "n-idadi ya pgs imeharibiwa".

Unaweza pia kuangalia kuwa kila kitu kilikwenda vizuri kwa kutumia matokeo ya amri ceph health detail ΠΈ ceph -s.

Kesi namba 3. Kuhamisha mashine pepe kutoka LVM hadi Ceph RBD

Katika hali ambapo mradi hutumia mashine za kawaida zilizowekwa kwenye seva za chuma-wazi zilizokodishwa, suala la uhifadhi usio na hitilafu mara nyingi hutokea. Pia ni kuhitajika sana kuwa kuna nafasi ya kutosha katika hifadhi hii ... Hali nyingine ya kawaida: kuna mashine ya kawaida yenye hifadhi ya ndani kwenye seva na unahitaji kupanua diski, lakini hakuna mahali pa kwenda, kwa sababu hakuna. nafasi ya bure ya diski iliyobaki kwenye seva.

Tatizo linaweza kutatuliwa kwa njia tofauti - kwa mfano, kwa kuhamia kwenye seva nyingine (ikiwa kuna moja) au kuongeza disks mpya kwenye seva. Lakini si mara zote inawezekana kufanya hivyo, kwa hivyo kuhama kutoka LVM hadi Ceph kunaweza kuwa suluhisho bora kwa shida hii. Kwa kuchagua chaguo hili, sisi pia hurahisisha mchakato zaidi wa uhamiaji kati ya seva, kwani hakutakuwa na haja ya kuhamisha hifadhi ya ndani kutoka kwa hypervisor moja hadi nyingine. Kinachovutia tu ni kwamba itabidi usimamishe VM wakati kazi inafanywa.

Kichocheo kifuatacho kinachukuliwa kutoka makala kutoka kwa blogu hii, maagizo ambayo yamejaribiwa kwa vitendo. Japo kuwa, njia ya uhamiaji bila shida pia imeelezewa hapo, hata hivyo, kwa upande wetu haikuhitajika tu, kwa hiyo hatukuiangalia. Ikiwa hii ni muhimu kwa mradi wako, tutafurahi kusikia kuhusu matokeo katika maoni.

Wacha tuendelee kwenye sehemu ya vitendo. Katika mfano tunatumia virsh na, ipasavyo, libvirt. Kwanza, hakikisha kuwa dimbwi la Ceph ambalo data itahamishiwa limeunganishwa na libvirt:

virsh pool-dumpxml $ceph_pool

Maelezo ya bwawa lazima yawe na data ya unganisho kwa Ceph iliyo na data ya idhini.

Hatua inayofuata ni kwamba picha ya LVM inabadilishwa kuwa Ceph RBD. Muda wa utekelezaji unategemea hasa saizi ya picha:

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

Baada ya ubadilishaji, picha ya LVM itasalia, ambayo itakuwa muhimu ikiwa kuhamisha VM hadi RBD kutashindwa na itabidi urudishe mabadiliko. Pia, ili kuweza kurudisha nyuma mabadiliko haraka, wacha tufanye nakala rudufu ya faili ya usanidi wa mashine pepe:

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

... na uhariri asili (vm_name.xml) Wacha tupate kizuizi na maelezo ya diski (inaanza na mstari <disk type='file' device='disk'> na kuishia na </disk>) na uipunguze kwa fomu ifuatayo:

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

Hebu tuangalie baadhi ya maelezo:

  1. Kwa itifaki source anwani ya uhifadhi katika Ceph RBD imeonyeshwa (hii ndiyo anwani inayoonyesha jina la bwawa la Ceph na picha ya RBD, ambayo iliamuliwa katika hatua ya kwanza).
  2. Katika kizuizi secret aina imeonyeshwa ceph, pamoja na UUID ya siri ya kuunganishwa nayo. Uuid yake inaweza kupatikana kwa kutumia amri virsh secret-list.
  3. Katika kizuizi host anwani kwa wachunguzi wa Ceph zimeonyeshwa.

Baada ya kuhariri faili ya usanidi na kukamilisha ubadilishaji wa LVM hadi RBD, unaweza kutumia faili ya usanidi iliyorekebishwa na kuanza mashine pepe:

virsh define $vm_name.xml
virsh start $vm_name

Ni wakati wa kuangalia kuwa mashine ya kawaida ilianza kwa usahihi: unaweza kujua, kwa mfano, kwa kuunganishwa nayo kupitia SSH au kupitia virsh.

Ikiwa mashine ya kawaida inafanya kazi kwa usahihi na haujapata shida zingine, basi unaweza kufuta picha ya LVM ambayo haitumiki tena:

lvremove main/$vm_image_name

Hitimisho

Tulikutana na kesi zote zilizoelezwa katika mazoezi - tunatarajia kwamba maelekezo yatasaidia wasimamizi wengine kutatua matatizo sawa. Ikiwa una maoni au hadithi zingine zinazofanana na uzoefu wako kwa kutumia Ceph, tutafurahi kuziona kwenye maoni!

PS

Soma pia kwenye blogi yetu:

Chanzo: mapenzi.com

Kuongeza maoni