Ceph í gegnum iSCSI - eða á skíði meðan þú stendur í hengirúmi

Eru þeir á meðal okkar (tsefovodov) sem líkar ekki við „faglega öfgar“?

Það er ólíklegt - annars værum við ekki að veltast um með þessa einstaklega áhugaverðu og fyndnu vöru.

Margir þeirra sem tóku þátt í rekstri Ceph hafa rekist á eitt sem er ekki mjög oft (eða öllu heldur jafnvel mjög sjaldgæft) en stundum eftirspurn - að tengja Ceph í gegnum iSCSI eða FC. Til hvers? Jæja, til dæmis, sendu mynd frá Ceph á Windows eða Solaris netþjón sem hefur ekki enn verið sýndargerð af einhverjum ástæðum. Eða sýndargerð, en með því að nota hypervisor sem getur ekki gert Ceph - og eins og við vitum, þá er nóg af þeim. Til dæmis? Jæja, til dæmis, HyperV eða ESXi, sem eru virkir notaðir. Og ef það verkefni kemur upp að bera mynd frá Ceph í gestavél breytist þetta í mjög spennandi verkefni.

Svo, gefið:

  1. Ceph þyrping sem þegar er í gangi
  2. mynd sem þegar er til og verður að þjóna í gegnum iSCSI
  3. Nafn sundlaugar mypool, nafn mynd myndin mín

Byrja?

Í fyrsta lagi, þegar við tölum um FC eða iSCSI, höfum við slíka aðila sem frumkvöðla og markmið. Target er í raun netþjónn, frumkvöðull er viðskiptavinur. Verkefni okkar er að senda Ceph myndina til frumkvöðuls með lágmarks fyrirhöfn. Þetta þýðir að við verðum að auka markmiðið. En hvar, á hvaða tölvu?

Sem betur fer höfum við í Ceph klasa að minnsta kosti einn íhlut þar sem IP tölu er fastur og einn mikilvægasti hluti Ceph er stilltur á, og sá hluti er skjárinn. Í samræmi við það setjum við upp iSCSI miða á skjáinn (og frumkvöðla á sama tíma, að minnsta kosti fyrir próf). Ég gerði þetta á CentOS, en lausnin hentar líka fyrir hverja aðra dreifingu - þú þarft bara að setja upp pakkana á þann hátt sem er viðunandi í þinni dreifingu.

# yum -y install iscsi-initiator-utils targetcli

Hver er tilgangurinn með uppsettu pakkanum?

  • targetcli — tól til að stjórna SCSI-markmiðinu sem er innbyggt í Linux kjarnann
  • ISCSI-upphafs-UTILS — pakki með tólum sem notuð eru til að stjórna iSCSI frumkvöðlinum sem er innbyggður í Linux kjarnann

Til að senda mynd í gegnum iSCSI til frumkvöðuls, eru tveir möguleikar fyrir þróun atburða - notaðu notendasvæði bakenda marksins eða tengdu myndina sem blokkartæki sem er sýnilegt stýrikerfinu og fluttu það út í gegnum iSCSI. Við munum fara aðra leið - bakendi notendarýmisins er enn í „tilrauna“ ástandi og er örlítið ekki tilbúinn til afkastamikillar notkunar. Auk þess eru gildrur við það, sem þú getur talað mikið um og (ó hryllingur!) deilt um.

Ef við notum jafnvel nokkuð stöðuga dreifingu með langri stuðningslotu, þá er kjarninn sem við höfum einhver forn, forn útgáfa. Til dæmis, í CentOS7 er það 3.10.*, í CentOS8 er það 4.19. Og við höfum áhuga á kjarna sem er að minnsta kosti 5.3 (eða réttara sagt 5.4) og nýrri. Hvers vegna? Vegna þess að sjálfgefið er að Ceph myndir hafa sett af valkostum virkt sem er ekki samhæft við eldri kjarna. Þetta þýðir að við tengjum geymslu við nýjan kjarna fyrir dreifingu okkar (til dæmis fyrir CentOS er þetta elrepo), setjum upp nýja kjarnann og endurræsum kerfið til að vinna með nýja kjarnanum:

  • Tengdu við skjáinn sem valinn var fyrir tilraunina
  • Við tengjum elrepo geymslur samkvæmt leiðbeiningunum - elrepo.org/tiki/tiki-index.php
  • Settu upp kjarnann: yum -y —enablerepo=elrepo-kjarna settu upp kernel-ml
  • Endurræstu netþjóninn með skjánum (við erum með þrjá skjái, ekki satt?)

Að tengja myndina sem blokkartæki

# rbd map mypool/myimage
/dev/rbd0

Allt sem er eftir er að stilla markmiðið. Í þessu dæmi mun ég stilla markmiðið í svokölluðu. kynningarhamur - án auðkenningar, sýnilegur og aðgengilegur öllum. Í framleiðsluumhverfi muntu líklega vilja stilla auðkenningu - en það er dálítið utan sviðs fyrir æfingu í dag bara til gamans.

Búðu til bakenda sem heitir disk1 sem tengist skránni /dev/rbd/mypool/myimage. Tilgreind skrá er táknrænn hlekkur sem er sjálfkrafa búinn til af udev púknum á /dev/rbd0. Við notum táknrænan hlekk vegna þess að nafn rbd tækisins getur breyst eftir því í hvaða röð Ceph myndirnar eru tengdar við hýsilinn.

Búðu til bakenda:

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

Búðu til iSCSI markmið:

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

Við tengjum bakendann sem LUN við markmiðið:

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

Við skulum stilla markmiðið fyrir kynningarham:

# 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

Vistaðu stillingarnar:

# targetcli saveconfig

Athugaðu tilvist skotmarksins:

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

Við tengjum markmið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.

Ef þú gerðir allt rétt birtist nýr diskur á þjóninum sem lítur út eins og SCSI tæki, en er í raun mynd frá Ceph, sem nálgast er í gegnum iSCSI target. Til að koma í veg fyrir ræsingarvandamál er betra að fjarlægja tengda diskinn og greint skotmark frá staðbundnum frumkvöðli:

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

Allt sem er eftir er að halda uppsetningunni áfram þannig að myndin tengist sjálfkrafa og, eftir tengingu, er markmiðið lagskipt. Að ræsa skotmark samanstendur af tveimur skrefum - að tengja RBD og í raun ræsa markið.

Fyrst skulum við stilla sjálfvirka tengingu RBD mynda við gestgjafann. Þetta er gert með því að bæta eftirfarandi línum við /etc/ceph/rbdmap skrána:

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

Það er aðeins flóknara að endurheimta markstillinguna - við þurfum að skrifa einingu fyrir systemd sem mun endurheimta stillingarnar:

# 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

Lokaprófið er að endurræsa skjáinn okkar aftur (það er nú iSCSI markmið). Það skal tekið fram að ef við hefðum ekki hreinsað gagnagrunn frumkvöðuls með skipuninni iscsiadm -n discoverydb -o eyða ... þú gætir endað með server sem hleður ekki eða tekur langan tíma að hlaðast.

Hvað er eftir?

Stilltu upphafsmanninn á þjóninum sem við viljum senda markið á.

Hvernig á að tryggja bilanaþol markmiðs okkar?

Þú getur á sama hátt stillt markmið á öðrum skjáum og sett upp multipath (vmware mun skilja þetta og jafnvel virka, Hyper-V mun ekki skilja - það krefst SCSI læsinga). Þar sem Ceph biðlarinn frá kjarnanum notar ekki skyndiminni er þetta alveg framkvæmanlegt. Eða annar valkostur er að búa til klasatilföng úr þremur hlutum - sérstakt IP-tala og rbdmap og scsi-target þjónustu, og stjórna þessu tilfangi með klasaverkfærum (hver sagði gangráð?)

Í staðinn fyrir eftirsögn

Eins og ljóst er er þessi grein smá grín - en í henni reyndi ég að "fljótt og með dæmum" íhuga nokkur nokkuð vinsæl efni á sama tíma - iSCSI target, sem gæti ekki endilega flutt út Ceph myndir - en td. flytja út LVM bindi, grunnatriði að vinna með iSCSI frumkvöðla (hvernig á að skanna skotmark, hvernig á að tengjast markmiði, aftengja, eyða markfærslu úr gagnagrunninum), skrifa eigin einingu fyrir systemd og nokkrar aðrar

Ég vona að jafnvel þótt þú endurtaki ekki alla þessa tilraun að fullu, þá muni að minnsta kosti eitthvað úr þessari grein nýtast þér.

Heimild: www.habr.com

Bæta við athugasemd