Ăr det nĂ„gon av oss (Ceph-anvĂ€ndare) som inte gillar "professionell extremism"?
Sannolikt inte â annars skulle vi inte sitta och tumla med denna oerhört intressanta och roliga produkt.
MĂ„nga av dem som har arbetat med Ceph har stött pĂ„ ett ganska ovanligt (eller snarare mycket ovanligt) men ibland efterfrĂ„gat tillfĂ€lle â att ansluta Ceph via iSCSI eller FC. Varför? Ja, till exempel för att tillhandahĂ„lla en bild frĂ„n Ceph till en av nĂ„gon anledning Ă€nnu icke virtualiserad Windows- eller Solaris-server. Eller till en virtualiserad, men via en hypervisor som inte stödjer Ceph â och det finns, som vi vet, ganska mĂ„nga av dem. Till exempel? Ja, exempelvis HyperV eller ESXi, som anvĂ€nds flitigt. Och om det uppstĂ„r ett behov av att tillhandahĂ„lla en bild frĂ„n Ceph till en gĂ€stmaskin, blir det en ganska spĂ€nnande uppgift.
SĂ„, vad har vi:
- en redan fungerande Ceph-kluster
- en redan existerande bild som ska tillhandahÄllas via iSCSI
- Namnet pÄ poolen mypool, bildnamnet myimage
Ska vi börja?
Först och frĂ€mst, nĂ€r vi pratar om FC eller iSCSI, dyker det upp begrepp som initiator och target. Target Ă€r faktiskt servern, initiator â klienten. VĂ„r uppgift Ă€r att med minimi arbetsinsats tillhandahĂ„lla Ceph-bilden till initiatorn. Och dĂ„ mĂ„ste vi installera target. Men var, pĂ„ vilken dator?
Som tur Ă€r finns det i Ceph-klustret minst en komponent vars IP-adress Ă€r fast och pĂ„ vilken en av de mest viktiga Ceph-komponenterna Ă€r konfigurerad, och denna komponent Ă€r monitor. SĂ„ledes installerar vi iSCSI target pĂ„ monitorn (och initiator ocksĂ„, Ă„tminstone för tester). Jag gjorde det pĂ„ CentOS, men för vilken annan distribution som helst fungerar lösningen ocksĂ„ â det Ă€r tillrĂ€ckligt att bara installera paketen pĂ„ det sĂ€tt som Ă€r accepterat i din distribution.
# yum -y install iscsi-initiator-utils targetcli
Vad Àr syftet med de installerade paketen?
- targetcli â verktyg för att hantera den inbyggda SCSI-targeten i Linux-kĂ€rnan
- iscsi-initiator-utils â paket med verktyg som anvĂ€nds för att hantera den inbyggda iSCSI-initiatorn i Linux-kĂ€rnan
För att ladda en bild via iSCSI pĂ„ initiatorn finns det tvĂ„ möjliga vĂ€gar â att anvĂ€nda en anvĂ€ndarutrymmes-backend för mĂ„let eller att ansluta bilden som en blockenhet synlig för operativsystemet och exportera den via iSCSI. Vi vĂ€ljer den andra vĂ€gen â anvĂ€ndarutrymmes-backenden Ă€r fortfarande i "experimentell" fas och Ă€r nĂ„got omodern för produktiv anvĂ€ndning. Dessutom finns det fallgropar med den, vilket det gĂ„r att diskutera mycket om och (oh skrĂ€ck!) argumentera.
Om vi anvÀnder en stabil distribution med lÄng supportcykel, fÄr vi ett kÀrna av en gammal gammal version. Till exempel i CentOS7 Àr det 3.10.*, i CentOS8 Àr det 4.19. Vi Àr intresserade av en kÀrna som minst Àr 5.3 (eller hellre 5.4) eller nyare. Varför? För att som standard har bilderna i Ceph en uppsÀttning alternativ anslutna som inte Àr kompatibla med Àldre kÀrnor. Det betyder att vi mÄste ansluta ett repository med en ny kÀrna för vÄr distribution (till exempel för CentOS Àr det elrepo), installera den nya kÀrnan och starta om systemet för att arbeta med den nya kÀrnan:
- Anslut till den valda monitorn för experimentet
- Anslut elrepo-repositories enligt instruktionerna â
- Installera kÀrnan: yum -y --enablerepo=elrepo-kernel install kernel-ml
- Starta om servern med monitorn (vi har ju tre monitorer, eller hur?)
Anslut bilden som en blockenhet
# rbd karta mypool/myimage
/dev/rbd0
Det Ă„terstĂ„r bara att konfigurera mĂ„let. I detta exempel kommer jag att konfigurera mĂ„let i sĂ„ kallat demo-lĂ€ge â utan autentisering, synligt och tillgĂ€ngligt för alla. I en produktionsmiljö skulle du förmodligen vilja konfigurera autentisering â men det Ă€r lite utanför dagens bara-för-skoj-övning.
Skapa en backend med namnet disk1 kopplad till filen /dev/rbd/mypool/myimage. Den angivna filen Àr en automatiskt skapad symbolisk lÀnk frÄn demon udev till /dev/rbd0. Vi anvÀnder just den symboliska lÀnken eftersom namnet pÄ rbd-enheten kan förÀndras pÄ grund av ordningen av bilder som ansluts till vÀrden.
Skapa backend:
# targetcli /backstores/block create disk1 /dev/rbd/mypool/myimage
Skapa iSCSI-mÄl:
# targetcli /iscsi skapa iqn.2020-01.demo.ceph:mypool
Anslut backend som LUN till mÄlet:
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/luns create /backstores/block/disk1
Justera mÄlet för demo-lÀge:
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribut demo_mode_write_protect=0
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribut generate_node_acls=1
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribut cache_dynamic_acls=1
Spara konfigurationen:
# targetcli saveconfig
Kontrollera om mÄlet finns:
# iscsiadm -m discovery -t st -p 127.0.0.1:3260
127.0.0.1:3260,1 iqn.2020-01.demo.ceph:mypool
Anslut mÄlet:
# iscsiadm -m node --login
Loggar in pÄ [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] (flertal)
Inloggning till [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] genomförd.
Om du har gjort allt rÀtt, sÄ kommer en ny disk att dyka upp pÄ servern, som ser ut som en SCSI-enhet men egentligen Àr en bild frÄn Ceph, tillgÄngen görs genom iSCSI-target. För att undvika problem vid uppstart Àr det bÀst att ta bort den anslutna disken och den upptÀckta targeten frÄn den lokala initiatorn:
# iscsiadm -m node --logout
# iscsiadm -m discoverydb -o delete -t st -p 127.0.0.1:3260
Det som Ă„terstĂ„r Ă€r att persistenta konfigurationen sĂ„ att bilden kopplas automatiskt och target startar efter att den har anslutits. Start av targeten bestĂ„r av tvĂ„ steg â anslutning av RBD och sjĂ€lva starten av targeten.
Först konfigurerar vi automatisk anslutning av RBD-bilder till vÀrden. Detta görs genom att lÀgga till rader i filen /etc/ceph/rbdmap:
# katta /etc/ceph/rbdmap
# RbdDevice Parameters
mypool/myimage id=admin
# systemctl aktivera rbdmap
Att Ă„terstĂ€lla targetkonfigurationen Ă€r lite mer komplicerat â vi mĂ„ste skriva en enhet för systemd, som kommer att Ă„terstĂ€lla konfigurationen:
# katt /usr/lib/systemd/system/scsi-target.service
[Enhet]
Beskrivning=Starta iSCSI-mÄl
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
Det slutgiltiga testet â vi startar om vĂ„r monitor (som nu ocksĂ„ Ă€r iSCSI-target). Det bör nĂ€mnas att om vi inte hade rensat initiatorns databas med kommandot iscsiadm -n discoverydb -o delete ⊠kunde vi ha fĂ„tt en server som inte kan starta eller som tar lĂ„ng tid att starta.
Vad Àr kvar?
Konfigurera initiatorn pÄ den server dit vi vill presentera targeten.
Hur sÀkerstÀller vi att vÄr target Àr resilient?
Det Ă€r möjligt att pĂ„ liknande sĂ€tt konfigurera targets pĂ„ andra monitorer och ordna multipath (vmware kommer att förstĂ„ detta och fungerar, Hyper-V kommer inte att förstĂ„ â dĂ€r krĂ€vs SCSI-lĂ„sningar). Eftersom Ceph-klienten frĂ„n kĂ€rnan inte anvĂ€nder caching, Ă€r det helt fungerande. Eller en annan möjlighet â skapa en klustrad resurs av tre komponenter â den dedikerade IP-adresser targeten och tjĂ€nsterna rbdmap och scsi-target, och hantera denna resurs genom klustringsverktyg (vem sa pacemaker?)
Som en avslutning
Som det framgĂ„r Ă€r denna artikel lite av ett skĂ€mt â men jag har försökt att "snabbt och med exempel" belysa flera ganska populĂ€ra Ă€mnen â iSCSI-target som inte nödvĂ€ndigtvis behöver exportera Ceph-bilder â men exempelvis exportera LVM-volymer, grunderna för att arbeta med iSCSI-initiatorn (hur man skannar en target, hur man ansluter till targeten, kopplar ifrĂ„n, tar bort post om targeten frĂ„n databasen), att skriva en egen enhet för systemd och vissa andra.
Jag hoppas att Àven om du inte kommer att upprepa hela detta experiment i sin helhet, sÄ kommer Ätminstone nÄgot frÄn denna artikel att vara till nytta för dig.
KĂ€lla: habr.com
