Ceph iSCSI:n kautta - tai laskettelu riippumatossa seisten

Onko joukossamme (tsefovodovia) niitä, jotka eivät pidä "ammatillisesta äärimmäisyydestä"?

Se on epätodennäköistä – muuten emme pyörisi tämän erittäin mielenkiintoisen ja hauskan tuotteen kanssa.

Monet Cephin toiminnassa mukana olleista ovat törmänneet yhteen ei kovin usein (tai pikemminkin jopa hyvin harvoin), mutta joskus kysyttyyn tapaukseen - joka yhdistää Cephin iSCSI:n tai FC:n kautta. Minkä vuoksi? No, esimerkiksi lähetä kuva Cephistä Windows- tai Solaris-palvelimelle, jota ei ole jostain syystä vielä virtualisoitu. Tai virtualisoitu, mutta käyttämällä hypervisoria, joka ei pysty tekemään Cephiä - ja kuten tiedämme, niitä on paljon. Esimerkiksi? No, esimerkiksi HyperV tai ESXi, joita käytetään aktiivisesti. Ja jos tehtävänä on tarjota kuva Cephistä vieraskoneeseen, siitä tulee erittäin jännittävä tehtävä.

Eli annettu:

  1. jo käynnissä oleva Ceph-klusteri
  2. jo olemassa oleva kuva, joka on toimitettava iSCSI:n kautta
  3. Altaan nimi mypool, kuvan nimi oma kuva

Alkaa?

Ensinnäkin, kun puhumme FC:stä tai iSCSI:stä, meillä on sellaisia ​​kokonaisuuksia kuin aloittaja ja kohde. Target on itse asiassa palvelin, aloittaja on asiakas. Tehtävämme on toimittaa Ceph-kuva aloitteentekijälle vähällä vaivalla. Tämä tarkoittaa, että meidän on laajennettava tavoitetta. Mutta missä, millä tietokoneella?

Onneksi Ceph-klusterissa on ainakin yksi komponentti, jonka IP-osoite on kiinteä ja johon yksi tärkeimmistä Ceph-komponenteista on määritetty, ja se komponentti on näyttö. Vastaavasti asennamme monitoriin iSCSI-kohteen (ja samalla initiaattorin, ainakin testejä varten). Tein tämän CentOS:llä, mutta ratkaisu sopii myös mihin tahansa muuhun jakeluun - sinun tarvitsee vain asentaa paketit jakelussasi hyväksyttävällä tavalla.

# yum -y install iscsi-initiator-utils targetcli

Mikä on asennettujen pakettien tarkoitus?

  • targetcli — apuohjelma Linux-ytimeen sisäänrakennetun SCSI-kohteen hallintaan
  • iscsi-initiator-utils — paketti, jossa on apuohjelmia, joita käytetään Linux-ytimeen sisäänrakennetun iSCSI-aloitusohjelman hallintaan

Kuvan lähettämiseksi iSCSI:n kautta aloittajalle on kaksi vaihtoehtoa tapahtumien kehittämiseen - käyttää kohteen userspace-taustaosaa tai liittää kuva käyttöjärjestelmän näkyvänä lohkolaitteena ja viedä se iSCSI:n kautta. Menemme toisella tavalla - userspace-taustajärjestelmä on edelleen "kokeellisessa" tilassa eikä ole hieman valmis tuottavaan käyttöön. Lisäksi siinä on sudenkuoppia, joista voi puhua paljon ja (oi kauhua!) väitellä.

Jos käytämme edes jonkin verran vakaata jakelua pitkällä tukijaksolla, niin meillä oleva ydin on jokin ikivanha, ikivanha versio. Esimerkiksi CentOS7:ssä se on 3.10.*, CentOS8:ssa 4.19. Ja olemme kiinnostuneita ytimestä, jonka versio on vähintään 5.3 (tai pikemminkin 5.4) ja uudempi. Miksi? Koska oletuksena Ceph-kuvissa on käytössä joukko asetuksia, jotka eivät ole yhteensopivia vanhempien ytimien kanssa. Tämä tarkoittaa, että yhdistämme arkiston uuteen ytimeen jakeluamme varten (esimerkiksi CentOS:lle tämä on elrepo), asennamme uuden ytimen ja käynnistämme järjestelmän uudelleen toimiakseen uuden ytimen kanssa:

  • Yhdistä kokeeseen valittuun näyttöön
  • Yhdistämme elrepo-arkistot ohjeiden mukaan - elrepo.org/tiki/tiki-index.php
  • Asenna ydin: yum -y —enablerepo=elrepo-kernel install kernel-ml
  • Käynnistä palvelin uudelleen näytöllä (meillä on kolme näyttöä, eikö?)

Kuvan yhdistäminen lohkolaitteena

# rbd map mypool/myimage
/dev/rbd0

Jäljelle jää vain kohteen määrittäminen. Tässä esimerkissä konfiguroin kohteen ns. demotila - ilman todennusta, näkyvä ja kaikkien saatavilla. Tuotantoympäristössä haluat todennäköisesti määrittää todennuksen - mutta se on vähän tämän päivän vain huvin vuoksi tehtävän soveltamisalan ulkopuolella.

Luo taustaohjelma nimeltä disk1, joka liittyy tiedostoon /dev/rbd/mypool/myimage. Määritetty tiedosto on symbolinen linkki, jonka udev-daemon luo automaattisesti hakemistoon /dev/rbd0. Käytämme symbolista linkkiä, koska rbd-laitteen nimi voi muuttua sen mukaan, missä järjestyksessä Ceph-kuvat on kytketty isäntään.

Luo taustaohjelma:

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

Luo iSCSI-kohde:

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

Yhdistämme taustajärjestelmän LUN:na kohteeseen:

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

Määritetään kohde esittelytilalle:

# 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

Tallenna kokoonpano:

# targetcli saveconfig

Kohteen läsnäolon tarkistaminen:

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

Yhdistämme kohteen:

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

Jos teit kaiken oikein, palvelimelle ilmestyy uusi levy, joka näyttää SCSI-laitteelta, mutta on itse asiassa Cephin kuva, jota käytetään iSCSI-kohteen kautta. Käynnistysongelmien välttämiseksi on parempi poistaa kytketty levy ja havaittu kohde paikallisesta käynnistäjästä:

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

Jäljelle jää vain konfiguroinnin jatkaminen niin, että kuva yhdistetään automaattisesti ja liitännän jälkeen kohde kerrostuu. Kohteen laukaisu koostuu kahdesta vaiheesta - RBD:n yhdistämisestä ja kohteen varsinaisesta laukaisemisesta.

Ensin määritetään RBD-kuvien automaattinen yhteys isäntään. Tämä tehdään lisäämällä seuraavat rivit /etc/ceph/rbdmap-tiedostoon:

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

Kohdekokoonpanon palauttaminen on hieman monimutkaisempaa - meidän on kirjoitettava systemdille yksikkö, joka palauttaa kokoonpanon:

# 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

Viimeinen testi on käynnistää näyttömme uudelleen (se on nyt iSCSI-kohde). On huomattava, että jos emme olisi tyhjentäneet aloittajan tietokantaa komennolla iscsiadm -n discoverydb -o delete... saatat päätyä palvelimeen, joka ei lataudu tai lataaminen kestää kauan.

Mitä on jäljellä?

Määritä palvelimen aloittaja, johon haluamme lähettää kohteen.

Kuinka varmistaa tavoitteemme vikasietoisuus?

Voit samalla tavalla määrittää kohteet muille monitoreille ja määrittää monipolun (vmware ymmärtää tämän ja jopa toimii, Hyper-V ei ymmärrä - se vaatii SCSI-lukot). Koska Ceph-asiakas ytimestä ei käytä välimuistia, tämä on varsin toimiva. Tai toinen vaihtoehto on luoda kolmesta osasta koostuva klusteriresurssi - omistettu kohde-IP-osoite sekä rbdmap- ja scsi-target-palvelut, ja hallita tätä resurssia klusterointityökalujen avulla (kuka sanoi tahdistimen?)

sijasta epilogin

Kuten on selvää, tämä artikkeli on hieman vitsi - mutta yritin siinä "nopeasti ja esimerkein" pohtia useita melko suosittuja aiheita samanaikaisesti - iSCSI-kohde, joka ei välttämättä vie Ceph-kuvia - mutta esim. LVM-taltioiden vienti, iSCSI-käynnistimen kanssa työskentelyn perusteet (kohteen skannaus, yhteyden muodostaminen kohteeseen, yhteyden katkaiseminen, kohdemerkinnän poistaminen tietokannasta), oman yksikön kirjoittaminen systemdille ja muutamille

Toivon, että vaikka et toista koko tätä kokeilua kokonaan, ainakin jokin tästä artikkelista on hyödyllinen sinulle.

Lähde: will.com

Lisää kommentti