Serişte û hîleyên ji bo xebata bi Ceph re di projeyên mijûl de

Serişte û hîleyên ji bo xebata bi Ceph re di projeyên mijûl de

Bi karanîna Ceph wekî hilanîna torê di projeyên bi bargiraniyên cihêreng de, dibe ku em bi karên cihêreng re rû bi rû bimînin ku di nihêrîna pêşîn de ne hêsan an ne hindik xuya dikin. Bo nimûne:

  • koçkirina daneyan ji Cephê kevn ber bi ya nû ve bi karanîna qismî ya serverên berê yên di koma nû de;
  • çareseriya pirsgirêka veqetandina cîhê dîskê li Ceph.

Dema ku bi pirsgirêkên weha re mijûl dibin, em bi hewcedariya rast derxistina OSD-ê bêyî windakirina daneyan re rû bi rû ne, ku bi taybetî dema ku bi jimarek mezin daneyê re mijûl dibin girîng e. Ev ê di gotarê de were nîqaş kirin.

Rêbazên ku li jêr têne diyar kirin ji bo her guhertoyek Ceph têkildar in. Wekî din, rastiya ku Ceph dikare hejmareke mezin a daneyan hilîne dê were hesibandin: ji bo pêşîgirtina windabûna daneyê û pirsgirêkên din, hin kiryar dê li çend kesên din "parçe" bibin.

Pêşgotin li ser OSD

Ji ber ku du ji sê şîretên ku hatine nîqaş kirin ji OSD re têne veqetandin (Object Storage Daemon), berî ku bikevin beşa pratîkî - bi kurtî li ser çi ye li Ceph û çima ew qas girîng e.

Berî her tiştî, divê were gotin ku tevahiya koma Ceph ji gelek OSD-yan pêk tê. Zêdetir hebin, hêjmara daneya belaş li Ceph ew qas mezin dibe. Ji vir tê fêmkirin hêsan e fonksiyona sereke ya OSD: Ew daneyên tiştên Ceph li ser pergalên pelan ên hemî girêkên komê hilîne û gihîştina torê jê re peyda dike (ji bo xwendin, nivîsandin û daxwazên din).

Di heman astê de, parametreyên dubarekirinê bi kopîkirina tiştan di navbera OSD-yên cihêreng de têne danîn. Û li vir hûn dikarin bi pirsgirêkên cûrbecûr re rû bi rû bimînin, çareseriyên ku dê li jêr werin nîqaş kirin.

Doza Hejmar 1. Bi ewlehî OSD-ê ji koma Ceph-ê bêyî windakirina daneyê derxînin

Pêdiviya rakirina OSD-ê dibe ku bibe sedema derxistina serverê ji komê - mînakî, şûna wê bi serverek din re - ya ku bi serê me de hat, bû sedema nivîsandina vê gotarê. Bi vî rengî, armanca dawîn a manîpulasyonê derxistina hemî OSD û mons li ser serverek diyarkirî ye da ku ew were sekinandin.

Ji bo rehetiyê û ji bo nehiştina rewşek ku di dema pêkanîna fermanan de, em xeletiyek di nîşankirina OSD-ya pêwîst de bikin, em ê guhêrbarek cihêreng saz bikin, nirxa wê dê bibe hejmara OSD-ya ku were jêbirin. Em bangî wê bikin ${ID} - Li vir û jêr, guhêrbarek weha şûna hejmara OSD-ya ku em pê re dixebitin digire.

Werin em li rewşa berî ku dest bi xebatê bikin binêrin:

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

Ji bo destpêkirina rakirina OSD-ê, hûn ê hewce bikin ku bi rengek xweş tevbigerin reweight li ser wê sifir. Bi vî rengî em mîqdara daneya di OSD-ê de bi hevsengkirina wê li OSD-yên din kêm dikin. Ji bo vê yekê, emrên jêrîn bicîh bikin:

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

... û her weha heya sifirê.

Balansek nerm hewce yeda ku daneyan winda nekin. Ev bi taybetî rast e heke OSD hejmareke mezin a daneyan heye. Ji bo ku piştrast bikin ku piştî pêkanîna fermanan reweight her tişt baş bû, hûn dikarin wê temam bikin ceph -s an jî di pencereyek termînalê de veqetîne ceph -w ji bo ku di demek rast de guhertinan bişopînin.

Dema ku OSD "vala" ye, hûn dikarin bi operasyona standard bimeşin da ku wê jêbirin. Ji bo vê yekê, OSD-ya xwestî ji dewletê re veguhezînin down:

ceph osd down osd.${ID}

Ka em OSD-ê ji komê "derxin":

ceph osd out osd.${ID}

Ka em karûbarê OSD rawestînin û dabeşkirina wê di FS de vekin:

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

OSD-ê jê rake nexşeya CRUSH:

ceph osd crush remove osd.${ID}

Ka em bikarhênerê OSD jêbirin:

ceph auth del osd.${ID}

Û di dawiyê de, em OSD-ê bixwe rakin:

ceph osd rm osd.${ID}

bingotin: Heke hûn guhertoya Ceph Luminous an mezintir bikar tînin, wê hingê gavên rakirina OSD-ê yên jorîn dikarin li du fermanan werin kêm kirin:

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

Ger, piştî qedandina gavên ku li jor hatine destnîşan kirin, hûn fermanê dimeşînin ceph osd tree, wê hingê divê zelal be ku li ser servera ku kar lê hatî kirin êdî OSD-yên ku ji bo wan operasyonên jorîn hatine kirin tune:

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

Di rê de, bala xwe bidin ku dê rewşa koma Ceph ber bi HEALTH_WARN, û em ê di heman demê de kêmbûna hejmara OSD û hêjmara cîhê dîskê ya berdest jî bibînin.

Ger hûn bixwazin serverê bi tevahî rawestînin û, li gorî vê yekê, wê ji Ceph derxînin, dê gavên ku dê hewce bibin diyar bike. Di vê rewşê de, girîng e ku ji bîr mekin Berî girtina serverê, divê hûn hemî OSD-an jê bikin li ser vê serverê.

Ger li ser vê serverê bêtir OSD nemîne, wê hingê piştî rakirina wan hûn hewce ne ku serverê ji nexşeya OSD derxînin. hv-2bi xebitandina fermana jêrîn:

ceph osd crush rm hv-2

Jêkirin mon ji server hv-2bi xebitandina fermana jêrîn li ser serverek din (ango di vê rewşê de, li ser hv-1):

ceph-deploy mon destroy hv-2

Piştî vê yekê, hûn dikarin serverê rawestînin û dest bi çalakiyên paşîn bikin (ji nû ve vekirina wê, hwd.).

Doza hejmar 2. Belavkirina cîhê dîskê di komek Ceph ya ku jixwe hatî afirandin de

Ez ê çîroka duyemîn bi pêşgotinek li ser PG (Komên Cihkirinê). Rola sereke ya PG-ê di Ceph de di serî de berhevkirina tiştên Ceph e û bêtir wan di OSD de dubare dike. Formula ku hûn pê re dikarin mîqdara PG-ya hewce hesab bikin tê de ye beşa têkildar Belgekirina Ceph. Ev mijar jî li wir bi mînakên taybet tê nîqaşkirin.

Ji ber vê yekê: yek ji pirsgirêkên hevpar dema ku Ceph bikar tîne, hejmara nehevseng a OSD û PG di navbera hewzên li Ceph de ye.

Ya yekem, ji ber vê yekê, dibe ku rewşek çêbibe dema ku pir PG-yên di hewzek piçûk de têne destnîşan kirin, ku di bingeh de karanîna neaqilane ya cîhê dîskê di komê de ye. Ya duyemîn, di pratîkê de pirsgirêkek cidîtir heye: di yek ji OSD-ê de daneya zêde. Ev tê wê wateyê ku komê pêşî derbasî dewletê dibe HEALTH_WARN, and then HEALTH_ERR. Sedema vê yekê ev e ku Ceph, dema ku mîqdara daneya berdest hesab dike (hûn dikarin wê ji hêla xwe ve bibînin MAX AVAIL di derketina fermanê de ceph df ji bo her hewzek veqetandî) li gorî mêjera daneyên berdest ên di OSD de ye. Ger bi kêmanî yek OSD-ê de cîh têr nebe, heya ku dane bi rêkûpêk di nav hemî OSD-an de neyê belavkirin, bêtir dane nayê nivîsandin.

Hêjayî gotinê ye ku ev pirsgirêk hene bi piranî di qonaxa veavakirina koma Ceph de têne biryar kirin. Yek ji wan amûrên ku hûn dikarin bikar bînin ev e Ceph PGCalc. Bi alîkariya wê, mîqdara pêwîst a PG bi zelalî tê hesibandin. Lêbelê, hûn dikarin di rewşek ku komika Ceph de tê de jî serî lê bidin êdî bi xeletî vesaz kirin. Li vir hêja ye ku were zelal kirin ku wekî beşek ji xebata rastkirinê hûn ê bi îhtîmalek mezin hewce bikin ku hejmara PG-yan kêm bikin, û ev taybetmendî di guhertoyên kevntir ên Ceph de tune ye (ew tenê di guhertoyê de xuya bû Nautilus).

Ji ber vê yekê, em wêneya jêrîn bifikirin: komik xwedî statûyek e HEALTH_WARN ji ber ku yek ji OSD ji cîhê diqede. Ev ê bi xeletiyek were destnîşan kirin HEALTH_WARN: 1 near full osd. Li jêr algorîtmayek ji bo derketina ji vê rewşê heye.

Berî her tiştî, hûn hewce ne ku daneyên berdest di navbera OSD-yên mayî de belav bikin. Me berê di doza yekem de, gava ku me girêk "dilqand" operasyonek wusa pêk anî - bi tenê cûdahiya ku naha hewce dike ku em hinekî kêm bikin. reweight. Mînakî, heya 0.95:

ceph osd reweight osd.${ID} 0.95

Ev cîhê dîskê di OSD de azad dike û xeletiya di tenduristiya ceph de rast dike. Lêbelê, wekî ku berê jî behs kir, ev pirsgirêk bi piranî ji ber veavakirina çewt a Ceph di qonaxên destpêkê de çêdibe: pir girîng e ku meriv veavakirinek çêbike da ku ew di pêşerojê de xuya neke.

Di doza me ya taybetî de, her tişt derket holê:

  • nirxa pir bilind replication_count li yek ji hewzên,
  • pir zêde PG li hewzek û pir hindik li hewzek din.

Werin em hesabkera ku berê hatî destnîşan kirin bikar bînin. Ew bi zelalî nîşan dide ku çi hewce dike ku têkevin û, di prensîbê de, tiştek tevlihev tune. Piştî ku pîvanên pêwîst danîn, em pêşniyarên jêrîn digirin:

bingotin: Ger hûn komeke Ceph ji sifrê saz dikin, fonksiyonek din a bikêr a hesabkerê hilberîna fermanan e ku dê bi pîvanên ku di tabloyê de hatine destnîşan kirin hewzek ji nû ve biafirîne.

Stûna paşîn ji we re dibe alîkar ku hûn rêve bibin - Hejmara PG-ê pêşniyar kirin. Di doza me de, ya duyemîn jî bikêr e, ku li wir parametreya dubarekirinê tê destnîşan kirin, ji ber ku me biryar da ku em pirjimara dubarekirinê biguhezînin.

Ji ber vê yekê, pêşî hûn hewce ne ku pîvanên dubarekirinê biguhezînin - ev yekem hêja ye ku meriv bike, ji ber ku bi kêmkirina pirjimarê, em ê cîhê dîskê azad bikin. Gava ku ferman pêk tê, hûn ê bibînin ku cîhê dîskê ya berdest dê zêde bibe:

ceph osd pool $pool_name set $replication_size

Û piştî qedandina wê, em nirxên parameterê diguherînin pg_num и pgp_num wiha ye:

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

giring: Divê em di her hewzê de hejmara PG-yan bi rêz biguherînin û heya ku hişyarî nebin nirxan di hewzên din de neguherînin. "Zêdebûna daneyan a têkçûyî" и "n-hejmara pgs kêm bûye".

Her weha hûn dikarin kontrol bikin ku her tişt bi karanîna derketinên fermanê baş derbas bû ceph health detail и ceph -s.

Doza hejmar 3. Koçkirina makîneyek virtual ji LVM berbi Ceph RBD

Di rewşek ku projeyek makîneyên virtual ku li ser serverên tazî-metal ên kirê hatine saz kirin bikar tîne, pir caran pirsgirêka hilanîna xelet-tolerans derdikeve holê. Di heman demê de pir tê xwestin ku di vê hilanînê de cîhek têr hebe... Rewşek din a hevpar: makîneyek virtual bi hilanîna herêmî li ser serverê heye û hûn hewce ne ku dîskê berfireh bikin, lê cîh tune ku biçin, ji ber ku tune ye. cîhê dîskê belaş li ser serverê maye.

Pirsgirêk dikare bi awayên cûda çareser bibe - mînakî, bi koçkirina serverek din (heke hebe) an jî dîskên nû li serverê zêde bike. Lê her gav ne gengaz e ku meriv vê yekê bike, ji ber vê yekê koçkirina ji LVM berbi Ceph dikare ji bo vê pirsgirêkê çareseriyek hêja be. Bi hilbijartina vê vebijarkê, em di heman demê de pêvajoya din a koçberiyê di navbera pêşkêşkeran de jî hêsan dikin, ji ber ku dê hewce nebe ku hilanîna herêmî ji yek hîpervisorek din veguhezîne. Tenê girtin ev e ku hûn ê hewce ne ku dema ku kar tê meşandin VM-ê rawestînin.

Reçeteya jêrîn ji hatî girtin gotara ji vê blogê, talîmatên ku di çalakiyê de hatine ceribandin. Birastî, rêbaza koçberiya bê kêşe jî li wir hatiye vegotin, lebê, di doza me de ew bi tenê ne hewce bû, ji ber vê yekê me ew kontrol nekir. Ger ev ji bo projeya we krîtîk e, em ê kêfxweş bibin ku li ser encamên di şîroveyan de bibihîzin.

Ka em derbasî beşa pratîkî bibin. Di nimûneyê de em virsh û, li gorî, libvirt bikar tînin. Pêşîn, pê ewle bine ku hewza Ceph ya ku dê data lê were veguheztin bi libvirt ve girêdayî ye:

virsh pool-dumpxml $ceph_pool

Danasîna hewzê pêdivî ye ku daneyên pêwendiyê bi Ceph re bi daneyên destûrnameyê re hebe.

Pêngava paşîn ev e ku wêneya LVM li Ceph RBD tê veguheztin. Dema darvekirinê di serî de bi mezinahiya wêneyê ve girêdayî ye:

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

Piştî veguheztinê, wêneyek LVM-ê dê bimîne, ku dê bikêr be ger koçkirina VM-ê berbi RBD bi ser nekeve û pêdivî ye ku hûn guheztinan paşde vegerînin. Di heman demê de, ji bo ku em karibin zû guheztinan paşve bixin, bila em pelê veavakirina makîneya virtual hilanînê çêbikin:

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

... û orîjînal biguherînin (vm_name.xml). Ka em blokek bi ravekirina dîskê bibînin (bi rêzê dest pê dike <disk type='file' device='disk'> û bi dawî dibe </disk>) û wê bi forma jêrîn kêm bikin:

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

Ka em li hin hûrguliyan binêrin:

  1. Li ser protokolê source Navnîşana hilanînê ya li Ceph RBD tê destnîşan kirin (ev navnîşana ku navê hewza Ceph û wêneya RBD destnîşan dike, ku di qonaxa yekem de hate destnîşankirin) tê destnîşan kirin.
  2. Di blokê de secret tîp tê nîşandan ceph, û her weha UUID ya veşartî ku pê ve girêdayî ye. Uuid-a wê bi karanîna fermanê tê dîtin virsh secret-list.
  3. Di blokê de host navnîşanên çavdêrên Ceph têne destnîşan kirin.

Piştî guherandina pelê veavakirinê û qedandina veguheztina LVM bo RBD, hûn dikarin pelê veavakirina guhertî bicîh bikin û makîneya virtual dest pê bikin:

virsh define $vm_name.xml
virsh start $vm_name

Wext e ku meriv kontrol bike ka makîneya virtual rast dest pê kiriye: hûn dikarin, mînakî, bi girêdana wê bi SSH an bi riya wê fêr bibin. virsh.

Ger makîneya virtual rast dixebite û we ti pirsgirêkek din nedîtiye, wê hingê hûn dikarin wêneya LVM ku êdî nayê bikar anîn jêbirin:

lvremove main/$vm_image_name

encamê

Me di pratîkê de bi hemî dozên diyarkirî re rû bi rû ma - em hêvî dikin ku rêwerz dê ji rêvebirên din re bibe alîkar ku pirsgirêkên bi vî rengî çareser bikin. Ger ji ezmûna weya ku Ceph bikar tîne şîrove an çîrokên weyên din ên mîna wan hebin, em ê kêfxweş bibin ku wan di şîroveyan de bibînin!

PS

Li ser bloga me jî bixwînin:

Source: www.habr.com

Add a comment