Ceph fia iSCSI - of skiing wylst steande yn in hangmat

Binne der dejingen ûnder ús (tsefovodov) dy't net fan "profesjoneel ekstreem" hâlde?

It is ûnwierskynlik - oars soene wy ​​net mei dit ekstreem nijsgjirrige en grappige produkt omrinne.

In protte fan dyjingen dy't wiene belutsen by de eksploitaasje fan Ceph hawwe komme oer ien net hiel faak (of leaver sels hiel seldsum) mar soms yn fraach gefal - ferbinen Ceph fia iSCSI of FC. Foar wat? No, bygelyks, stjoer in ôfbylding fan Ceph nei in Windows- of Solaris-tsjinner dy't om ien of oare reden noch net virtualisearre is. Of in virtualisearre, mar mei in hypervisor dy't Ceph net kin dwaan - en, lykas wy witte, binne d'r genôch. Bygelyks? No, bygelyks, HyperV of ESXi, dy't aktyf brûkt wurde. En as de taak ûntstiet fan it tsjinjen fan in ôfbylding fan Ceph nei in gastmasine, wurdt dit in heul spannende taak.

Dus, jûn:

  1. in al rinnende Ceph kluster
  2. in al besteande ôfbylding dat moat wurde betsjinne fia iSCSI
  3. Pool namme mypool, ôfbylding namme mynôfbylding

Begjinne?

Alderearst, as wy prate oer FC of iSCSI, hawwe wy sokke entiteiten as inisjatyfnimmer en doel. Doel is eins in tsjinner, inisjatyfnimmer is in kliïnt. Us taak is om it Ceph-ôfbylding mei minimale ynspanning oan de inisjatyfnimmer yn te tsjinjen. Dit betsjut dat wy it doel moatte útwreidzje. Mar wêr, op hokker kompjûter?

Gelokkich hawwe wy yn in Ceph-kluster op syn minst ien komponint wêrfan it IP-adres fêst is en wêrop ien fan 'e wichtichste komponinten fan Ceph is ynsteld, en dat komponint is de monitor. Dêrom ynstallearje wy in iSCSI-doel op 'e monitor (en tagelyk in inisjator, teminsten foar tests). Ik die dit op CentOS, mar de oplossing is ek geskikt foar elke oare distribúsje - jo moatte gewoan de pakketten ynstallearje op 'e manier dy't akseptabel is yn jo distribúsje.

# yum -y install iscsi-initiator-utils targetcli

Wat is it doel fan de ynstallearre pakketten?

  • targetcli - in hulpprogramma foar it behearen fan it SCSI-doel ynboud yn 'e Linux-kernel
  • iscsi-initiator-utils - in pakket mei helpprogramma's dy't brûkt wurde om de iSCSI-inisjatyf te behearjen ynboud yn 'e Linux-kernel

Om in ôfbylding fia iSCSI yn te tsjinjen by de inisjatyfnimmer, binne d'r twa opsjes foar de ûntwikkeling fan eveneminten - brûk de brûkersromte efterkant fan it doel of ferbine de ôfbylding as in blokapparaat sichtber foar it bestjoeringssysteem en eksportearje it fia iSCSI. Wy sille de twadde manier gean - de backend fan 'e brûkersromte is noch yn in "eksperimintele" steat en is in bytsje net klear foar produktyf gebrûk. Dêrnjonken sitte der klappen mei, dêr't men in protte oer prate kinst en (oh horror!) riede kinst.

As wy sels in wat stabile ferdieling brûke mei in lange stipesyklus, dan is de kernel dy't wy hawwe in âlde, âlde ferzje. Bygelyks, yn CentOS7 is it 3.10.*, yn CentOS8 is it 4.19. En wy binne ynteressearre yn in kernel fan op syn minst 5.3 (of leaver 5.4) en nijer. Wêrom? Om't standert Ceph-ôfbyldings in set opsjes ynskeakele hawwe dy't net kompatibel binne mei âldere kernels. Dit betsjut dat wy in repository ferbine mei in nije kernel foar ús distribúsje (bygelyks foar CentOS is dit elrepo), de nije kernel ynstallearje en it systeem opnij starte om te wurkjen mei de nije kernel:

  • Ferbine mei de monitor selektearre foar it eksperimint
  • Wy ferbine elrepo-repositories neffens de ynstruksjes - elrepo.org/tiki/tiki-index.php
  • Ynstallearje de kernel: yum -y —enablerepo=elrepo-kernel ynstallearje kernel-ml
  • Reboot de tsjinner mei de monitor (wy hawwe trije monitors, krekt?)

Ferbine de ôfbylding as in blok apparaat

# rbd map mypool/myimage
/dev/rbd0

Alles wat oerbliuwt is it doel te konfigurearjen. Yn dit foarbyld sil ik konfigurearje it doel yn 'e saneamde. demo-modus - sûnder autentikaasje, sichtber en tagonklik foar elkenien. Yn in produksjeomjouwing sille jo wierskynlik autentikaasje wolle ynstelle - mar dat is in bytsje bûten it berik foar de hjoeddeiske gewoan-foar-wille-oefening.

Meitsje in backend mei de namme disk1 ferbûn mei de triem /dev/rbd/mypool/myimage. It oantsjutte bestân is in symboalyske keppeling dy't automatysk makke wurdt troch de udev-daemon nei /dev/rbd0. Wy brûke in symboalyske keppeling, om't de namme fan it rbd-apparaat kin feroarje ôfhinklik fan 'e folchoarder wêryn't de Ceph-ôfbyldings ferbûn binne mei de host.

Meitsje in backend:

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

Meitsje in iSCSI-doel:

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

Wy ferbine de efterkant as in LUN oan it doel:

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

Litte wy it doel konfigurearje foar demo-modus:

# 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

Bewarje de konfiguraasje:

# targetcli saveconfig

Kontrolearje de beskikberens fan it doel:

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

Wy ferbine it doel:

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

As jo ​​dien alles goed, in nije skiif sil ferskine op de tsjinner, dat liket op in SCSI apparaat, mar is eins in ôfbylding út Ceph, tagong fia in iSCSI doel. Om bootproblemen te foarkommen, is it better om de ferbûne skiif en it ûntdutsen doel te ferwiderjen fan 'e lokale inisjatyfnimmer:

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

Alles wat oerbliuwt is de konfiguraasje troch te hâlden sadat de ôfbylding automatysk wurdt ferbûn en, nei ferbining, wurdt it doel stratifisearre. It lansearjen fan in doel bestiet út twa stappen - it ferbinen fan de RBD en eins it lansearjen fan it doel.

Litte wy earst de automatyske ferbining fan RBD-ôfbyldings konfigurearje nei de host. Dit wurdt dien troch de folgjende rigels ta te foegjen oan it /etc/ceph/rbdmap-bestân:

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

It werstellen fan de doelkonfiguraasje is in bytsje komplisearre - wy moatte in ienheid foar systemd skriuwe dy't de konfiguraasje weromsette sil:

# 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

De lêste test is om ús monitor opnij op te starten (it is no in iSCSI-doel). It moat opmurken wurde dat as wy de databank fan de inisjatyfnimmer net hawwe wiske mei it kommando iscsiadm -n discoverydb -o wiskje ... jo kinne einigje mei in tsjinner dy't net laden of duorret lang om te laden.

Wat oer is?

Konfigurearje de inisjatyfnimmer op 'e tsjinner wêr't wy it doel stjoere wolle.

Hoe kinne wy ​​​​fouttolerânsje fan ús doel soargje?

Jo kinne ek doelen op oare monitors konfigurearje en multipath ynstelle (vmware sil dit begripe en sels wurkje, Hyper-V sil net begripe - it fereasket SCSI-slûzen). Sûnt de Ceph-kliïnt fan 'e kernel gjin caching brûkt, is dit frij wurkber. Of in oare opsje is om in klusterboarne te meitsjen fan trije komponinten - in tawijd doel-IP-adres en rbdmap- en scsi-target-tsjinsten, en dizze boarne te behearjen fia clustering-ark (wa sei pacemaker?)

Ynstee fan epilogue

Lykas dúdlik is, is dit artikel in bytsje in grap - mar dêryn besocht ik "fluch en mei foarbylden" ferskate frij populêre ûnderwerpen tagelyk te beskôgjen - iSCSI-doel, dat miskien net needsaaklik Ceph-ôfbyldings eksportearje kin - mar bygelyks, eksportearje LVM-voluminten, de basis fan wurkjen mei in iSCSI-inisjatyfnimmer (hoe't jo in doel scannen, hoe't jo ferbine mei in doel, losmeitsje, in doelyngong fan 'e database wiskje), jo eigen ienheid skriuwe foar systemd en guon oaren

Ik hoopje dat sels as jo dit hiele eksperimint net folslein werhelje, teminsten wat út dit artikel sil nuttich wêze foar jo.

Boarne: www.habr.com

Add a comment