Kokemus CEPH:sta

Kun dataa on enemmän kuin yhdelle levylle mahtuu, on aika miettiä RAIDia. Lapsena kuulin usein vanhemmiltani: "Jonain päivänä RAID on menneisyyttä, esineiden varastointi täyttää maailman, etkä edes tiedä mikä CEPH on", joten ensimmäinen asia itsenäisessä elämässäni oli luoda oma klusteri. Kokeen tarkoituksena oli tutustua kefin sisäiseen rakenteeseen ja ymmärtää sen käyttöalue. Kuinka perusteltua cephin käyttöönotto on keskisuurissa ja pienissä yrityksissä? Useiden vuosien käytön ja muutaman peruuttamattoman tietojen menetyksen jälkeen syntyi ymmärrys monimutkaisuudesta, että kaikki ei ole niin yksinkertaista. CEPH:n erityispiirteet muodostavat esteitä sen laajalle leviämiselle, ja niiden vuoksi kokeet ovat päässeet umpikujaan. Alla on kuvaus kaikista suoritetuista vaiheista, saaduista tuloksista ja tehdyistä johtopäätöksistä. Jos asiantuntevat ihmiset jakavat kokemuksensa ja selittävät joitain kohtia, olen kiitollinen.

Huomautus: Kommentoijat ovat havainneet vakavia virheitä joissakin oletuksissa, jotka vaativat koko artikkelin tarkistamista.

CEPH-strategia

CEPH-klusteri yhdistää mielivaltaisen määrän K mielivaltaisen kokoisia levyjä ja tallentaa niille tietoja monistaen jokaisen kappaleen (oletusarvoisesti 4 Mt) tietyn määrän N kertaa.

Tarkastellaan yksinkertaisinta tapausta kahdella identtisellä levyllä. Niistä voit joko koota RAID 1:n tai klusterin N=2 - tulos on sama. Jos levyjä on kolme ja ne ovat erikokoisia, on helppo koota klusteri, jossa N=2: osa tiedoista on levyillä 1 ja 2, osa levyillä 1 ja 3 ja osa 2 ja 3, kun taas RAID ei (voit koota tällaisen RAIDin, mutta se olisi perversio). Jos levyjä on vielä enemmän, on mahdollista luoda RAID 5; CEPH:lla on analoginen erosure_code, joka on ristiriidassa kehittäjien varhaisten käsitteiden kanssa, eikä sitä siksi oteta huomioon. RAID 5 olettaa, että asemia on pieni määrä, jotka kaikki ovat hyvässä kunnossa. Jos yksi epäonnistuu, muiden on kestettävä, kunnes levy vaihdetaan ja tiedot palautetaan sille. CEPH, jossa N>=3, kannustaa käyttämään vanhoja levyjä, erityisesti jos säilytät useita hyviä levyjä yhden datakopion tallentamiseen ja tallennat loput kaksi tai kolme kopiota suurelle määrälle vanhoja levyjä, tiedot on turvallista, koska toistaiseksi uudet levyt ovat elossa - ongelmia ei ole, ja jos yksi niistä rikkoutuu, kolmen yli viiden vuoden käyttöiän, mieluiten eri palvelimilta olevan levyn samanaikainen vikaantuminen on erittäin epätodennäköistä. tapahtuma.

Kopioiden jakelussa on hienovaraisuutta. Oletuksena oletetaan, että tiedot on jaettu useampaan (~100 per levy) PG-jakeluryhmiin, joista jokainen on kopioitu joillakin levyillä. Oletetaan, että K=6, N=2, niin jos kaksi levyä epäonnistuu, tiedot taatusti menetetään, koska todennäköisyysteorian mukaan näillä kahdella levyllä tulee olemaan ainakin yksi PG. Ja yhden ryhmän menettäminen tekee kaikista poolissa olevista tiedoista poissa käytöstä. Jos levyt on jaettu kolmeen pariin ja dataa saa tallentaa vain yhden parin sisällä oleville levyille, niin tällainen jakelu kestää myös minkä tahansa levyn vikoja, mutta jos kaksi levyä epäonnistuu, tietojen katoamisen todennäköisyys ei ole 100%, mutta vain 3/15, ja jopa vikatilanteessa kolme levyä - vain 12/20. Näin ollen tiedonjakauman entropia ei edistä vikasietoisuutta. Huomaa myös, että tiedostopalvelimen vapaa RAM lisää merkittävästi vastausnopeutta. Mitä enemmän muistia kussakin solmussa ja mitä enemmän muistia kaikissa solmuissa, sitä nopeampi se on. Tämä on epäilemättä klusterin etu yhteen palvelimeen verrattuna ja vielä enemmän laitteisto-NASiin, jossa on sisäänrakennettu hyvin pieni määrä muistia.

Tästä seuraa, että CEPH on hyvä tapa luoda luotettava tiedontallennusjärjestelmä kymmenille TB:lle, joka pystyy skaalautumaan minimaalisilla investoinneilla vanhentuneista laitteista (tässä tietysti vaaditaan kustannuksia, mutta pieniä verrattuna kaupallisiin tallennusjärjestelmiin).

Klusterin toteutus

Otetaan kokeilua varten käytöstä poistettu tietokone Intel DQ57TM + Intel core i3 540 + 16 Gt RAM-muistia. Järjestämme neljä 2 TB:n levyä RAID10:n kaltaiseksi, onnistuneen testin jälkeen lisäämme toisen solmun ja saman määrän levyjä.

Linuxin asentaminen. Jakelu edellyttää räätälöintikykyä ja vakaata. Debian ja Suse täyttävät vaatimukset. Suessa on joustavampi asennusohjelma, jonka avulla voit poistaa minkä tahansa paketin käytöstä; Valitettavasti en pystynyt selvittämään, mitkä niistä voitaisiin heittää pois vahingoittamatta järjestelmää. Asenna Debian käyttämällä debootstrap buster -ohjelmaa. Min-base-vaihtoehto asentaa rikkinäisen järjestelmän, josta puuttuu ohjaimia. Kokoero täysversioon verrattuna ei ole niin suuri, että se häiritsisi. Koska työ tehdään fyysisellä koneella, haluan ottaa tilannekuvia, kuten virtuaalikoneilla. Tämän vaihtoehdon tarjoaa joko LVM tai btrfs (tai xfs tai zfs - ero ei ole suuri). LVM-snapshots ei ole vahvuus. Asenna btrfs. Ja käynnistyslatain on MBR:ssä. Ei ole mitään järkeä tukahduttaa 50 Mt:n levyä FAT-osiolla, kun voit työntää sen 1 Mt:n osiotaulukkoalueelle ja varata kaiken tilan järjestelmälle. Vei 700 Mt levyltä. En muista kuinka paljon SUSE-perusasennuksessa on, mielestäni se on noin 1.1 tai 1.4 Gt.

Asenna CEPH. Jätämme huomiotta version 12 debian-varastossa ja muodostamme yhteyden suoraan 15.2.3-sivustolta. Noudatamme osion "Asenna CEPH manuaalisesti" ohjeita seuraavin varoin:

  • Ennen kuin liität arkiston, sinun on asennettava gnupg wget ca-sertifikaatit
  • Arkiston yhdistämisen jälkeen, mutta ennen klusterin asentamista, pakettien asennus jätetään pois: apt -y --no-install-recommends install ceph-common ceph-mon ceph-osd ceph-mds ceph-mgr
  • Kun CEPH asennetaan, se yrittää tuntemattomista syistä asentaa lvm2:n. Periaatteessa se ei ole sääli, mutta asennus epäonnistuu, joten CEPH ei myöskään asenna.

    Tämä korjaustiedosto auttoi:

    cat << EOF >> /var/lib/dpkg/status
    Package: lvm2
    Status: install ok installed
    Priority: important
    Section: admin
    Installed-Size: 0
    Maintainer: Debian Adduser Developers <[email protected]>
    Architecture: all
    Multi-Arch: foreign
    Version: 113.118
    Description: No-install
    EOF
    

Klusterin yleiskatsaus

ceph-osd - vastaa tietojen tallentamisesta levylle. Jokaiselle levylle käynnistetään verkkopalvelu, joka hyväksyy ja suorittaa objektien luku- tai kirjoituspyyntöjä. Levylle luodaan kaksi osiota. Yksi niistä sisältää tietoja klusterista, levyn numerosta ja klusterin avaimista. Nämä 1 kt:n tiedot luodaan kerran levyä lisättäessä, eikä niiden ole koskaan huomattu muuttuvan. Toisessa osiossa ei ole tiedostojärjestelmää ja se tallentaa CEPH-binaaridataa. Automaattinen asennus aiemmissa versioissa loi 100 Mt:n xfs-osion palvelutiedoille. Muunsin levyn MBR:ksi ja varasin vain 16 Mt - palvelu ei valita. Mielestäni xfs voidaan korvata extillä ilman ongelmia. Tämä osio on asennettu kansioon /var/lib/…, jossa palvelu lukee tietoja OSD:stä ja löytää myös viittauksen lohkolaitteeseen, johon binääritiedot on tallennettu. Teoriassa voit heti sijoittaa aputiedostot kansioon /var/lib/… ja varata koko levyn tiedoille. Kun luot OSD:n ceph-deploy:lla, luodaan automaattisesti sääntö osion liittämiseksi kansioon /var/lib/…, ja ceph-käyttäjälle annetaan myös oikeudet lukea haluttu lohkolaite. Jos asennat manuaalisesti, sinun on tehtävä tämä itse; dokumentaatio ei kerro tätä. On myös suositeltavaa määrittää osd-muistin kohdeparametri, jotta fyysistä muistia on riittävästi.

ceph-mds. Alhaisella tasolla CEPH on objektin tallennustila. Mahdollisuus estää tallennustila tarkoittaa jokaisen 4 Mt:n lohkon tallentamista objektina. Tiedostojen tallennus toimii samalla periaatteella. Luodaan kaksi poolia: yksi metatiedoille ja toinen tiedoille. Ne yhdistetään tiedostojärjestelmään. Tällä hetkellä luodaan jonkinlainen tietue, joten jos poistat tiedostojärjestelmän, mutta säilytät molemmat poolit, et voi palauttaa sitä. On olemassa menettely tiedostojen purkamiseksi lohkojen mukaan, en ole testannut sitä. Ceph-mds-palvelu vastaa pääsystä tiedostojärjestelmään. Jokainen tiedostojärjestelmä vaatii erillisen palvelun esiintymän. Siellä on "hakemisto" -vaihtoehto, jonka avulla voit luoda useiden tiedostojärjestelmien ilmeen yhdessä - ei myöskään testattu.

Ceph-mon - Tämä palvelu tallentaa klusterin kartan. Se sisältää tiedot kaikista OSD:istä, algoritmin PG:iden jakamiseksi OSD:issä ja mikä tärkeintä, tiedot kaikista objekteista (tämän mekanismin yksityiskohdat eivät ole minulle selviä: siellä on hakemisto /var/lib/ceph/mon/…/ store.db, se sisältää suuren tiedoston, joka on 26 Mt, ja 105 256 objektin klusterissa se on hieman yli 1 tavua kohdetta kohden - luulen, että näyttö tallentaa luettelon kaikista objekteista ja PG:istä, joissa ne sijaitsevat). Tämän hakemiston vahingoittuminen johtaa kaiken klusterin tietojen menetykseen. Tästä pääteltiin, että CRUSH näyttää kuinka PG:t sijaitsevat OSD:llä ja kuinka objektit sijaitsevat PG:illä - ne on tallennettu keskitetysti tietokantaan, vaikka kehittäjät välttäisivätkin tätä sanaa. Tämän seurauksena ensinnäkin emme voi asentaa järjestelmää flash-asemalle RO-tilassa, koska tietokantaa tallennetaan jatkuvasti, näitä varten tarvitaan lisälevy (tuskin yli XNUMX Gt), toiseksi tarvitaan kopioi reaaliajassa tämä tukikohta. Jos monitoreja on useita, vikasietoisuus varmistetaan automaattisesti, mutta meidän tapauksessamme näyttöjä on vain yksi, enintään kaksi. Näytön palauttamiseen OSD-tietojen perusteella on olemassa teoreettinen menettely, turvauduin siihen kolme kertaa eri syistä, ja kolme kertaa ei tullut virheilmoituksia eikä tietoja. Valitettavasti tämä mekanismi ei toimi. Joko käytämme miniatyyriosiota OSD:llä ja kokoamme RAIDin tallentaaksesi tietokannan, millä on varmasti erittäin huono vaikutus suorituskykyyn, tai varaamme vähintään kaksi luotettavaa fyysistä tietovälinettä, mieluiten USB, jotta emme varaa portteja.

rados-gw - vie objektitallennustilaa S3-protokollan ja vastaavien kautta. Luo monia altaita, on epäselvää, miksi. En juurikaan kokeillut.

ceph-mgr - Kun tätä palvelua asennetaan, useita moduuleja käynnistetään. Yksi niistä on automaattinen skaalaaminen, jota ei voi poistaa käytöstä. Se pyrkii ylläpitämään oikean määrän PG/OSD:tä. Jos haluat hallita suhdetta manuaalisesti, voit poistaa skaalaus käytöstä jokaisessa poolissa, mutta tässä tapauksessa moduuli kaatuu jakamalla 0:lla ja klusterin tilaksi tulee VIRHE. Moduuli on kirjoitettu Pythonilla, ja jos kommentoit siihen tarvittavan rivin, tämä johtaa sen poistamiseen käytöstä. Liian laiska muistamaan yksityiskohtia.

Luettelo käytetyistä lähteistä:

CEPH:n asennus
Toipuminen täydellisestä näytön viasta

Käsikirjoituslistaukset:

Järjestelmän asennus debootstrapin kautta

blkdev=sdb1
mkfs.btrfs -f /dev/$blkdev
mount /dev/$blkdev /mnt
cd /mnt
for i in {@,@var,@home}; do btrfs subvolume create $i; done
mkdir snapshot @/{var,home}
for i in {var,home}; do mount -o bind @${i} @/$i; done
debootstrap buster @ http://deb.debian.org/debian; echo $?
for i in {dev,proc,sys}; do mount -o bind /$i @/$i; done
cp /etc/bash.bashrc @/etc/

chroot /mnt/@ /bin/bash
echo rbd1 > /etc/hostname
passwd
uuid=`blkid | grep $blkdev | cut -d """ -f 2`
cat << EOF > /etc/fstab
UUID=$uuid / btrfs noatime,nodiratime,subvol=@ 0 1
UUID=$uuid /var btrfs noatime,nodiratime,subvol=@var 0 2
UUID=$uuid /home btrfs noatime,nodiratime,subvol=@home 0 2
EOF
cat << EOF >> /var/lib/dpkg/status
Package: lvm2
Status: install ok installed
Priority: important
Section: admin
Installed-Size: 0
Maintainer: Debian Adduser Developers <[email protected]>
Architecture: all
Multi-Arch: foreign
Version: 113.118
Description: No-install

Package: sudo
Status: install ok installed
Priority: important
Section: admin
Installed-Size: 0
Maintainer: Debian Adduser Developers <[email protected]>
Architecture: all
Multi-Arch: foreign
Version: 113.118
Description: No-install
EOF

exit
grub-install --boot-directory=@/boot/ /dev/$blkdev
init 6

apt -yq install --no-install-recommends linux-image-amd64 bash-completion ed btrfs-progs grub-pc iproute2 ssh  smartmontools ntfs-3g net-tools man
exit
grub-install --boot-directory=@/boot/ /dev/$blkdev
init 6

Luo klusteri

apt -yq install --no-install-recommends gnupg wget ca-certificates
echo 'deb https://download.ceph.com/debian-octopus/ buster main' >> /etc/apt/sources.list
wget -q -O- 'https://download.ceph.com/keys/release.asc' | apt-key add -
apt update
apt -yq install --no-install-recommends ceph-common ceph-mon

echo 192.168.11.11 rbd1 >> /etc/hosts
uuid=`cat /proc/sys/kernel/random/uuid`
cat << EOF > /etc/ceph/ceph.conf
[global]
fsid = $uuid
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
mon allow pool delete = true
mon host = 192.168.11.11
mon initial members = rbd1
mon max pg per osd = 385
osd crush update on start = false
#osd memory target = 2147483648
osd memory target = 1610612736
osd scrub chunk min = 1
osd scrub chunk max = 2
osd scrub sleep = .2
osd pool default pg autoscale mode = off
osd pool default size = 1
osd pool default min size = 1
osd pool default pg num = 1
osd pool default pgp num = 1
[mon]
mgr initial modules = dashboard
EOF

ceph-authtool --create-keyring ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
ceph-authtool --create-keyring ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'
cp ceph.client.admin.keyring /etc/ceph/
ceph-authtool --create-keyring bootstrap-osd.ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r'
cp bootstrap-osd.ceph.keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
ceph-authtool ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
ceph-authtool ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
monmaptool --create --add rbd1 192.168.11.11 --fsid $uuid monmap
rm -R /var/lib/ceph/mon/ceph-rbd1/*
ceph-mon --mkfs -i rbd1 --monmap monmap --keyring ceph.mon.keyring
chown ceph:ceph -R /var/lib/ceph
systemctl enable ceph-mon@rbd1
systemctl start ceph-mon@rbd1
ceph mon enable-msgr2
ceph status

# dashboard

apt -yq install --no-install-recommends ceph-mgr ceph-mgr-dashboard python3-distutils python3-yaml
mkdir /var/lib/ceph/mgr/ceph-rbd1
ceph auth get-or-create mgr.rbd1 mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-rbd1/keyring
systemctl enable ceph-mgr@rbd1
systemctl start ceph-mgr@rbd1
ceph config set mgr mgr/dashboard/ssl false
ceph config set mgr mgr/dashboard/server_port 7000
ceph dashboard ac-user-create root 1111115 administrator
systemctl stop ceph-mgr@rbd1
systemctl start ceph-mgr@rbd1

OSD:n lisääminen (osa)

apt install ceph-osd

osdnum=`ceph osd create`
mkdir -p /var/lib/ceph/osd/ceph-$osdnum
mkfs -t xfs /dev/sda1
mount -t xfs /dev/sda1 /var/lib/ceph/osd/ceph-$osdnum
cd /var/lib/ceph/osd/ceph-$osdnum
ceph auth get-or-create osd.0 mon 'profile osd' mgr 'profile osd' osd 'allow *' > /var/lib/ceph/osd/ceph-$osdnum/keyring
ln -s /dev/disk/by-partuuid/d8cc3da6-02  block
ceph-osd -i $osdnum --mkfs
#chown ceph:ceph /dev/sd?2
chown ceph:ceph -R /var/lib/ceph
systemctl enable ceph-osd@$osdnum
systemctl start ceph-osd@$osdnum

Yhteenveto

CEPH:n tärkein markkinointietu on CRUSH - algoritmi tietojen sijainnin laskemiseen. Monitorit jakavat tämän algoritmin asiakkaille, minkä jälkeen asiakkaat pyytävät suoraan haluttua solmua ja haluttua OSD:tä. CRUSH ei takaa keskittämistä. Se on pieni tiedosto, jonka voit jopa tulostaa ja ripustaa seinälle. Käytäntö on osoittanut, että CRUSH ei ole tyhjentävä kartta. Jos tuhoat ja luot näytöt uudelleen säilyttäen kaikki OSD ja CRUSH, tämä ei riitä klusterin palauttamiseen. Tästä päätellään, että jokainen monitori tallentaa jonkin verran metatietoja koko klusterista. Tämän metatiedon pieni määrä ei aseta rajoituksia klusterin koosta, mutta vaatii niiden turvallisuuden varmistamista, mikä eliminoi levysäästöt asentamalla järjestelmän flash-asemaan ja sulkee pois klusterit, joissa on alle kolme solmua. Kehittäjän aggressiivinen käytäntö valinnaisten ominaisuuksien suhteen. Kaukana minimalismista. Dokumentaatio on tasolla "kiitos siitä, mitä meillä on, mutta se on erittäin, hyvin niukkaa". Mahdollisuus olla vuorovaikutuksessa palveluiden kanssa alhaisella tasolla tarjotaan, mutta dokumentaatio käsittelee tätä aihetta liian pinnallisesti, joten se on todennäköisemmin ei kuin kyllä. Ei käytännössä ole mahdollisuutta palauttaa tietoja hätätilanteesta.

Vaihtoehtoja jatkotoimille: hylkää CEPH ja käytä banaalia monilevyistä btrf:ää (tai xfs, zfs), hanki uutta tietoa CEPH:sta, jonka avulla voit käyttää sitä määritetyissä olosuhteissa, yritä kirjoittaa oma tallennustila edistyneeksi koulutusta.

Lähde: will.com

Lisää kommentti