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.
Многие из тех, кто занимались эксплуатацией Ceph, встречали один не слишком частый (а скорее даже очень нечастый) но иногда востребованный кейс — подключить Ceph по iSCSI или FC. Зачем? Ну, например, подать образ с Ceph на почему-то еще не виртуализированный сервер Windows или Solaris. Или на виртуализированный, но посредством гипервизора, который не умеет Ceph — а их, как мы знаем, хватает. Например? Ну, например, HyperV или ESXi, которые активно используются. И если возникает задача подать образ с Ceph в гостевую машину, это превращается в весьма увлекательную задачу.
Taigi, atsižvelgiant į:
- jau veikiantis Ceph klasteris
- jau esamas vaizdas, kuris turi būti pateiktas per iSCSI
- 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?
К счастью, в кластере Ceph у нас есть как минимум один компонент, чей IP-адрес фиксирован и на котором сконфигурирован один из самых важных компонентов Ceph, и этот компонент — монитор. Соответственно, на мониторе устанавливаем iSCSI target (и initator заодно, как минимум для тестов). Я делал это на CentOS, но для любого другого дистрибутива решение также подойдет — достаточно просто ставить пакеты тем способом который приемлем в вашем дистрибутиве.
# yum -y install iscsi-initiator-utils targetcli
Kokia yra įdiegtų paketų paskirtis?
- targetcli — утилита управления встроенным в ядро Linux SCSI-таргетом
- iscsi-iniciator-utils — пакет с утилитами используемыми для управления опять же встроенным в ядро Linux iSCSI initiator’ом
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.
Если мы используем хоть сколь-нибудь стабильный дистрибутив с дооолгим циклом поддержки, то ядро у нас какой-нибудь древней-древней версии. Например в CentOS7 это 3.10.*, в CentOS8 это 4.19. А нам интересно ядро как минимум 5.3 (а скорее 5.4) и более новое. Почему? Потому, что по умолчанию образы в Ceph имеют подключенный набор опций, который не совместим со старыми ядрами. А значит, мы подключаем репозиторий с новым ядром для нашего дистрибутива (например, для CentOS это elrepo), устанавливаем новое ядро и перезагружаем систему чтобы работать с новым ядром:
- Prijunkite prie eksperimentui pasirinkto monitoriaus
- Mes prijungiame elrepo saugyklas pagal instrukcijas -
- Į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
Po=network-online.target rbdmap.service
Prieš=nuotolinis-fs-prieš.target
Nori=network-online.target remote-fs-pre.target
[Paslauga]
Type = oneshot
RemainAfterExit = taip
ExecStart=/bin/targetcli restoreconfig
[Diegti]
WantedBy = multi-user.target
# systemctl daemon-reload
# systemctl įjungti 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 kelių krypčių nustatymą („VMware“ tai supras ir netgi veiks, bet „Hyper-V“ ne, nes jai reikalingi SCSI užraktai). Kadangi branduolio „Ceph“ klientas nenaudoja talpyklos, tai visiškai įmanoma. Kita galimybė – sukurti klasterio išteklių iš trijų komponentų – dedikuoto IP adresai target ir paslaugos rbdmap ir scsi-target, ir valdyti šį išteklių naudojant klasterizavimo įrankius (kas sakė, kad tai š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
