Ervaring met CEPH

Wanneer daar meer data is as wat op een skyf pas, is dit tyd om aan RAID te dink. As kind het ek gereeld van my oudstes gehoor: "Eendag sal RAID iets van die verlede word, voorwerpberging sal die wêreld oorstroom, en jy weet nie eers wat CEPH is nie," so die eerste ding in 'n onafhanklike lewe was besig om jou eie groepie te skep. Die doel van die eksperiment was om vertroud te raak met die interne struktuur van ceph en die omvang van die toepassing daarvan te verstaan. Hoe geregverdig is die bekendstelling van ceph in 'n medium besigheid, maar in 'n klein een? Na 'n paar jaar van operasie en 'n paar onomkeerbare dataverliese, het 'n begrip van die subtiliteite ontstaan ​​​​dat nie alles so eenvoudig is nie. Kenmerke van CEPH skep struikelblokke vir sy wye verspreiding, en as gevolg daarvan het eksperimente tot stilstand gekom. Hieronder is 'n beskrywing van al die stappe wat geneem is, die resultaat wat verkry is en die gevolgtrekkings wat gemaak is. As kundige mense hul ervaring sal deel en 'n paar punte sal verduidelik, sal ek dankbaar wees.

Let wel: Kommentators het ernstige foute in sommige van die aannames uitgewys, wat 'n hersiening van die hele artikel vereis.

CEPH strategie

Die CEPH-kluster kombineer 'n arbitrêre aantal K skywe van arbitrêre grootte en stoor data daarop, en dupliseer elke stuk (4 MB by verstek) 'n gegewe aantal N keer.

Oorweeg die eenvoudigste geval met twee identiese skywe. Jy kan óf 'n RAID 1 óf 'n cluster met N=2 daaruit bou - die resultaat sal dieselfde wees. As daar drie skywe is, en hulle is van verskillende groottes, dan is dit maklik om 'n groepie met N=2 saam te stel: sommige van die data sal op skywe 1 en 2 wees, sommige op 1 en 3, en sommige op 2 en 3 , terwyl RAID nie is nie (jy kan so 'n RAID versamel, maar dit sal 'n perversie wees). As daar nog meer skywe is, is dit moontlik om RAID 5 te skep, CEPH het 'n analoog - erasure_code, wat die vroeë konsepte van die ontwikkelaars weerspreek, en daarom word dit nie oorweeg nie. RAID 5 neem aan dat daar 'n klein aantal skywe is, en almal is in 'n goeie toestand. As een misluk, moet die res uithou totdat die skyf vervang is en die data daarheen herstel word. CEPH, met N>=3, moedig die gebruik van ou skywe aan, veral as jy verskeie goeie skywe hou om een ​​kopie van data te stoor, en die oorblywende twee of drie kopieë op 'n groot aantal ou skywe stoor, dan sal die inligting veilig sal wees, want vir nou is nuwe skywe lewendig - daar is geen probleme nie, en as een van hulle breek, is die gelyktydige mislukking van drie skywe met 'n lewensduur van meer as vyf jaar, verkieslik van verskillende bedieners, uiters onwaarskynlik gebeurtenis.

Daar is 'n subtiliteit in die verspreiding van kopieë. By verstek word aanvaar dat die data in meer (~100 per skyf) PG verspreidingsgroepe verdeel word, wat elkeen op sommige skywe gedupliseer word. Gestel K=6, N=2, as enige twee skywe misluk, is data gewaarborg om verlore te gaan, aangesien daar volgens die waarskynlikheidsteorie ten minste een PG op hierdie twee skywe sal wees. En die verlies van een groep maak al die data in die swembad ontoeganklik. As die skywe in drie pare verdeel word en toegelaat word om data slegs op skywe binne een paar te stoor, dan is so 'n verspreiding ook bestand teen die mislukking van enige skyf, maar as twee misluk, is die waarskynlikheid van dataverlies nie 100% nie, maar slegs 3/15, en selfs in geval van mislukking drie skywe - slegs 12/20. Gevolglik dra entropie in dataverspreiding nie by tot fouttoleransie nie. Let ook daarop dat gratis RAM vir 'n lêerbediener die reaksie aansienlik verhoog. Hoe meer geheue in elke nodus, en hoe meer geheue in alle nodusse, hoe vinniger sal dit wees. Dit is ongetwyfeld die voordeel van 'n cluster bo 'n enkele bediener en boonop 'n hardeware NAS, waar 'n baie klein hoeveelheid geheue ingebou is.

Dit volg dat CEPH 'n goeie manier is om 'n betroubare bergingstelsel vir tientalle TB te skep met die moontlikheid om te skaal met 'n minimale belegging van verouderde toerusting (hier sal koste natuurlik vereis word, maar klein in vergelyking met kommersiële bergingstelsels).

Kluster-implementering

Vir die eksperiment, kom ons neem 'n rekenaar wat buite gebruik is Intel DQ57TM + Intel core i3 540 + 16 GB RAM. Ons organiseer vier 2 TB-skywe in iets soos RAID10, na 'n suksesvolle toets sal ons 'n tweede nodus en dieselfde aantal skywe byvoeg.

Installeer Linux. Die verspreiding moet aanpasbaar en stabiel wees. Debian en Suse voldoen aan die vereistes. Suse het 'n meer buigsame installeerder wat jou toelaat om enige pakket te deaktiveer; ongelukkig kon ek nie verstaan ​​watter een uitgegooi kan word sonder skade aan die stelsel nie. Installeer Debian via debootstrap buster. Die min-basis opsie installeer 'n nie-werkende stelsel wat nie bestuurders het nie. Die verskil in grootte in vergelyking met die volledige weergawe is nie so groot dat dit pla nie. Aangesien die werk op 'n fisiese masjien gedoen word, wil ek foto's neem, net soos op virtuele masjiene. Of LVM of btrfs (of xfs, of zfs - die verskil is nie groot nie) bied so 'n geleentheid. Foto's is nie LVM se sterkpunt nie. Installeer btrfs. En die selflaaiprogram is in die MBR. Dit maak geen sin om 'n 50 MB skyf met 'n FAT partisie te verstop wanneer jy dit in 'n 1 MB partisie tabel area kan druk en al die spasie vir die stelsel toewys nie. Dit het 700 MB op die skyf geneem. Hoeveel die basiese installasie van SUSE het - ek kan nie onthou nie, blyk dit, omtrent 1.1 of 1.4 GB.

Installeer CEPH. Ons ignoreer weergawe 12 in die debian-bewaarplek en verbind direk vanaf die webwerf 15.2.3. Ons volg die instruksies van die afdeling "Installeer CEPH handmatig" met die volgende waarskuwings:

  • Voordat u die bewaarplek koppel, moet u gnupg wget ca-sertifikate installeer
  • Nadat die bewaarplek gekoppel is, maar voor die installering van die groepering, word pakketinstallasie weggelaat: apt -y --no-install-recommends install ceph-common ceph-mon ceph-osd ceph-mds ceph-mgr
  • Ten tyde van die installering van CEPH, om onbekende redes, sal dit probeer om lvm2 te installeer. In beginsel is dit nie jammer nie, maar die installasie misluk, so CEPH sal ook nie installeer nie.

    Hierdie pleister het gehelp:

    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
    

Klusteroorsig

ceph-osd - verantwoordelik vir die stoor van data op skyf. Vir elke skyf word 'n netwerkdiens begin wat versoeke aanvaar en uitvoer om te lees of na voorwerpe te skryf. Twee partisies word op die skyf geskep. Een daarvan bevat inligting oor die groepering, skyfnommer en groepsleutels. Hierdie 1KB inligting word een keer geskep wanneer 'n skyf bygevoeg word en het nooit opgemerk om weer te verander nie. Die tweede partisie het geen lêerstelsel nie en stoor CEPH-binêre data. Outomatiese installasie in vorige weergawes het 'n 100MB xfs-partisie vir diensinligting geskep. Ek het die skyf na MBR omgeskakel en slegs 16MB toegewys - die diens kla nie. Ek dink, sonder probleme, kan xfs vervang word met ext. Hierdie partisie is gemonteer in /var/lib/… waar die diens inligting oor die OSD lees en ook 'n skakel vind na die bloktoestel waar die binêre data gestoor word. Teoreties kan jy onmiddellik hulpe in / var / lib / ... plaas en die hele skyf vir data toewys. Wanneer 'n OSD via ceph-ontplooiing geskep word, word 'n reël outomaties geskep om 'n partisie in /var/lib/… te monteer, en die regte aan die ceph-gebruiker word toegeken om die verlangde bloktoestel te lees. Met 'n handmatige installasie moet u dit self doen, die dokumentasie sê nie daaroor nie. Dit is ook raadsaam om die osd geheue teiken parameter te spesifiseer sodat daar genoeg fisiese geheue is.

ceph-mds. Op 'n lae vlak is CEPH voorwerpberging. Die blokbergingsvermoë kom daarop neer om elke 4MB-blok as 'n voorwerp te stoor. Lêerberging werk op dieselfde beginsel. Twee poele word geskep: een vir metadata, die ander vir data. Hulle word gekombineer in 'n lêerstelsel. Op hierdie oomblik word 'n soort rekord geskep, so as jy die lêerstelsel uitvee, maar albei poele stoor, sal jy dit nie kan herstel nie. Daar is 'n prosedure om lêers in blokke te onttrek, ek het dit nie getoets nie. Die ceph-mds-diens is verantwoordelik vir toegang tot die lêerstelsel. Elke lêerstelsel vereis 'n aparte instansie van die diens. Daar is 'n "indeks" opsie wat jou toelaat om 'n skyn van verskeie lêerstelsels in een te skep - ook nie getoets nie.

ceph-mon - Hierdie diens hou 'n kaart van die groep. Dit bevat inligting oor alle BSB's, die PG-verspreidingsalgoritme in die BSB, en, die belangrikste, inligting oor alle voorwerpe (die besonderhede van hierdie meganisme is nie vir my duidelik nie: daar is 'n /var/lib/ceph/mon/.../ store.db-gids, dit bevat 'n groot, die lêer is 26MB, en in 'n groep van 105K voorwerpe, blyk dit 'n bietjie meer as 256 grepe per voorwerp - ek dink die monitor hou 'n lys van alle voorwerpe en die PG waarin hulle lieg). Skade aan hierdie gids lei tot die verlies van alle data in die groepering. Van hier af is tot die gevolgtrekking gekom dat CRUSH wys hoe PG's volgens OSD geleë is, en hoe voorwerpe volgens PG geleë is - hulle word sentraal in die databasis gestoor, maak nie saak hoe die ontwikkelaars hierdie woord vermy nie. As gevolg hiervan kan ons eerstens nie die stelsel op 'n flitsaandrywer in RO-modus installeer nie, aangesien daar voortdurend na die databasis geskryf word, 'n bykomende skyf is daarvoor nodig (nou meer as 1 GB), en tweedens is dit nodig om te hê 'n real-time kopieer hierdie basis. As daar verskeie monitors is, word fouttoleransie outomaties verskaf, maar in ons geval is daar net een monitor, maksimum twee. Daar is 'n teoretiese prosedure vir die herstel van 'n monitor gebaseer op OSD-data, ek het drie keer om verskeie redes daarheen gebruik, en drie keer geen foutboodskappe nie, sowel as data ook. Ongelukkig werk hierdie meganisme nie. Óf ons bedryf 'n miniatuur OSD-partisie en stel 'n RAID saam om die databasis te stoor, wat waarskynlik 'n baie slegte uitwerking op werkverrigting sal hê, óf ons ken ten minste twee betroubare fisiese media toe, verkieslik USB, sodat die poorte nie opneem nie.

rados-gw - voer voorwerpberging uit deur die S3-protokol en dies meer te gebruik. Skep baie poele, dit is nie duidelik hoekom nie. Het nie regtig geëksperimenteer nie.

ceph-mgr - Die installering van hierdie diens begin verskeie modules. Een daarvan is die nie-gestremde outoskaal. Dit streef daarna om die korrekte aantal PG/OSD's te handhaaf. As jy die verhouding handmatig wil beheer, kan jy skaal vir elke poel deaktiveer, maar in hierdie geval val die module met 'n deling deur 0, en die groepstatus word FOUT. Die module is in luislang geskryf, en as jy die nodige reël daarin kommentaar lewer, lei dit tot die sluiting daarvan. Te lui om die besonderhede te onthou.

Lys van bronne wat gebruik is:

CEPH installasie
Herstel van 'n volledige monitorfout

Skriplyste:

Installeer die stelsel via debootstrap

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

Skep 'n groepie

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

Voeg OSD by (deel)

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

Opsomming

Die belangrikste bemarkingsvoordeel van CEPH is CRUSH, 'n algoritme vir die berekening van die ligging van data. Monitors versprei hierdie algoritme aan kliënte, waarna kliënte die verlangde nodus en die verlangde OSD direk aanvra. CRUSH verskaf geen sentralisasie nie. Dit is 'n klein lêer wat jy selfs kan druk en aan die muur hang. Praktyk het getoon dat CRUSH nie 'n volledige kaart is nie. Om die monitors te vernietig en te herskep terwyl al die OSD's en CRUSH behou word, is nie genoeg om die groep te herstel nie. Hieruit word die gevolgtrekking gemaak dat elke monitor sommige metadata oor die hele groepering stoor. Die onbeduidende hoeveelheid van hierdie metadata stel nie beperkings op die grootte van die groepering nie, maar dit vereis hul veiligheid, wat skyfbesparings weens die installering van die stelsel op 'n flash drive uitskakel en groepe met minder as drie nodusse uitsluit. Aggressiewe ontwikkelaarbeleid rakende opsionele kenmerke. Ver van minimalisme. Dokumentasie op die vlak: "dankie vir wat dit is, maar baie, baie karig." Die vermoë om op 'n lae vlak met dienste te kommunikeer, word verskaf, maar die dokumentasie is te oppervlakkig oor hierdie onderwerp, dus meer waarskynlik nee as ja. Feitlik geen kans om data van 'n noodsituasie te herstel nie.

Opsies vir verdere aksie: laat vaar CEPH en gebruik die banale multi-skyf btrfs (of xfs, zfs), leer nuwe inligting oor CEPH, wat jou sal toelaat om dit in die gespesifiseerde toestande te bedryf, probeer om jou eie berging as 'n gevorderde opleiding te skryf .

Bron: will.com

Voeg 'n opmerking