Ceph per iSCSI – arba slidinėjimas stovint hamake

Ar tarp mūsų (cefovodovo) yra tokių, kurie nemėgsta „profesionalių ekstremalių“?

Vargu ar tai – kitu atveju mes nesikreiptume su šiuo nepaprastai įdomiu ir juokingu gaminiu.

Daugelis tų, kurie dalyvavo Ceph eksploatacijoje, susidūrė su vienu ne itin dažnu (o tiksliau net labai retu), bet kartais paklausiu atveju – Ceph prijungimu per iSCSI arba FC. Kam? Na, pavyzdžiui, pateikite vaizdą iš Ceph į Windows arba Solaris serverį, kuris dėl kokių nors priežasčių dar nebuvo virtualizuotas. Arba virtualizuota, bet naudojant hipervizorių, kuris negali atlikti Ceph – ir, kaip žinome, jų yra daug. Pavyzdžiui? Na, pavyzdžiui, HyperV arba ESXi, kurie yra aktyviai naudojami. Ir jei iškyla užduotis pateikti vaizdą iš Ceph į svečio mašiną, tai virsta labai įdomia užduotimi.

Taigi, atsižvelgiant į:

  1. jau veikiantis Ceph klasteris
  2. jau esamas vaizdas, kuris turi būti pateiktas per iSCSI
  3. Baseino pavadinimas mypool, vaizdo pavadinimas mano vaizdas

Pradėti?

Visų pirma, kai kalbame apie FC arba iSCSI, turime tokius subjektus kaip iniciatorius ir taikinys. Tikslas iš tikrųjų yra serveris, iniciatorius yra klientas. Mūsų užduotis – minimaliomis pastangomis pateikti Ceph vaizdą iniciatoriui. Tai reiškia, kad turime išplėsti tikslą. Bet kur, kokiame kompiuteryje?

Laimei, Ceph klasteryje turime bent vieną komponentą, kurio IP adresas yra fiksuotas ir kuriame yra sukonfigūruotas vienas iš svarbiausių Ceph komponentų, ir tas komponentas yra monitorius. Atitinkamai, mes įdiegiame iSCSI tikslą monitoriuje (ir tuo pačiu iniciatorių, bent jau bandymams). Aš tai padariau CentOS, tačiau sprendimas tinka ir bet kokiam kitam platinimui – tereikia įdiegti paketus taip, kaip priimtina jūsų platinimui.

# yum -y install iscsi-initiator-utils targetcli

Kokia yra įdiegtų paketų paskirtis?

  • targetcli — „Linux“ branduolyje integruoto SCSI tikslo valdymo įrankis
  • iscsi-iniciator-utils — paketas su komunalinėmis programomis, naudojamomis valdyti iSCSI iniciatorių, integruotą į Linux branduolį

Norint iniciatoriui pateikti vaizdą per iSCSI, yra dvi įvykių kūrimo parinktys – naudoti taikinio userspace backend arba prijungti vaizdą kaip operacinės sistemos matomą blokinį įrenginį ir eksportuoti per iSCSI. Eisime antruoju keliu – vartotojo erdvės užpakalinė dalis vis dar yra „eksperimentinėje“ būsenoje ir šiek tiek nepasirengusi produktyviam naudojimui. Be to, jame yra ir spąstų, apie kuriuos galima daug kalbėti ir (o siaube!) ginčytis.

Jei naudosime nors kiek stabilų paskirstymą su ilgu palaikymo ciklu, tai mūsų turimas branduolys yra kažkokia senovinė, senovinė versija. Pavyzdžiui, CentOS7 jis yra 3.10.*, CentOS8 – 4.19. O mus domina bent 5.3 (tiksliau 5.4) ir naujesnis branduolys. Kodėl? Kadangi pagal numatytuosius nustatymus Ceph vaizduose yra įjungtas parinkčių rinkinys, nesuderinamas su senesniais branduoliais. Tai reiškia, kad sujungiame saugyklą su nauju mūsų platinimo branduoliu (pavyzdžiui, CentOS tai yra elrepo), įdiegiame naują branduolį ir iš naujo paleidžiame sistemą, kad veiktų su nauju branduoliu:

  • Prijunkite prie eksperimentui pasirinkto monitoriaus
  • Mes prijungiame elrepo saugyklas pagal instrukcijas - elrepo.org/tiki/tiki-index.php
  • Įdiekite branduolį: yum -y —enablerepo=elrepo-kernel install kernel-ml
  • Perkraukite serverį naudodami monitorių (turime tris monitorius, tiesa?)

Vaizdo prijungimas kaip blokinis įrenginys

# rbd map mypool/myimage
/dev/rbd0

Lieka tik sukonfigūruoti tikslą. Šiame pavyzdyje taikinį sukonfigūruosiu vadinamajame. demonstracinis režimas – be autentifikavimo, matomas ir prieinamas visiems. Gamybinėje aplinkoje tikriausiai norėsite sukonfigūruoti autentifikavimą, bet tai šiek tiek nepatenka į šiandienos pramogų pratimą.

Sukurkite užpakalinę programą pavadinimu disk1, susietą su failu /dev/rbd/mypool/myimage. Nurodytas failas yra simbolinė nuoroda, automatiškai sukurta udev demono į /dev/rbd0. Mes naudojame simbolinę nuorodą, nes rbd įrenginio pavadinimas gali keistis priklausomai nuo to, kokia tvarka Ceph vaizdai prijungiami prie pagrindinio kompiuterio.

Sukurkite užpakalinę programą:

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

Sukurkite iSCSI tikslą:

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

Prijungiame užpakalinę dalį kaip LUN prie tikslo:

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

Sukonfigūruokime demonstracinio režimo tikslą:

# 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

Išsaugokite konfigūraciją:

# targetcli saveconfig

Tikslo buvimo patikrinimas:

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

Mes sujungiame tikslą:

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

Jei viską padarėte teisingai, serveryje atsiras naujas diskas, kuris atrodo kaip SCSI įrenginys, bet iš tikrųjų yra vaizdas iš Ceph, pasiekiamas per iSCSI taikinį. Norint išvengti įkrovos problemų, geriau pašalinti prijungtą diską ir aptiktą tikslą iš vietinio iniciatoriaus:

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

Belieka išlaikyti konfigūraciją, kad vaizdas būtų prijungtas automatiškai, o po prisijungimo tikslas būtų stratifikuotas. Taikinio paleidimas susideda iš dviejų žingsnių – UBR prijungimo ir taikinio faktinio paleidimo.

Pirmiausia sukonfigūruokime automatinį RBD vaizdų prijungimą prie pagrindinio kompiuterio. Tai atliekama pridedant šias eilutes prie /etc/ceph/rbdmap failo:

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

Tikslinės konfigūracijos atkūrimas yra šiek tiek sudėtingesnis - turime parašyti sistemos vienetą, kuris atkurs konfigūraciją:

# 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

Paskutinis bandymas yra iš naujo paleisti monitorių (dabar tai yra iSCSI tikslas). Reikėtų pažymėti, kad jei nebūtume išvalę iniciatoriaus duomenų bazės komanda iscsiadm -n discoverydb -o ištrinti... gali atsirasti serveris, kuris neįkeliamas arba įkeliamas ilgai.

Kas liko?

Konfigūruokite iniciatorių serveryje, į kurį norime nusiųsti tikslą.

Kaip užtikrinti mūsų tikslo atsparumą gedimams?

Panašiai galite konfigūruoti taikinius kituose monitoriuose ir nustatyti daugialypį kelią (vmware tai supras ir net veiks, Hyper-V nesupras – tam reikia SCSI užraktų). Kadangi Ceph klientas iš branduolio nenaudoja talpyklos, tai yra gana veiksminga. Arba kita galimybė yra sukurti klasterio išteklius iš trijų komponentų – tam skirto tikslinio IP adreso ir rbdmap bei scsi-target paslaugų, ir valdyti šiuos išteklius naudojant grupavimo įrankius (kas sakė, kad širdies stimuliatorius?)

vietoj Epilogas

Kaip aišku, šis straipsnis yra šioks toks pokštas, tačiau jame bandžiau „greitai ir su pavyzdžiais“ nagrinėti kelias gana populiarias temas vienu metu – „iSCSI target“, kuri nebūtinai gali eksportuoti „Ceph“ vaizdus, ​​bet pvz. eksportuoti LVM tomus, darbo su iSCSI iniciatoriumi pagrindus (kaip nuskaityti taikinį, kaip prisijungti prie taikinio, atsijungti, ištrinti tikslinį įrašą iš duomenų bazės), rašyti savo įrenginį systemd ir kai kuriuos kitus

Tikiuosi, kad net jei nepakartosite viso šio eksperimento iki galo, bent kažkas iš šio straipsnio jums bus naudinga.

Šaltinis: www.habr.com

Добавить комментарий