Ceph nëpërmjet iSCSI - ose ski ndërsa qëndron në një shtrat i varur

A ka nga ne (tsefovodov) që nuk e pëlqejnë "ekstremin profesional"?

Nuk ka gjasa - përndryshe ne nuk do të rrëmbeheshim me këtë produkt jashtëzakonisht interesant dhe qesharak.

Shumë nga ata që ishin të përfshirë në funksionimin e Ceph-it kanë hasur në një rast jo shumë të shpeshtë (ose më mirë shumë të rrallë), por ndonjëherë të njohur - lidhjen e Ceph-it nëpërmjet iSCSI ose FC. Per cfare? Epo, për shembull, dërgoni një imazh nga Ceph në një server Windows ose Solaris që ende nuk është virtualizuar për ndonjë arsye. Ose një i virtualizuar, por duke përdorur një hipervizor që nuk mund ta bëjë Ceph - dhe, siç e dimë, ka shumë prej tyre. Për shembull? Epo, për shembull, HyperV ose ESXi, të cilat përdoren në mënyrë aktive. Dhe nëse lind detyra për të shërbyer një imazh nga Ceph në një makinë mysafire, kjo kthehet në një detyrë shumë emocionuese.

Pra, duke pasur parasysh:

  1. një grup Ceph që tashmë funksionon
  2. një imazh tashmë ekzistues që duhet të shërbehet nëpërmjet iSCSI
  3. Emri i pishinës mypool, emri i imazhit imazhi im

Filloni?

Para së gjithash, kur flasim për FC ose iSCSI, ne kemi entitete të tilla si iniciator dhe objektiv. Target është në fakt një server, iniciatori është një klient. Detyra jonë është t'ia paraqesim imazhin e Ceph iniciatorit me përpjekje minimale. Kjo do të thotë që ne duhet të zgjerojmë objektivin. Por ku, në çfarë kompjuteri?

Për fat të mirë, në një grup Ceph ne kemi të paktën një komponent adresa IP e të cilit është fiksuar dhe në të cilin është konfiguruar një nga komponentët më të rëndësishëm të Ceph, dhe ai komponent është monitori. Prandaj, ne instalojmë një objektiv iSCSI në monitor (dhe një iniciator në të njëjtën kohë, të paktën për teste). E bëra këtë në CentOS, por zgjidhja është gjithashtu e përshtatshme për çdo shpërndarje tjetër - thjesht duhet të instaloni paketat në mënyrën që është e pranueshme në shpërndarjen tuaj.

# yum -y install iscsi-initiator-utils targetcli

Cili është qëllimi i paketave të instaluara?

  • targetcli — një mjet për menaxhimin e objektivit SCSI të integruar në kernelin Linux
  • iscsi-iniciator-utils — një paketë me programe të përdorura për të menaxhuar iniciatorin iSCSI të integruar në kernelin Linux

Për të paraqitur një imazh nëpërmjet iSCSI tek iniciatori, ekzistojnë dy opsione për zhvillimin e ngjarjeve - përdorni prapavijën e hapësirës së përdoruesve të objektivit ose lidhni imazhin si një pajisje bllok të dukshme për sistemin operativ dhe eksportojeni atë nëpërmjet iSCSI. Ne do të shkojmë në rrugën e dytë - pjesa e pasme e hapësirës së përdoruesve është ende në një gjendje "eksperimentale" dhe nuk është paksa e gatshme për përdorim produktiv. Përveç kësaj, ka edhe gracka me të, për të cilat mund të flisni shumë dhe (oh tmerr!) të debatoni.

Nëse përdorim edhe një shpërndarje disi të qëndrueshme me një cikël të gjatë mbështetjeje, atëherë kerneli që kemi është një version i lashtë, i lashtë. Për shembull, në CentOS7 është 3.10.*, në CentOS8 është 4.19. Dhe ne jemi të interesuar për një kernel të paktën 5.3 (ose më mirë 5.4) dhe më të reja. Pse? Sepse si parazgjedhje, imazhet e Ceph-it kanë një grup opsionesh të aktivizuara që nuk janë të pajtueshme me kernelet e vjetra. Kjo do të thotë që ne lidhim një depo me një kernel të ri për shpërndarjen tonë (për shembull, për CentOS kjo është elrepo), instalojmë kernelin e ri dhe rindisim sistemin për të punuar me kernelin e ri:

  • Lidhu me monitorin e zgjedhur për eksperimentin
  • Ne lidhim depot elrepo sipas udhëzimeve - elrepo.org/tiki/tiki-index.php
  • Instaloni kernelin: yum -y —enablerepo=elrepo-kernel install kernel-ml
  • Rinisni serverin me monitor (ne kemi tre monitorë, apo jo?)

Lidhja e imazhit si një pajisje bllokimi

# rbd map mypool/myimage
/dev/rbd0

Gjithçka që mbetet është të konfiguroni objektivin. Në këtë shembull, unë do të konfiguroj objektivin në të ashtuquajturën. modaliteti demo - pa vërtetim, i dukshëm dhe i arritshëm për të gjithë. Në një mjedis prodhimi, ka të ngjarë të dëshironi të konfiguroni vërtetimin - por kjo është pak jashtë fushëveprimit për ushtrimin e sotëm thjesht për argëtim.

Krijo një backend me emrin disk1 të lidhur me skedarin /dev/rbd/mypool/myimage. Skedari i specifikuar është një lidhje simbolike e krijuar automatikisht nga daemon udev në /dev/rbd0. Ne përdorim një lidhje simbolike sepse emri i pajisjes rbd mund të ndryshojë në varësi të rendit në të cilin imazhet Ceph lidhen me hostin.

Krijo një backend:

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

Krijo një objektiv iSCSI:

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

Ne e lidhim backend-in si një LUN me objektivin:

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

Le të konfigurojmë objektivin për modalitetin 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

Ruani konfigurimin:

# targetcli saveconfig

Kontrollimi i pranisë së objektivit:

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

Ne lidhim objektivin:

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

Nëse keni bërë gjithçka siç duhet, një disk i ri do të shfaqet në server, i cili duket si një pajisje SCSI, por në fakt është një imazh nga Ceph, i aksesuar përmes një objektivi iSCSI. Për të shmangur problemet e nisjes, është më mirë të hiqni diskun e lidhur dhe objektivin e zbuluar nga iniciatori lokal:

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

E tëra që mbetet është të vazhdohet konfigurimi në mënyrë që imazhi të lidhet automatikisht dhe, pas lidhjes, objektivi të shtresohet. Lëshimi i një objektivi përbëhet nga dy hapa - lidhja e RBD dhe lëshimi në fakt i objektivit.

Së pari, le të konfigurojmë lidhjen automatike të imazheve RBD me hostin. Kjo bëhet duke shtuar rreshtat e mëposhtëm në skedarin /etc/ceph/rbdmap:

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

Rivendosja e konfigurimit të synuar është pak më e komplikuar - duhet të shkruajmë një njësi për systemd që do të rivendosë konfigurimin:

# 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

Testi përfundimtar është të rindizni përsëri monitorin tonë (tani është një objektiv iSCSI). Duhet të theksohet se nëse nuk do të kishim pastruar bazën e të dhënave të iniciatorit me komandën iscsiadm -n discoverydb -o fshij ... mund të përfundoni me një server që nuk ngarkohet ose kërkon shumë kohë për t'u ngarkuar.

Çfarë ka mbetur?

Konfiguro iniciatorin në serverin ku duam të dërgojmë objektivin.

Si të sigurojmë tolerancën e gabimeve të objektivit tonë?

Në mënyrë të ngjashme mund të konfiguroni objektivat në monitorë të tjerë dhe të konfiguroni shumë rrugë (vmware do ta kuptojë këtë dhe madje do të funksionojë, Hyper-V nuk do ta kuptojë - kërkon bravë SCSI). Meqenëse klienti Ceph nga kerneli nuk përdor caching, kjo është mjaft e realizueshme. Ose një alternativë tjetër është krijimi i një burimi grupi prej tre komponentësh - një adresë IP e dedikuar e synuar dhe shërbimet rbdmap dhe scsi-target, dhe menaxhimi i këtij burimi përmes mjeteve të grupimit (kush tha se stimuluesi i ritmit?)

Në vend të një pasuesi

Siç është e qartë, ky artikull është pak shaka - por në të u përpoqa të shqyrtoj "shpejt dhe me shembuj" disa tema mjaft të njohura në të njëjtën kohë - objektivi iSCSI, i cili mund të mos eksportojë domosdoshmërisht imazhe Ceph - por për shembull, eksportoni vëllime LVM, bazat e punës me një iniciator iSCSI (si të skanoni një objektiv, si të lidheni me një objektiv, shkëputeni, fshini një hyrje të synuar nga baza e të dhënave), duke shkruar njësinë tuaj për systemd dhe disa të tjera

Shpresoj që edhe nëse nuk e përsërisni të gjithë këtë eksperiment të plotë, të paktën diçka nga ky artikull do të jetë e dobishme për ju.

Burimi: www.habr.com

Shto një koment