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:
'n reeds lopende Ceph-kluster
'n reeds bestaande prent wat via iSCSI bedien moet word
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
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.
# 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:
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:
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.