Ceph preko iSCSI - ili skijanje dok stojite u visećoj mreži

Ima li među nama (tsefovodov) koji ne vole “profesionalni ekstrem”?

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

Mnogi od onih koji su bili uključeni u rad Ceph-a naišli su na jedan ne baš čest (ili bolje rečeno vrlo rijedak) ali ponekad tražen slučaj - povezivanje Ceph-a preko iSCSI ili FC-a. Za što? Pa, na primjer, pošaljite sliku sa Ceph-a na Windows ili Solaris server koji iz nekog razloga još nije virtueliziran. Ili virtualizirani, ali koristeći hipervizor koji ne podržava 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 serviranja slike sa Ceph-a na gostujuću mašinu, ovo se pretvara u vrlo uzbudljiv zadatak.

Dakle, s obzirom na:

  1. već pokrenuti Ceph klaster
  2. već postojeća slika koja se mora servirati putem iSCSI
  3. Ime bazena mypool, naziv slike myimage

Poceti?

Prije svega, kada govorimo o FC ili iSCSI, imamo takve entitete kao pokretača i cilja. Cilj je zapravo server, inicijator je klijent. Naš zadatak je predati Ceph sliku inicijatoru uz minimalan napor. To znači da moramo proširiti cilj. Ali gde, na kom kompjuteru?

Srećom, u Ceph klasteru imamo barem jednu komponentu čija je IP adresa fiksna i na kojoj je konfigurisana jedna od najvažnijih komponenti Ceph-a, a ta komponenta je monitor. U skladu s tim, na monitor instaliramo iSCSI cilj (i initator u isto vrijeme, barem za testove). Ovo sam radio na CentOS-u, ali rješenje je pogodno 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 sa uslužnim programima koji se koriste za upravljanje iSCSI inicijatorom ugrađenim u Linux kernel

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

Ako koristimo čak i donekle stabilnu distribuciju sa dugim ciklusom podrške, onda je kernel koji imamo neka drevna, drevna verzija. Na primjer, u CentOS7 je 3.10.*, u CentOS8 je 4.19. I nas zanima kernel od najmanje 5.3 (ili bolje rečeno 5.4) i noviji. Zašto? Jer po defaultu Ceph slike imaju omogućen skup opcija koje nisu kompatibilne sa starijim kernelima. To znači da povezujemo spremište sa novim kernelom za našu distribuciju (na primjer, za CentOS ovo je elrepo), instaliramo novi kernel i restartujemo sistem da radi s novim kernelom:

  • Povežite se na monitor odabran za eksperiment
  • Povezujemo elrepo spremišta prema uputama - elrepo.org/tiki/tiki-index.php
  • Instalirajte kernel: yum -y —enablerepo=elrepo-kernel instalirajte kernel-ml
  • Ponovo pokrenite server sa monitorom (imamo tri monitora, zar ne?)

Povezivanje slike kao blok uređaja

# rbd map mypool/myimage
/dev/rbd0

Ostaje samo da konfigurišete cilj. U ovom primjeru, cilj ću konfigurirati u tzv. demo mod - bez autentifikacije, vidljiv i dostupan svima. U proizvodnom okruženju, vjerovatno ćete htjeti konfigurirati autentifikaciju - ali to je malo izvan opsega za današnju vježbu samo za zabavu.

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

Kreirajte backend:

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

Kreirajte iSCSI cilj:

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

Povezujemo backend kao LUN na cilj:

# 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

Sačuvajte 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 uradili kako treba, na serveru će se pojaviti novi disk, koji izgleda kao SCSI uređaj, ali je zapravo slika iz Ceph-a, kojoj se pristupa preko iSCSI cilja. Da 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

Ostaje samo da se nastavi konfiguracija tako da se slika automatski poveže i, nakon povezivanja, cilj se stratificira. Lansiranje mete sastoji se od dva koraka - povezivanja RBD-a i stvarnog lansiranja mete.

Prvo, hajde da konfigurišemo automatsko povezivanje RBD slika sa hostom. Ovo se radi dodavanjem sljedećih linija u /etc/ceph/rbdmap datoteku:

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

Vraćanje ciljne konfiguracije je malo složenije - 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 meta). Treba napomenuti da da nismo obrisali bazu podataka pokretača naredbom iscsiadm -n discoverydb -o izbrisati ... mogli biste završiti sa serverom koji se ne učitava ili se učitava dugo.

Šta je ostalo?

Konfigurišite inicijator na serveru na koji želimo da pošaljemo cilj.

Kako osigurati otpornost na greške naše mete?

Na sličan način možete konfigurisati ciljeve na drugim monitorima i postaviti višestruki put (vmware će to razumjeti, pa čak i raditi, Hyper-V neće razumjeti - zahtijeva SCSI zaključavanje). Pošto Ceph klijent iz kernela ne koristi keširanje, ovo je prilično izvodljivo. Ili druga opcija je kreiranje klastera resursa od tri komponente - namjenske ciljne IP adrese i rbdmap i scsi-target usluga i upravljanje ovim resursom pomoću alata za klasteriranje (ko je rekao pejsmejker?)

Umjesto pogovora

Kao što je jasno, ovaj članak je pomalo šala - ali u njemu sam pokušao "brzo i sa primjerima" razmotriti nekoliko prilično popularnih tema u isto vrijeme - iSCSI cilj, koji možda ne mora nužno izvoziti Ceph slike - ali na primjer, izvoz LVM volumena, osnove rada sa 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 čak i ako ne ponovite cijeli ovaj eksperiment u potpunosti, barem će vam nešto iz ovog članka biti korisno.

izvor: www.habr.com

Dodajte komentar