Ceph putem iSCSI - ili skijanje stojeći u visećoj mreži

Postoje li među nama (tsefovodov) oni koji ne vole "profesionalni ekstrem"?

Malo je vjerojatno - inače se ne bismo motali okolo s ovim iznimno zanimljivim i smiješnim proizvodom.

Mnogi od onih koji su bili uključeni u rad Cepha naišli su na jedan ne baš čest (ili bolje rečeno čak vrlo rijedak), ali ponekad tražen slučaj - povezivanje Cepha putem iSCSI ili FC. Za što? Pa, na primjer, pošaljite sliku iz Cepha na Windows ili Solaris poslužitelj koji još nije virtualiziran iz nekog razloga. Ili virtualizirani, ali s hipervizorom koji ne može Ceph - a, kao što znamo, ima ih mnogo. Na primjer? Pa, na primjer, HyperV ili ESXi, koji se aktivno koriste. A ako se pojavi zadatak posluživanja slike iz Cepha na gostujući stroj, to se pretvara u vrlo uzbudljiv zadatak.

Dakle, dano:

  1. Ceph klaster koji već radi
  2. već postojeću sliku koja se mora poslužiti putem iSCSI
  3. Ime bazena moj bazen, naziv slike moja slika

Početi?

Prije svega, kada govorimo o FC-u ili iSCSI-ju, imamo takve entitete kao inicijator i cilj. Cilj je zapravo poslužitelj, inicijator je klijent. Naš zadatak je dostaviti Ceph sliku inicijatoru uz minimalan napor. To znači da moramo proširiti cilj. Ali gdje, na kojem računalu?

Srećom, u Ceph klasteru imamo barem jednu komponentu čija je IP adresa fiksna i na kojoj je konfigurirana jedna od najvažnijih komponenti Cepha, a ta komponenta je monitor. Sukladno tome, instaliramo iSCSI cilj na monitor (i inicijator u isto vrijeme, barem za testove). Ovo sam napravio na CentOS-u, ali rješenje je prikladno i za bilo koju drugu distribuciju - samo trebate instalirati pakete na način koji je prihvatljiv u vašoj distribuciji.

# yum -y install iscsi-initiator-utils targetcli

Koja je svrha instaliranih paketa?

  • targetcli — uslužni program za upravljanje SCSI ciljem ugrađenim u Linux kernel
  • iscsi-inicijator-utils - paket s uslužnim programima koji se koriste za upravljanje iSCSI inicijatorom ugrađenim u Linux kernel

Kako biste poslali sliku putem iSCSI-ja inicijatoru, postoje dvije opcije za razvoj događaja - koristiti pozadinu korisničkog prostora cilja ili povezati sliku kao blok uređaj vidljiv operativnom sustavu i izvesti je putem iSCSI-ja. Ići ćemo drugim putem - pozadina korisničkog prostora je još uvijek u "eksperimentalnom" stanju i pomalo nije spremna za produktivnu upotrebu. Osim toga, s njim postoje zamke, o kojima možete puno pričati i (o užas!) raspravljati.

Ako koristimo čak i donekle stabilnu distribuciju s dugim ciklusom podrške, tada je kernel koji imamo neka prastara, prastara verzija. Na primjer, u CentOS7 je 3.10.*, u CentOS8 je 4.19. A nas zanima kernel od najmanje 5.3 (točnije 5.4) i noviji. Zašto? Jer prema zadanim postavkama Ceph slike imaju omogućen skup opcija koje nisu kompatibilne sa starijim kernelima. To znači da povezujemo repozitorij s novom jezgrom za našu distribuciju (na primjer, za CentOS ovo je elrepo), instaliramo novu jezgru i ponovno pokrećemo sustav da radi s novom jezgrom:

  • Spojite se na monitor odabran za eksperiment
  • Spajamo elrepo repozitorije prema uputama - elrepo.org/tiki/tiki-index.php
  • Instalirajte kernel: yum -y —enablerepo=elrepo-kernel instalirajte kernel-ml
  • Ponovno pokrenite poslužitelj s monitorom (imamo tri monitora, zar ne?)

Povezivanje slike kao blok uređaja

# rbd map mypool/myimage
/dev/rbd0

Sve što preostaje je konfigurirati cilj. U ovom primjeru ja ću konfigurirati cilj u tzv. demo mod - bez autentifikacije, vidljiv i dostupan svima. U produkcijskom okruženju vjerojatno ćete htjeti konfigurirati autentifikaciju - ali to je malo izvan dosega današnje vježbe samo radi zabave.

Stvorite pozadinu pod nazivom disk1 povezanu s datotekom /dev/rbd/mypool/myimage. Navedena datoteka je simbolička veza koju automatski stvara udev demon na /dev/rbd0. Koristimo simboličku poveznicu jer se naziv rbd uređaja može mijenjati ovisno o redoslijedu kojim su Ceph slike povezane s hostom.

Stvorite pozadinu:

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

Stvorite iSCSI cilj:

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

Pozadinu povezujemo kao LUN s ciljem:

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

Konfigurirajmo cilj za demo način rada:

# 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

Spremite konfiguraciju:

# targetcli saveconfig

Provjera prisutnosti mete:

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

Povezujemo cilj:

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

Ako ste sve napravili kako treba, na poslužitelju će se pojaviti novi disk koji izgleda kao SCSI uređaj, ali je zapravo slika iz Cepha kojoj se pristupa preko iSCSI cilja. Kako biste izbjegli probleme s pokretanjem, bolje je ukloniti povezani disk i otkriveni cilj iz lokalnog pokretača:

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

Sve što preostaje je održati konfiguraciju tako da se slika automatski poveže i da se nakon povezivanja cilj stratificira. Lansiranje mete sastoji se od dva koraka – spajanja RBD-a i samog lansiranja mete.

Najprije konfigurirajmo automatsko povezivanje RBD slika s hostom. To se postiže dodavanjem sljedećih redaka u datoteku /etc/ceph/rbdmap:

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

Vraćanje ciljne konfiguracije malo je kompliciranije - moramo napisati jedinicu za systemd koja će vratiti konfiguraciju:

# 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

Posljednji test je ponovno pokretanje našeg monitora (sada je iSCSI cilj). Treba napomenuti da ako nismo izbrisali bazu podataka inicijatora s naredbom iscsiadm -n discoverydb -o brisanje ... mogli biste završiti s poslužiteljem koji se ne učitava ili mu treba puno vremena da se učita.

Što je ostalo?

Konfigurirajte inicijator na poslužitelju na koji želimo poslati cilj.

Kako osigurati toleranciju na pogreške našeg cilja?

Na sličan način možete konfigurirati ciljeve na drugim monitorima i postaviti multipath (vmware će to razumjeti i čak će raditi, Hyper-V neće razumjeti - zahtijeva SCSI zaključavanja). Budući da Ceph klijent iz kernela ne koristi predmemoriju, ovo je prilično izvodljivo. Ili je druga opcija stvoriti resurs klastera od tri komponente - namjenske ciljne IP adrese i rbdmap i scsi-target usluga, te upravljati tim resursom putem alata za klasteriranje (tko je rekao pacemaker?)

umjesto epiloga

Kao što je jasno, ovaj je članak pomalo šala - ali u njemu sam pokušao "brzo i s primjerima" razmotriti nekoliko prilično popularnih tema u isto vrijeme - iSCSI cilj, koji ne mora nužno izvoziti Ceph slike - ali na primjer, izvoz LVM volumena, osnove rada s iSCSI inicijatorom (kako skenirati cilj, kako se spojiti na cilj, prekinuti vezu, izbrisati ciljni unos iz baze podataka), pisanje vlastite jedinice za systemd i neke druge

Nadam se da će vam, čak i ako ne ponovite cijeli eksperiment u cijelosti, barem nešto iz ovog članka biti korisno.

Izvor: www.habr.com

Dodajte komentar