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:
jo käynnissä oleva Ceph-klusteri
jo olemassa oleva kuva, joka on toimitettava iSCSI:n kautta
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.
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:
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.
# 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ä:
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:
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.