Ceph bi rêya iSCSI - an skiing dema ku di hammock de radiweste

Ma di nav me de (çevdêrên cephe) yên ku ji "extremeya pîşeyî" hez nakin hene?

Ne mimkûn e - wekî din em ê bi vê hilbera zehf balkêş û dilşewat nekevin.

Gelek ji wan ên ku tev li operasyona Ceph bûn, yekî ne pir caran (lê hêj pir kêm caran) lê carinan di doza daxwazê ​​de - ji bo girêdana Ceph bi iSCSI an FC-ê re hevdîtin kirin. Bo çi? Welê, mînakî, wêneyek ji Ceph ji serverek Windows an Solaris re bişînin ku ji ber hin sedeman hîna ne virtualîzekirî ye. An jî virtual, lê bi navgînek hîpervisorek ku Ceph nas nake - û, wekî ku em dizanin, têra wan hene. Bo nimûne? Welê, ji bo nimûne, HyperV an ESXi, ku bi rengek çalak têne bikar anîn. Û heke peywir derkeve holê ku bi Ceph re wêneyek ji makîneyek mêvan re bişînin, ev vediguhere karekî pir balkêş.

Bi vî awayî hatiye dayîn:

  1. komeke Ceph jixwe dimeşe
  2. wêneyek heyî ya ku pêdivî ye ku bi iSCSI ve were şandin
  3. Navê hewzê mypool, navê wêneyê myimage

Destpêkirin?

Berî her tiştî, dema ku em li ser FC an iSCSI diaxivin, saziyên me yên wekî destpêker û armanc hene. Target bi rastî serverek e, destpêker xerîdarek e. Erka me ew e ku em wêneya Ceph bi kêmî hewl bidin destpêkerê. Ji ber vê yekê divê em armancê berfireh bikin. Lê li ku, li ser kîjan komputerê?

Xweşbextane, di komek Ceph de, bi kêmanî yek pêkhateyek me heye ku navnîşana IP-ya wê sabît e û li ser yek ji hêmanên herî girîng ên Ceph hatî mîheng kirin, û ev pêkhatek çavdêrek e. Li gorî vê yekê, em armancek iSCSI li ser çavdêriyê saz dikin (û di heman demê de destpêker, bi kêmanî ji bo ceribandinan). Min ev li ser CentOS kir, lê ji bo belavkirinek din, çareserî jî guncan e - tenê pakêtan bi awayê ku di belavkirina we de tê pejirandin saz bikin.

# yum -y install iscsi-initiator-utils targetcli

Armanca pakêtên sazkirî çi ye?

  • targetcli - amûrek ji bo birêvebirina armancek SCSI ku di nav kernel Linux de hatî çêkirin
  • iscsi-initiator-utils - pakêtek bi karûbarên ku ji bo rêvebirina, dîsa, destpêkerê iSCSI-yê di nav kernel Linux de hatî çêkirin tê bikar anîn

Ji bo ku hûn wêneyek bi iSCSI-ê ji destpêker re bişînin, ji bo pêşkeftina bûyeran du vebijark hene - paşnavê armancê ya bikarhêneran bikar bînin an wêneyê wekî amûrek blokê ya ku ji pergala xebitandinê re xuya ye ve girêdin û wê bi iSCSI ve derxînin. Em ê riya duyemîn biçin - paşperdeya bikarhêneran hîn jî di rewşek "ezmûnî" de ye û ji bo karanîna hilberîner hinekî ne amade ye. Bi ser de jî, bi wî re xelek hene, ku hûn dikarin pir li ser bipeyivin û (bi tirs!) nîqaş bikin.

Ger em bi kêmanî hin belavkirina domdar bi çerxek piştgirîya dirêj bikar bînin, wê hingê me hin guhertoyek kevnar, kevnar a kernelê heye. Mînakî, li ser CentOS7 ew 3.10.*, li ser CentOS8 ew 4.19 e. Û em bi kernelê bi kêmî ve 5.3 (lê bêtir 5.4) û nûtir eleqedar in. Çima? Ji ber ku ji hêla xwerû wêneyên di Ceph de komek vebijarkan çalak in ku bi kernelên kevin re ne hevaheng in. Ji ber vê yekê, em ji bo belavkirina xwe depoyê bi kernelê nû ve girêdidin (mînak, ji bo CentOS ew elrepo ye), kernelê nû saz dikin û pergalê ji nû ve saz dikin ku bi kernelê nû re bixebite:

  • Em bi çavdêriya ku ji bo ceribandinê hatî hilbijartin ve girêdidin
  • Em li gorî rêwerzan depoyên elrepo ve girêdidin - elrepo.org/tiki/tiki-index.php
  • Kernelê saz bike: yum -y --enablerepo=elrepo-kernel kernel-ml saz bike
  • Em serverê bi çavdêriyê re ji nû ve dest pê dikin (sê çavdêrên me hene, rast?)

Em wêneyê wekî amûrek blok ve girêdidin

# rbd map mypool/myimage
/dev/rbd0

Ew tenê tenê mîhengkirina armancê dimîne. Di vê nimûneyê de, ez ê bi navê armancê mîheng bikim. moda demo - bêyî pejirandinê, ji her kesî re xuya û gihîştî ye. Di hawîrdorek hilberandinê de, hûn ê bi îhtîmalek mezin bixwazin ku verastkirinê mîheng bikin - lê ew piçek ji çarçoweya xebata îro ya tenê-kêfxweş e.

Piştgiriyek bi navê disk1 bi nexşeya /dev/rbd/mypool/myimage biafirînin. Pelê diyarkirî girêdanek sembolîk e ku /dev/rbd0 bixweber ji hêla udev daemon ve hatî afirandin. Em girêdanek sembolîk bikar tînin, ji ber ku navê cîhaza rbd dikare ji ber rêza ku wêneyên Ceph bi mêvandar ve girêdayî ne biguhezîne.

Piştgiriyek çêbikin:

# targetcli /backstores/block create disk1 /dev/rbd/mypool/myimage

Armancek iSCSI biafirînin:

# targetcli /iscsi create iqn.2020-01.demo.ceph:mypool

Em paşîn wekî LUN bi armancê ve girêdidin:

# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/luns create /backstores/block/disk1

Eyarkirina armancê ji bo moda demo:

# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribute demo_mode_write_protect=0
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribute generate_node_acls=1
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribute cache_dynamic_acls=1

Veavakirinê hilîne:

# targetcli saveconfig

Kontrolkirina armancê:

# iscsiadm -m discovery -t st -p 127.0.0.1:3260
127.0.0.1:3260,1 iqn.2020-01.demo.ceph:mypool

Em armancê girêdidin:

# iscsiadm -m node --login
Logging in to [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] (multiple)
Login to [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] successful.

Ger we her tişt rast kir, dê dîskek nû li ser serverê xuya bibe, ku dişibihe amûrek SCSI, lê bi rastî wêneyek ji Ceph e, ku bi armancek iSCSI ve tê gihîştin. Ji bo ku di dema bootê de ji pirsgirêkan dûr nekevin, çêtir e ku hûn dîska girêdayî û hedefa naskirî ji destpêkera herêmî derxînin:

# iscsiadm -m node --logout
# iscsiadm -m discoverydb -o delete -t st -p 127.0.0.1:3260

Tiştê ku dimîne ev e ku meriv mîhengê bidomîne da ku wêne bixweber were girêdan û piştî girêdanê armanc were qat kirin. Destpêkirina armancê ji du gavan pêk tê - girêdana RBD û bi rastî destpêkirina armancê.

Pêşîn, werin em girêdana otomatîkî ya wêneyên RBD bi mêvandar re mîheng bikin. Ev bi lê zêdekirina rêzan li pelê /etc/ceph/rbdmap pêk tê:

# cat /etc/ceph/rbdmap
# RbdDevice Parameters
mypool/myimage id=admin
# systemctl enable rbdmap

Vegerandina veavakirina armancê hinekî tevlihevtir e - pêdivî ye ku em yekîneyek ji bo systemd binivîsin ku dê veavakirinê sererast bike:

# cat /usr/lib/systemd/system/scsi-target.service
[Unit] Description=Start iSCSI target

After=network-online.target rbdmap.service
Before=remote-fs-pre.target
Wants=network-online.target remote-fs-pre.target

[Service] Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/targetcli restoreconfig

[Install] WantedBy=multi-user.target

# systemctl daemon-reload
# systemctl enable scsi-target

Testa paşîn ev e ku em çavdêriya xwe ji nû ve ji nû ve bidin destpêkirin (ew naha armancek iSCSI ye). Divê were zanîn ku heke me databasa destpêker bi fermanê paqij nekira iscsiadm -n discoverydb -o jêbirin ... dibe ku hûn bi serverek ne-boot an dirêj-bootkirinê re biqedin.

Çi maye?

Destpêker li ser servera ku em dixwazin armancê bişînin mîheng bikin.

Meriv çawa tolerasyona xeletiya mebesta xwe misoger dike?

Hûn dikarin bi heman rengî armancên li ser çavdêrên din mîheng bikin û pirrêtî saz bikin (vmware dê vê yekê fêm bike û tewra bixebite, Hyper-V dê fêm neke - li wir qefleyên SCSI hewce ne). Ji ber ku muwekîlê Ceph ji kernelê cachkirinê bikar nayîne, ev pir bikêr e. An vebijarkek din ev e ku meriv çavkaniyek komê ji sê beşan biafirîne - navnîşek IP-ya armanc û karûbarên rbdmap û scsi-target, û rêvebirina vê çavkaniyê bi navgîniya amûrên komkirinê (kê got pacemaker?)

Li şûna paşê

Wekî ku hûn dibînin, ev gotar hinekî henek e - lê di wê de min hewl da ku "bi lez û bez û bi mînakan" di heman demê de çend mijarên pir populer binirxînim - hedefa iSCSI, ku dibe ku ne hewce be ku wêneyên Ceph derxe - lê, ji bo mînak, cildên LVM derxînin, bingehên xebata bi destpêkerek iSCSI re (çawa meriv armancek dişoxilîne, meriv çawa bi armancekê ve girêdide, veqetandin, tomarek armancê ji databasê jêbirin), nivîsandina yekîneya xwe ji bo systemd, û hinên din

Ez hêvî dikim ku her çend hûn vê ceribandinê bi tevahî dubare nekin, wê hingê bi kêmanî tiştek ji vê gotarê dê ji we re kêrhatî be.

Source: www.habr.com

Add a comment