Ceph via iSCSI - of ski terwyl jy in 'n hangmat staan

Is daar diegene onder ons (tsefovodov) wat nie van "professionele ekstreme" hou nie?

Dit is onwaarskynlik - anders sou ons nie rondtuimel met hierdie uiters interessante en snaakse produk nie.

Baie van diegene wat betrokke was by die werking van Ceph het een teëgekom wat nie baie gereeld (of eerder selfs baie ongereelde) maar soms in aanvraag geval is - wat Ceph via iSCSI of FC verbind. Vir wat? Wel, dien byvoorbeeld 'n prent van Ceph af na 'n Windows- of Solaris-bediener wat om een ​​of ander rede nog nie gevirtualiseer is nie. Of 'n gevirtualiseerde een, maar met 'n hiperviser wat nie Ceph kan doen nie - en, soos ons weet, is daar baie van hulle. Byvoorbeeld? Wel, byvoorbeeld, HyperV of ESXi, wat aktief gebruik word. En as die taak ontstaan ​​om 'n beeld van Ceph aan 'n gasmasjien te bedien, ontaard dit in 'n baie opwindende taak.

Dus, gegee:

  1. 'n reeds lopende Ceph-kluster
  2. 'n reeds bestaande prent wat via iSCSI bedien moet word
  3. Poel naam mypool, prentnaam my beeld

Begin?

Eerstens, as ons oor FC of iSCSI praat, het ons sulke entiteite soos inisieerder en teiken. Target is eintlik 'n bediener, inisieerder is 'n kliënt. Ons taak is om die Ceph-beeld met minimale moeite aan die inisieerder voor te lê. Dit beteken ons moet teiken uitbrei. Maar waar, op watter rekenaar?

Gelukkig het ons in 'n Ceph-kluster ten minste een komponent waarvan die IP-adres vas is en waarop een van die belangrikste komponente van Ceph opgestel is, en daardie komponent is die monitor. Gevolglik installeer ons 'n iSCSI-teiken op die monitor (en 'n inisieerder terselfdertyd, ten minste vir toetse). Ek het dit op CentOS gedoen, maar die oplossing is ook geskik vir enige ander verspreiding - jy hoef net die pakkette te installeer op die manier wat aanvaarbaar is in jou verspreiding.

# yum -y install iscsi-initiator-utils targetcli

Wat is die doel van die geïnstalleerde pakkette?

  • teikencli - 'n program vir die bestuur van die SCSI-teiken wat in die Linux-kern ingebou is
  • iscsi-initiator-utils - 'n pakket met nutsprogramme wat gebruik word om die iSCSI-inisieerder wat in die Linux-kern ingebou is, te bestuur

Om 'n beeld via iSCSI aan die inisieerder in te dien, is daar twee opsies vir die ontwikkeling van gebeurtenisse - gebruik die gebruikersruimte-agterkant van die teiken of koppel die beeld as 'n bloktoestel wat sigbaar is vir die bedryfstelsel en voer dit uit via iSCSI. Ons sal die tweede manier gaan - die gebruikersruimte-agterkant is steeds in 'n "eksperimentele" toestand en is effens nie gereed vir produktiewe gebruik nie. Boonop is daar slaggate daarmee, waaroor jy baie kan praat en (ag gruwel!) stry.

As ons selfs 'n ietwat stabiele verspreiding met 'n lang ondersteuningsiklus gebruik, dan is die kern wat ons het 'n antieke, ou weergawe. Byvoorbeeld, in CentOS7 is dit 3.10.*, in CentOS8 is dit 4.19. En ons stel belang in 'n kern van ten minste 5.3 (of eerder 5.4) en nuwer. Hoekom? Omdat Ceph-beelde by verstek 'n stel opsies geaktiveer het wat nie met ouer pitte versoenbaar is nie. Dit beteken dat ons 'n bewaarplek met 'n nuwe kern koppel vir ons verspreiding (byvoorbeeld, vir CentOS is dit elrepo), installeer die nuwe kern en herlaai die stelsel om met die nuwe kern te werk:

  • Koppel aan die monitor wat vir die eksperiment gekies is
  • Ons verbind elrepo-bewaarplekke volgens die instruksies - elrepo.org/tiki/tiki-index.php
  • Installeer die kern: yum -y —enablerepo=elrepo-kern installeer kernel-ml
  • Herlaai die bediener met die monitor (ons het drie monitors, reg?)

Koppel die prent as 'n bloktoestel

# rbd map mypool/myimage
/dev/rbd0

Al wat oorbly is om die teiken op te stel. In hierdie voorbeeld sal ek die teiken instel in die sogenaamde. demo-modus - sonder verifikasie, sigbaar en toeganklik vir almal. In 'n produksie-omgewing sal jy waarskynlik stawing wil opstel - maar dit is 'n bietjie buite die bestek vir vandag se net-vir-pret-oefening.

Skep 'n agterkant genaamd skyf1 wat met die lêer /dev/rbd/mypool/myimage geassosieer word. Die gespesifiseerde lêer is 'n simboliese skakel wat outomaties deur die udev-demon geskep word na /dev/rbd0. Ons gebruik 'n simboliese skakel omdat die naam van die rbd-toestel kan verander na gelang van die volgorde waarin die Ceph-beelde aan die gasheer gekoppel is.

Skep 'n agterkant:

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

Skep 'n iSCSI-teiken:

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

Ons koppel die backend as 'n LUN aan die teiken:

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

Kom ons stel die teiken vir demo-modus op:

# 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

Stoor die konfigurasie:

# targetcli saveconfig

Kontroleer die teenwoordigheid van die teiken:

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

Ons verbind die teiken:

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

As jy alles reg gedoen het, sal 'n nuwe skyf op die bediener verskyn, wat soos 'n SCSI-toestel lyk, maar eintlik 'n beeld van Ceph is, wat deur 'n iSCSI-teiken verkry word. Om selflaaiprobleme te vermy, is dit beter om die gekoppelde skyf en die bespeurde teiken van die plaaslike inisieerder te verwyder:

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

Al wat oorbly, is om die konfigurasie vol te hou sodat die beeld outomaties verbind word en, na verbinding, die teiken gestratifiseer word. Om 'n teiken te loods bestaan ​​uit twee stappe - om die RBD te verbind en eintlik die teiken te loods.

Laat ons eers die outomatiese verbinding van RBD-beelde aan die gasheer opstel. Dit word gedoen deur die volgende reëls by die /etc/ceph/rbdmap-lêer by te voeg:

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

Die herstel van die teikenkonfigurasie is 'n bietjie meer ingewikkeld - ons moet 'n eenheid vir systemd skryf wat die konfigurasie sal herstel:

# 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

Die laaste toets is om ons monitor weer te herlaai (dit is nou 'n iSCSI-teiken). Daar moet kennis geneem word dat as ons nie die inisieerder se databasis skoongemaak het met die opdrag nie iscsiadm -n discoverydb -o verwyder ... jy kan eindig met 'n bediener wat nie laai nie of lank neem om te laai.

Wat is oor?

Konfigureer die inisieerder op die bediener waarheen ons die teiken wil stuur.

Hoe om fouttoleransie van ons teiken te verseker?

Jy kan op soortgelyke wyse teikens op ander monitors opstel en multipath rangskik (vmware sal dit verstaan ​​en selfs werk, Hyper-V sal nie verstaan ​​nie - dit vereis SCSI-slotte). Aangesien die Ceph-kliënt van die kern nie kas gebruik nie, is dit redelik werkbaar. Of 'n ander opsie is om 'n groephulpbron van drie komponente te skep - 'n toegewyde teiken-IP-adres en rbdmap en scsi-teikendienste, en hierdie hulpbron te bestuur deur groeperingsnutsmiddels (wie het gesê pasaangeër?)

In plaas van 'n naslaanwoord

Soos duidelik is, is hierdie artikel 'n bietjie van 'n grap - maar daarin het ek probeer om "vinnig en met voorbeelde" verskeie redelik gewilde onderwerpe op dieselfde tyd te oorweeg - iSCSI-teiken, wat dalk nie noodwendig Ceph-beelde uitvoer nie - maar bv. voer LVM-volumes uit, die basiese beginsels van werk met 'n iSCSI-inisieerder (hoe om 'n teiken te skandeer, hoe om aan 'n teiken te koppel, ontkoppel, verwyder 'n teikeninskrywing van die databasis), skryf jou eie eenheid vir systemd en 'n paar ander

Ek hoop dat selfs as jy nie hierdie hele eksperiment volledig herhaal nie, ten minste iets uit hierdie artikel vir jou nuttig sal wees.

Bron: will.com

Voeg 'n opmerking