A është ndonjë ndër ne (cephaz) që nuk e do "ekstremin profesional"?
Përdoshta jo — përndryshe nuk do të flisnim për këtë produkt tepër të interesant dhe argëtues.
Shumë prej atyre që kanë punuar me Ceph kanë takuar një rast që nuk është shumë i zakonshëm (madje mjaft i rrallë), por ndonjëherë i nevojshëm — lidhja e Ceph me iSCSI ose FC. Pse? Për shembull, për të ofruar një imazh nga Ceph në një server Windows ose Solaris që për ndonjë arsye nuk është virtualizuar ende. Ose në një makinë të virtualizuar, por përmes një hypervizori që nuk e përkrah Ceph — dhe ata, siç e dimë, janë të shumtë. Për shembull? Përdorimi i HyperV ose ESXi, të cilat janë përdorur gjerësisht. Nëse lind nevoja për të ofruar një imazh nga Ceph në makinën e përshtatshme, kjo shndërrohet në një detyrë mjaft tërheqëse.
Pra, kemi:
- një grup Ceph që tashmë funksionon
- një imazh ekzistues që duhet ofruar përmes iSCSI
- Emri i grupit mypool, emri i imazhit myimage
Të fillojmë?
Së pari, kur flasim për FC ose iSCSI, na shfaqen subjekte si iniciatori (initiator) dhe target. Target është në thelb serveri, ndërsa initiator është klienti. Detyra jonë është të ofrojmë imazhin Ceph në iniciator me sa më pak përpjekje. Dhe për këtë, na duhet të vendosim target. Por ku, në cilin kompjuter?
Fatmirësisht, në grupin Ceph kemi të paktën një komponent, i cili ka një IP të fiksuar dhe në të cilin është konfiguruar një nga komponentët më të rëndësishëm të Ceph, dhe ky komponent është monitori. Pra, në monitor vendosim iSCSI target (dhe initiatorin njëkohësisht, të paktën për testim). E kam bërë këtë në CentOS, por për çdo distribuim tjetër, zgjidhja do të përshtatet — mjafton të instaloni paketat në mënyrën që është e pranueshme për distribuimin tuaj.
# yum -y install iscsi-initiator-utils targetcli
Cili është qëllimi i paketave që po instalojmë?
- targetcli — një mjet menaxhimi për SCSI target-in e integruar në bërthamën Linux
- iscsi-initiator-utils — një paketë me mjete të përdorura për menaxhimin përsëri të iniciatorit iSCSI të integruar në bërthamën Linux
Për të ngarkuar një imazh përmes iSCSI në iniciator, ka dy mundësi — të përdorim backend-in e target-it në userspace ose të lidhen imazhin si pajisje blloku e dukshme për sistemin operativ dhe ta eksportojmë atë përmes iSCSI. Ne do të shkojmë me rrugën e dytë — backend-i në userspace është ende në një gjendje "eksperimentale" dhe për përdorim produktiv është paksa i papërshtatshëm. Për më tepër, ka ndërlikime me të, për të cilat mund të flasim shumë dhe (o tmerë!) të diskutojmë.
Nëse përdorim ndonjë distribucion të qëndrueshëm me një cikël të gjatë mbështetjeje, atëherë bërthama jonë është ndonjë version shumë të vjetër. Për shembull, në CentOS7 është 3.10.*, në CentOS8 është 4.19. Ne na intereson bërthama të paktën 5.3 (më saktë 5.4) dhe më të re. Pse? Sepse, për default, imazhet në Ceph kanë një grup opsionesh të lidhura që nuk janë të përputhshme me bërthamë të vjetra. Kështu që, ne lidhim depo me bërthamë të re për distribucionin tonë (për shembull, për CentOS është elrepo), instalojmë bërthamën e re dhe rindezim sistemin për të punuar me bërthamën e re:
- Lidhemi me monitorin e zgjedhur për eksperimentin
- Lidhim depozitë elrepo sipas udhëzimeve —
- Instalojmë bërthamën: yum -y --enablerepo=elrepo-kernel install kernel-ml
- Rindezim serverin me monitorin (këtu kemi tre monitorë, apo jo?)
Lidhem imazhi si pajisje blloku
# hartë rbd mypool/myimage
/dev/rbd0
Mbete vetëm të konfigurojmë target-in. Në këtë shembull, unë do ta konfiguroj target-in në modin e njohur si demo — pa autentikim, të dukshëm dhe të aksesueshëm për të gjithë. Në mjedisin produktiv, me siguri do të dëshironit të konfiguronit autentikimin — por kjo është pak jashtë skopit të ushtrimit të sotëm thjesht për argëtim.
Krijojmë një backend me emrin disk1 të lidhur me skedarin /dev/rbd/mypool/myimage. Skedari i specifikuar është një lidhje simbolike e krijuar automatikisht nga demon-i udev në /dev/rbd0. Ne përdorim pikërisht lidhjen simbolike, sepse emri i pajisjes rbd mund të ndryshojë për shkak të rendit të lidhjes së imazheve Ceph në host.
Krijojmë backend:
# targetcli /backstores/block create disk1 /dev/rbd/mypool/myimage
Krijojmë target-in iSCSI:
# targetcli /iscsi krijo iqn.2020-01.demo.ceph:mypool
Lidhemi me backend-in si LUN në target:
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/luns krijo /backstores/block/disk1
Përfundojmë konfigurimin e target-it për modin 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
Ruajmë konfigurimin:
# targetcli saveconfig
Kontrollojmë praninë e target-it:
# iscsiadm -m zbuluar -t st -p 127.0.0.1:3260
127.0.0.1:3260,1 iqn.2020-01.demo.ceph:mypool
Lidhem me target-in:
# iscsiadm -m node --login
Duke në [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] (shumëfishtë)
Kyçja në [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] ishte e suksesshme.
Nëse e keni bërë çdo gjë siç duhet, do të shihni një disk të ri në server, i cili duket si një pajisje SCSI, por në të vërtetë është një imazh nga Ceph, aksesimi i të cilit bëhet përmes iSCSI target. Për të shmangur probleme gjatë ngarkimit, është më mirë të hiqni diskun e lidhur dhe targetin e zbuluar nga iniciatori lokal:
# iscsiadm -m node --logout
# iscsiadm -m discoverydb -o delete -t st -p 127.0.0.1:3260
E gjithë çka mbetet është të ruani konfigurimin, në mënyrë që imazhi të lidhet automatikisht dhe pas lidhjes të startojë targetin. Nisja e targetit përbëhet nga dy hapa — lidhja RBD dhe vetë nisja e targetit.
Së pari, do të konfigurojmë lidhjen automatike të imazheve RBD me hostin. Kjo bëhet duke shtuar rreshta në skedarin /etc/ceph/rbdmap:
# kot /etc/ceph/rbdmap
# RbdDevice Parameters
mypool/mayimage id=admin
# systemctl aktivizo rbdmap
Me rikthimin e konfigurimit të targetit është pak më e komplikuar — ne duhet të shkruajmë një njësinë për systemd, e cila do të rikthejë konfigurimin:
# macja /usr/lib/systemd/system/scsi-target.service
[Unit]
Përshkrimi=Start iSCSI target
After=network-online.target rbdmap.service
Before=remote-fs-pre.target
Wants=network-online.target remote-fs-pre.target
[Shërbimi]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/targetcli restoreconfig
[Install]
WantedBy=multi-user.target
# systemctl daemon-reload
# systemctl enable scsi-target
Testi përfundimtar — edhe një herë rindezim monitorin tonë (i cili tani është iSCSI-target). Duhet thënë se nëse nuk do të kishim pastruar bazën e iniciatorit me komandën iscsiadm -n discoverydb -o delete … atëherë mund të ishim përballur me një server që nuk boot-onte ose që ngarkohej ngadalë.
Çfarë mbetet?
Të konfigurojmë iniciatorin në atë server ku dëshirojmë të ofrojmë targetin.
Si të sigurojmë që targeti ynë të jetë me disponueshmëri të lartë?
Po ashtu, mund të konfigurojmë targetet në monitorë të tjerë dhe të krijojmë multipath (vmware do ta kuptojë këtë dhe madje do të funksionojë, Hyper-V nuk do ta kuptojë — atje kërkohen bllokimet SCSI). Duke qenë se klienti Ceph nga bërthama nuk përdor caching, kjo është mjaft funksionale. Ose një opsion tjetër — të krijojmë një burim grupor nga tre komponentë — një target të dedikuar dhe shërbimet rbdmap dhe scsi-target, dhe të menaxhojmë këtë burim përmes mjeteve të grupimit (kush tha pacemaker?) IP-адреса Siç duket, ky artikull është pak një shaka — por në të kam tentuar të shiqoj disa tema mjaft popullore njëkohësisht — target i iSCSI, i cili nuk është aspak e nevojshme të eksportojë imazhe Ceph — por, për shembull, të eksportojë volume LVM, themelore për punën me iniciatorin iSCSI (si të skanojmë targetin, si të lidhemi me targetin, t'i shkëpusim lidhjen, të fshijmë regjistrimin e targetit nga baza), shkruar një njësinë të vet për systemd dhe disa të tjera.
Në vend të epilogu
Как понятно, эта статья немножко шутка — но в ней я попытался «быстро и на примерах» рассмотреть одновременно несколько достаточно популярных тем — iSCSI target, который может совсем не обязательно экспортировать образы Ceph — но например экспортировать тома LVM, азы работы с iSCSI инициатором (как просканировать таргет, как подключиться к таргету, отключиться, удалить запись о таргете из базы), написание собственного юнита для systemd и некоторые другие
Shpresoj që, edhe nëse nuk e përs повторni këtë eksperiment të plotë, diçka nga ky artikull do t'ju jetë e dobishme.
Burimi: habr.com
