Ceph preko iSCSI - ali smučanje stoje v viseči mreži

Ali obstajajo med nami (tsefovodov), ki ne marajo "profesionalnega ekstrema"?

Malo verjetno - drugače se ne bi premetavali s tem izjemno zanimivim in smešnim izdelkom.

Mnogi od tistih, ki so sodelovali pri delovanju Cepha, so se srečali z enim ne zelo pogostim (ali bolje rečeno zelo redkim), a včasih zelo zahtevnim primerom - povezovanjem Cepha prek iSCSI ali FC. Za kaj? No, na primer, pošljite sliko iz Cepha v strežnik Windows ali Solaris, ki iz nekega razloga še ni bil virtualiziran. Ali virtualiziranega, vendar z uporabo hipervizorja, ki ne podpira Ceph - in kot vemo, jih je veliko. Na primer? No, na primer HyperV ali ESXi, ki se aktivno uporabljata. In če se pojavi naloga serviranja slike iz Cepha v gostujočo napravo, se to spremeni v zelo razburljivo nalogo.

Torej glede na:

  1. že delujočo gručo Ceph
  2. že obstoječo sliko, ki mora biti postrežena prek iSCSI
  3. Ime bazena mojpool, ime slike moja slika

Začeti?

Prvič, ko govorimo o FC ali iSCSI, imamo entiteti kot pobudnik in cilj. Cilj je pravzaprav strežnik, pobudnik je odjemalec. Naša naloga je, da sliko Ceph z minimalnim naporom posredujemo iniciatorju. To pomeni, da moramo razširiti cilj. Toda kje, na katerem računalniku?

Na srečo imamo v gruči Ceph vsaj eno komponento, katere naslov IP je fiksen in na kateri je konfigurirana ena najpomembnejših komponent Ceph, in ta komponenta je monitor. Temu primerno namestimo iSCSI target na monitor (in hkrati iniciator, vsaj za teste). To sem naredil na CentOS-u, vendar je rešitev primerna tudi za katero koli drugo distribucijo - samo namestiti morate pakete na način, ki je sprejemljiv v vaši distribuciji.

# yum -y install iscsi-initiator-utils targetcli

Kakšen je namen nameščenih paketov?

  • targetcli — pripomoček za upravljanje cilja SCSI, vgrajenega v jedro Linuxa
  • iscsi-iniciator-utils — paket s pripomočki za upravljanje iniciatorja iSCSI, vgrajenega v jedro Linuxa

Za oddajo slike prek iSCSI iniciatorju sta na voljo dve možnosti za razvoj dogodkov - uporabite zaledje ciljnega uporabniškega prostora ali pa sliko povežite kot blokovno napravo, vidno operacijskemu sistemu, in jo izvozite prek iSCSI. Šli bomo po drugi poti - zaledje uporabniškega prostora je še vedno v "eksperimentalnem" stanju in nekoliko ni pripravljeno za produktivno uporabo. Poleg tega so pri njem tudi pasti, o katerih lahko veliko govorite in se (oh groza!) prepirate.

Če uporabljamo celo nekoliko stabilno distribucijo z dolgim ​​ciklom podpore, potem je jedro, ki ga imamo, neka starodavna, starodavna različica. Na primer, v CentOS7 je 3.10.*, v CentOS8 pa 4.19. In zanima nas jedro vsaj 5.3 (oz. 5.4) in novejše. Zakaj? Ker imajo slike Ceph privzeto omogočen niz možnosti, ki niso združljive s starejšimi jedri. To pomeni, da povežemo repozitorij z novim jedrom za našo distribucijo (na primer, za CentOS je to elrepo), namestimo novo jedro in znova zaženemo sistem za delo z novim jedrom:

  • Povežite se z monitorjem, izbranim za poskus
  • Repozitorije elrepo povežemo po navodilih - elrepo.org/tiki/tiki-index.php
  • Namestite jedro: yum -y —enablerepo=elrepo-kernel namestite kernel-ml
  • Ponovno zaženite strežnik z monitorjem (imamo tri monitorje, kajne?)

Povezovanje slike kot blokovne naprave

# rbd map mypool/myimage
/dev/rbd0

Vse, kar ostane, je konfiguracija cilja. V tem primeru bom cilj konfiguriral v ti. demo način - brez avtentikacije, viden in dostopen vsem. V produkcijskem okolju boste verjetno želeli konfigurirati preverjanje pristnosti - vendar je to nekoliko izven obsega današnje vaje samo za zabavo.

Ustvarite zaledje z imenom disk1, povezano z datoteko /dev/rbd/mypool/myimage. Navedena datoteka je simbolna povezava, ki jo samodejno ustvari demon udev do /dev/rbd0. Uporabljamo simbolično povezavo, ker se lahko ime naprave rbd spremeni glede na vrstni red, v katerem so slike Ceph povezane z gostiteljem.

Ustvari zaledje:

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

Ustvari cilj iSCSI:

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

Zaledje povežemo kot LUN s ciljem:

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

Konfigurirajmo cilj za demo način:

# 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

Shranite konfiguracijo:

# targetcli saveconfig

Preverjanje prisotnosti tarče:

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

Če ste vse naredili pravilno, se bo na strežniku prikazal nov disk, ki je videti kot naprava SCSI, vendar je v resnici slika iz Cepha, do katere dostopate prek iSCSI cilja. Da bi se izognili težavam pri zagonu, je bolje odstraniti povezani disk in zaznani cilj iz lokalnega iniciatorja:

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

Vse, kar ostane, je vztrajati v konfiguraciji, tako da se slika samodejno poveže, po povezavi pa se tarča razsloji. Izstrelitev tarče je sestavljena iz dveh korakov – priključitev RBD in dejanska izstrelitev tarče.

Najprej konfigurirajmo samodejno povezavo slik RBD z gostiteljem. To storite tako, da v datoteko /etc/ceph/rbdmap dodate naslednje vrstice:

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

Obnovitev ciljne konfiguracije je nekoliko bolj zapletena - napisati moramo enoto za systemd, ki bo obnovila konfiguracijo:

# 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

Končni preizkus je ponovni zagon našega monitorja (zdaj je cilj iSCSI). Opozoriti je treba, da če z ukazom ne bi počistili baze podatkov iniciatorja iscsiadm -n discoverydb -o izbriši ... lahko na koncu dobite strežnik, ki se ne nalaga ali se nalaga dolgo.

Kaj je ostalo?

Konfigurirajte iniciator na strežniku, kamor želimo poslati cilj.

Kako zagotoviti odpornost na napake našega cilja?

Podobno lahko konfigurirate cilje na drugih monitorjih in nastavite večpotje (vmware bo to razumel in celo deloval, Hyper-V ne bo razumel - zahteva zaklepanja SCSI). Ker odjemalec Ceph iz jedra ne uporablja predpomnjenja, je to povsem izvedljivo. Ali pa je druga možnost ustvariti vir gruče iz treh komponent – ​​namenskega ciljnega naslova IP ter storitev rbdmap in scsi-target ter upravljati ta vir prek orodij za gruče (kdo je rekel srčni spodbujevalnik?)

Namesto epilog

Kot je jasno, je ta članek nekoliko šala - vendar sem v njem poskušal "hitro in s primeri" obravnavati več dokaj priljubljenih tem hkrati - cilj iSCSI, ki morda ne izvozi slik Ceph - ampak npr. izvoz volumnov LVM, osnove dela z iniciatorjem iSCSI (kako skenirati cilj, kako se povezati s ciljem, prekiniti povezavo, izbrisati ciljni vnos iz baze), pisanje lastne enote za systemd in nekatere druge

Upam, da vam bo vsaj nekaj iz tega članka koristilo, tudi če ne boste ponovili celotnega poskusa v celoti.

Vir: www.habr.com

Dodaj komentar