Ceph cez iSCSI — alebo na lyžiach v hojdačke

Je niekto z nás (cephoadov) ten, kto nemá rád „profesionálny extrém“?

Skôr nie — inak by sme sa nezaoberali týmto mimoriadne zaujímavým a zábavným produktom.

Mnohí z tých, ktorí sa zaoberali prevádzkou Ceph, sa stretli s jedným nie príliš častým (skôr veľmi zriedkavým) ale občas požadovaným prípadom — pripojiť Ceph pomocou iSCSI alebo FC. Prečo? Napríklad na podanie obrazu z Ceph na nejaký nevirtualizovaný server so systémom Windows alebo Solaris. Alebo na virtualizovaný, ale prostredníctvom hypervízora, ktorý nevie pracovať s Ceph — a tých, ako vieme, je dosť. Napríklad? Napríklad HyperV alebo ESXi, ktoré sú aktívne využívané. A ak vznikne úloha podať obraz z Ceph do hostiteľského stroja, stáva sa to dosť zaujímavou úlohou.

Takže, máme:

  1. už fungujúci cluster Ceph
  2. už existujúci obraz, ktorý treba podať cez iSCSI
  3. názov poolu mypool, názov obrazu myimage

Začíname?

Predovšetkým, keď hovoríme o FC alebo iSCSI, objavujú sa nám také entity ako iniciátor (initiator) a cieľ (target). Target je vlastne server, iniciátor — klient. Našou úlohou je s minimálnymi nákladmi podávať obraz Ceph na iniciátor. To znamená, že musíme nasadiť target. Ale kde, na ktorom počítači?

Našťastie, v clustri Ceph máme minimálne jednu zložku, ktorej IP adresa je fixná a na ktorej je nakonfigurovaná jedna z najdôležitejších zložiek Ceph, a touto zložkou je monitor. Podľa toho na monitore nainštalujeme iSCSI target (a iniciátor aspoň pre testovanie). Robil som to na CentOS, ale pre akýkoľvek iný distribučný systém toto riešenie taktiež platí — stačí jednoducho inštalovať balíky tým spôsobom, ktorý je prístupný vo vašom distribučnom systéme.

# yum -y install iscsi-initiator-utils targetcli

Aký je účel inštalovaných balíkov?

  • targetcli — nástroj na správu zabudovaného v jadre Linuxu SCSI-targetu
  • iscsi-initiator-utils — balík s nástrojmi používateľskými pre správu opäť zabudovaného v jadre Linuxu iSCSI iniciátora

Aby sme podali obraz cez iSCSI na initiátor, existujú dve varianty rozvoja udalostí — použiť userspace backend cieľa alebo pripojiť obraz ako blokové zariadenie viditeľné pre operačný systém a exportovať ho cez iSCSI. Pôjdeme druhou cestou — userspace backend je zatiaľ v "experimentálnom" stave a na produktívne použitie je mierne nepripravený. Okrem toho s ním sú aj nejaké úskalia, o ktorých by sa dalo veľa rozprávať a (och, hrôza!) sporiť.

Ak použijeme akýkoľvek stabilný distribúciu s dlhým cyklom podpory, naše jadro bude nejaká starodávna verzia. Napríklad v CentOS7 je to 3.10.*, v CentOS8 je to 4.19. A zaujíma nás jadro minimálne 5.3 (a skôr 5.4) a novšie. Prečo? Pretože predvolene majú obrazy v Ceph pripojený súbor možností, ktorý nie je kompatibilný so starými jadrami. A teda pripojíme repozitár s novým jadrom pre našu distribúciu (napríklad pre CentOS je to elrepo), nainštalujeme nové jadro a reštartujeme systém, aby sme pracovali s novým jadrom:

  • Pripojíme sa k vybranému monitoru na experimentovanie
  • Pripojíme repozitáre elrepo podľa pokynov — elrepo.org/tiki/tiki-index.php
  • Nainštalujeme jadro: yum -y —enablerepo=elrepo-kernel install kernel-ml
  • Reštartujeme server s monitorom (máme predsa tri monitory, že?)

Pripojíme obraz ako blokové zariadenie

# rbd mapa mypool/myimage
/dev/rbd0

Zostáva už len nakonfigurovať cieľ. V tomto príklade nakonfigurujem cieľ v tzv. demo-režime — bez autentifikácie, viditeľný a prístupný pre každého. V produktívnom prostredí pravdepodobne budete chcieť nakonfigurovať autentifikáciu — ale to už je trochu mimo rozsahu dnešného len pre zábavu cvičenia.

Vytvoríme backend s názvom disk1 priradený k súboru /dev/rbd/mypool/myimage. Určený súbor je automaticky vytvorená symbolická referencia demonem udev na /dev/rbd0. Používame práve symbolickú referenciu, pretože názov zariadenia rbd sa môže meniť v závislosti od poradia pripojenia obrazov Ceph k hostiteľovi.

Vytvoríme backend:

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

Vytvoríme iSCSI cieľ:

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

Pripojíme backend ako LUN k cieľu:

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

Dovýrobíme cieľ pre demo-režim:

# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> atribút demo_mode_write_protect=0
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> atribút generate_node_acls=1
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> atribút cache_dynamic_acls=1

Uložíme konfiguráciu:

# targetcli saveconfig

Skontrolujeme prítomnosť cieľa:

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

Pripojíme cieľ:

# iscsiadm -m node --login
Prihlasovanie do [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] (viaceré)
Prihlásenie do [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] bolo úspešné.

Ak ste všetko urobili správne, na serveri sa objaví nový disk, ktorý vyzerá ako SCSI zariadenie, ale v skutočnosti ide o obraz z Ceph, k ktorému sa pristupuje cez iSCSI cieľ. Aby ste predišli problémom pri bootovaní, je lepšie odpojiť pripojený disk a zistený cieľ z lokálneho iniciátora:

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

Všetko, čo zostáva, je persistovať konfiguráciu, aby sa obraz automaticky pripojil a po pripojení spustil cieľ. Spustenie cieľa sa skladá z dvoch krokov – pripojenia RBD a samotného spustenia cieľa.

Najprv nakonfigurujeme automatické pripojenie RBD obrazov k hostiteľovi. Robí sa to pridaním riadkov do súboru /etc/ceph/rbdmap:

# mačka /etc/ceph/rbdmap
# RbdDevice Parameters
mypool/myimage id=admin
# systemctl povoliť rbdmap

Obnova konfigurácie cieľa je trochu zložitejšia – musíme napísať jednotku pre systemd, ktorá obnoví konfiguráciu:

# kat /usr/lib/systemd/system/scsi-target.service
[Unit]
Popis=Spustiť iSCSI cieľ

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

Finálny test – ešte raz reštartujeme náš monitor (jeho úlohou je teraz iSCSI cieľ). Je potrebné poznamenať, že ak by sme nevyčistili databázu iniciátora príkazom iscsiadm -n discoverydb -o delete … mohli by sme skončiť s nezapínajúcim alebo pomaly sa zapínajúcim serverom.

Čo zostáva?

Nakonfigurovať iniciátor na tom serveri, na ktorý chceme poskytnúť cieľ.

Ako zabezpečiť odolnosť nášho cieľa?

Môžeme podobne nakonfigurovať ciele na iných monitoroch a nastaviť multipath (vmware to pochopí a dokonca to bude fungovať, Hyper-V to nepochopí – tam sú potrebné SCSI zámky). Keďže klient Ceph z jadra nepoužíva cacheovanie, toto je úplne funkčné. Alebo iná možnosť – vytvoriť clustered resource z troch komponentov – vyhradeného IP adresy cieľa a služieb rbdmap a scsi-target, a riadiť tento zdroj cez nástroje na clusterizáciu (kto povedal pacemaker?)

Namiesto záveru

Ako je jasné, tento článok je trochu vtip, ale pokúsil som sa "rýchlo a na príkladoch" preskúmať niekoľko pomerne populárnych tém – iSCSI cieľ, ktorý nemusí nevyhnutne exportovať obrazy Ceph – ale napríklad exportovať objemy LVM, základy práce s iSCSI iniciátorom (ako skenovať cieľ, ako sa pripojiť k cieľu, odpojiť sa, odstrániť záznam o cieli z databázy), napísanie vlastnej jednotky pre systemd a niektoré ďalšie

Dúfam, že aj keď nebudete opakovať celý tento experiment v plnej miere, aspoň niečo z tohto článku bude pre vás užitočné.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster