Ceph, izmantojot iSCSI ā€“ vai slēpoÅ”ana, stāvot ŔūpuļtÄ«klā

Vai starp mums (cefovodovs) ir tādi, kuriem nepatÄ«k ā€œprofesionālā ekstrēmeā€?

Tas ir maz ticams ā€” pretējā gadÄ«jumā mēs nekautrētos ar Å”o ārkārtÄ«gi interesanto un smieklÄ«go produktu.

Daudzi no tiem, kas bija iesaistÄ«ti Ceph darbÄ«bā, ir saskāruÅ”ies ar vienu ne pārāk biežu (vai drÄ«zāk pat ļoti retu), bet dažkārt pieprasÄ«tu gadÄ«jumu - Ceph pieslēgÅ”anu caur iSCSI vai FC. Par ko? Nu, piemēram, iesniedziet attēlu no Ceph uz Windows vai Solaris serveri, kas kaut kādu iemeslu dēļ vēl nav virtualizēts. Vai arÄ« virtualizētu, bet izmantojot hipervizoru, kas nevar veikt Ceph ā€” un, kā mēs zinām, tādu ir daudz. Piemēram? Nu, piemēram, HyperV vai ESXi, kas tiek aktÄ«vi izmantoti. Un, ja rodas uzdevums pasniegt attēlu no Ceph viesu maŔīnai, tas kļūst par ļoti aizraujoÅ”u uzdevumu.

Tātad, ņemot vērā:

  1. jau darbojas Ceph klasteris
  2. jau esoÅ”s attēls, kas jāapkalpo, izmantojot iSCSI
  3. Baseina nosaukums mypool, attēla nosaukums mans attēls

Vai sākt?

Pirmkārt, runājot par FC vai iSCSI, mums ir tādas entÄ«tijas kā iniciators un mērÄ·is. MērÄ·is faktiski ir serveris, iniciators ir klients. MÅ«su uzdevums ir ar minimālu piepÅ«li iesniegt Ceph attēlu iniciatoram. Tas nozÄ«mē, ka mums ir jāpaplaÅ”ina mērÄ·is. Bet kur, uz kāda datora?

Par laimi, Ceph klasterÄ« mums ir vismaz viens komponents, kura IP adrese ir fiksēta un kurā ir konfigurēta viena no svarÄ«gākajām Ceph sastāvdaļām, un Ŕī sastāvdaļa ir monitors. AttiecÄ«gi mēs monitorā instalējam iSCSI mērÄ·i (un tajā paŔā laikā iniciatoru, vismaz testiem). Es to izdarÄ«ju uz CentOS, taču risinājums ir piemērots arÄ« jebkuram citam izplatÄ«Å”anai - jums vienkārÅ”i jāinstalē pakotnes tā, kā tas ir pieņemams jÅ«su izplatÄ«Å”anā.

# yum -y install iscsi-initiator-utils targetcli

Kāds ir instalēto pakotņu mērķis?

  • targetcli ā€” utilÄ«ta Linux kodolā iebÅ«vētā SCSI mērÄ·a pārvaldÄ«bai
  • iscsi-iniciator-utils ā€” pakotne ar utilÄ«tprogrammām, ko izmanto, lai pārvaldÄ«tu Linux kodolā iebÅ«vēto iSCSI iniciatoru

Lai iniciatoram iesniegtu attēlu caur iSCSI, notikumu izstrādei ir divas iespējas - izmantot mērÄ·a userspace aizmuguri vai savienot attēlu kā operētājsistēmai redzamu blokierÄ«ci un eksportēt caur iSCSI. Mēs iesim otro ceļu - userspace aizmugursistēma joprojām ir ā€œeksperimentālāā€ stāvoklÄ« un nedaudz nav gatava produktÄ«vai lietoÅ”anai. Turklāt ar to ir arÄ« lamatas, par kurām var daudz runāt un (ak Å”ausmas!) strÄ«dēties.

Ja mēs izmantojam kaut nedaudz stabilu izplatÄ«Å”anu ar ilgu atbalsta ciklu, tad mÅ«su kodols ir kāda sena, sena versija. Piemēram, CentOS7 tas ir 3.10.*, CentOS8 tas ir 4.19. Un mÅ«s interesē vismaz 5.3 (vai drÄ«zāk 5.4) un jaunāks kodols. Kāpēc? Jo pēc noklusējuma Ceph attēliem ir iespējota opciju kopa, kas nav saderÄ«ga ar vecākiem kodoliem. Tas nozÄ«mē, ka mēs savienojam repozitoriju ar jaunu kodolu mÅ«su izplatÄ«Å”anai (piemēram, CentOS tas ir elrepo), instalējam jauno kodolu un restartējam sistēmu, lai strādātu ar jauno kodolu:

  • Pievienojieties eksperimentam atlasÄ«tajam monitoram
  • Mēs savienojam elrepo repozitorijus saskaņā ar instrukcijām - elrepo.org/tiki/tiki-index.php
  • Instalējiet kodolu: yum -y ā€”enablerepo=elrepo-kernel install kernel-ml
  • Pārstartējiet serveri ar monitoru (mums ir trÄ«s monitori, vai ne?)

Attēla savienoÅ”ana kā bloka ierÄ«ce

# rbd map mypool/myimage
/dev/rbd0

Atliek tikai konfigurēt mērÄ·i. Å ajā piemērā es konfigurÄ“Å”u mērÄ·i tā sauktajā. demonstrācijas režīms - bez autentifikācijas, redzams un pieejams ikvienam. RažoÅ”anas vidē jÅ«s, iespējams, vēlēsities konfigurēt autentifikāciju, taču tas ir nedaudz ārpus darbÄ«bas jomas Å”odienas tikai prieka pēc.

Izveidojiet aizmugursistēmu ar nosaukumu disk1, kas saistīta ar failu /dev/rbd/mypool/myimage. Norādītais fails ir simboliska saite, ko udev dēmons automātiski izveido uz /dev/rbd0. Mēs izmantojam simbolisku saiti, jo rbd ierīces nosaukums var mainīties atkarībā no secības, kādā Ceph attēli ir savienoti ar resursdatoru.

Izveidojiet aizmugursistēmu:

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

Izveidojiet iSCSI mērķi:

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

Mēs savienojam aizmuguri kā LUN ar mērķi:

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

Konfigurēsim demonstrācijas režīma mērķi:

# 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

Saglabājiet konfigurāciju:

# targetcli saveconfig

Mērķa klātbūtnes pārbaude:

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

Mēs savienojam mērķi:

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

Ja visu izdarÄ«jāt pareizi, serverÄ« parādÄ«sies jauns disks, kas izskatās kā SCSI ierÄ«ce, bet patiesÄ«bā ir Ceph attēls, kuram var piekļūt, izmantojot iSCSI mērÄ·i. Lai izvairÄ«tos no sāknÄ“Å”anas problēmām, labāk ir noņemt pievienoto disku un noteikto mērÄ·i no vietējā iniciatora:

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

Atliek tikai saglabāt konfigurāciju, lai attēls tiktu automātiski savienots un pēc savienojuma mērÄ·is tiktu stratificēts. MērÄ·a palaiÅ”ana sastāv no diviem posmiem ā€“ UBA savienoÅ”anas un mērÄ·a palaiÅ”anas.

Vispirms konfigurēsim automātisku RBD attēlu savienojumu ar resursdatoru. To var izdarÄ«t, failam /etc/ceph/rbdmap pievienojot Ŕādas rindiņas:

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

MērÄ·a konfigurācijas atjaunoÅ”ana ir nedaudz sarežģītāka - mums ir jāraksta systemd vienÄ«ba, kas atjaunos konfigurāciju:

# 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

Pēdējais tests ir vēlreiz pārstartēt mÅ«su monitoru (tagad tas ir iSCSI mērÄ·is). JāatzÄ«mē, ka, ja mēs nebÅ«tu notÄ«rÄ«juÅ”i iniciatora datu bāzi ar komandu iscsiadm -n discoverydb -o dzēst... jÅ«s varētu nonākt pie servera, kas netiek ielādēts vai ielāde prasa ilgu laiku.

Kas atliek?

Konfigurējiet iniciatoru serverī, uz kuru mēs vēlamies nosūtīt mērķi.

Kā nodroÅ”ināt mÅ«su mērÄ·a kļūdu toleranci?

JÅ«s varat lÄ«dzÄ«gi konfigurēt mērÄ·us citos monitoros un sakārtot vairāku ceļu (vmware to sapratÄ«s un pat darbosies, Hyper-V nesapratÄ«s - tam ir nepiecieÅ”amas SCSI slēdzenes). Tā kā Ceph klients no kodola neizmanto keÅ”atmiņu, tas ir diezgan funkcionāls. Vai arÄ« cita iespēja ir izveidot klastera resursu no trim komponentiem - speciālas mērÄ·a IP adreses un rbdmap un scsi-target pakalpojumiem, un pārvaldÄ«t Å”o resursu, izmantojot klasterizācijas rÄ«kus (kurÅ” teica, ka elektrokardiostimulators?)

tā vietā, lai epilogs

Kā skaidrs, Å”is raksts ir neliels joks, taču tajā es mēģināju ā€œÄtri un ar piemēriemā€ aplÅ«kot vairākas diezgan populāras tēmas vienlaikus - iSCSI target, kas var ne vienmēr eksportēt Ceph attēlus, bet, piemēram, LVM sējumu eksportÄ“Å”ana, pamati darbam ar iSCSI iniciatoru (kā skenēt mērÄ·i, kā izveidot savienojumu ar mērÄ·i, atvienot, dzēst mērÄ·a ierakstu no datu bāzes), rakstot savu vienÄ«bu systemd un daži citi

Es ceru, ka pat tad, ja neatkārtosit visu Ŕo eksperimentu pilnībā, vismaz kaut kas no Ŕī raksta jums būs noderīgs.

Avots: www.habr.com

Pievieno komentāru