Përvojë operimi në CEPH

Kur ka më shumë të dhëna sesa mund të vendosen në një disk, është koha të mendoni për RAID. Si fëmijë, kam dëgjuar shpesh nga të moshuarit e mi: "një ditë RAID do të jetë një gjë e së kaluarës, ruajtja e objekteve do të mbushë botën dhe ju as nuk e dini se çfarë është CEPH", kështu që gjëja e parë në jetën time të pavarur ishte të krijoja grupin tim. Qëllimi i eksperimentit ishte njohja me strukturën e brendshme të ceph-it dhe kuptimi i fushës së zbatimit të tij. Sa i justifikuar është zbatimi i ceph në bizneset e mesme dhe ato të vogla? Pas disa vitesh funksionimi dhe disa humbje të pakthyeshme të të dhënave, lindi një kuptim i ndërlikimeve se jo gjithçka është aq e thjeshtë. Veçoritë e CEPH paraqesin barriera për miratimin e tij të gjerë dhe për shkak të tyre, eksperimentet kanë arritur në një rrugë pa krye. Më poshtë jepet një përshkrim i të gjithë hapave të ndërmarrë, rezultati i marrë dhe përfundimet e nxjerra. Nëse njerëzit e ditur ndajnë përvojën e tyre dhe shpjegojnë disa pika, do të jem mirënjohës.

Shënim: Komentuesit kanë identifikuar gabime serioze në disa nga supozimet që kërkojnë rishikim të të gjithë artikullit.

Strategjia e CEPH

Grupimi CEPH kombinon një numër arbitrar K disqesh me madhësi arbitrare dhe ruan të dhëna mbi to, duke dubluar çdo pjesë (4 MB si parazgjedhje) një numër të caktuar N herë.

Le të shqyrtojmë rastin më të thjeshtë me dy disqe identike. Prej tyre mund të mblidhni ose RAID 1 ose një grup me N=2 - rezultati do të jetë i njëjtë. Nëse ka tre disqe dhe ato janë të madhësive të ndryshme, atëherë është e lehtë të grumbullohet një grup me N=2: disa nga të dhënat do të jenë në disqet 1 dhe 2, disa do të jenë në disqet 1 dhe 3, dhe disa do të jenë në 2 dhe 3, ndërsa RAID jo (ju mund të montoni një RAID të tillë, por do të ishte një perversion). Nëse ka edhe më shumë disqe, atëherë është e mundur të krijohet RAID 5; CEPH ka një analog - erasure_code, i cili bie ndesh me konceptet e hershme të zhvilluesve, dhe për këtë arsye nuk merret parasysh. RAID 5 supozon se ka një numër të vogël disqesh, që të gjithë janë në gjendje të mirë. Nëse njëri dështon, të tjerët duhet të qëndrojnë derisa disku të zëvendësohet dhe të dhënat të rikthehen në të. CEPH, me N>=3, inkurajon përdorimin e disqeve të vjetër, veçanërisht, nëse mbani disa disqe të mirë për të ruajtur një kopje të të dhënave dhe ruani dy ose tre kopjet e mbetura në një numër të madh disqesh të vjetër, atëherë informacioni do të jetë i sigurt, pasi tani për tani disqet e rinj janë gjallë - nuk ka probleme, dhe nëse njëri prej tyre prishet, atëherë dështimi i njëkohshëm i tre disqeve me një jetë shërbimi më shumë se pesë vjet, mundësisht nga serverë të ndryshëm, është jashtëzakonisht i pamundur. ngjarje.

Ka një hollësi në shpërndarjen e kopjeve. Si parazgjedhje, supozohet se të dhënat ndahen në më shumë (~ 100 për disk) grupe të shpërndarjes PG, secila prej të cilave është dublikuar në disa disqe. Le të themi K=6, N=2, atëherë nëse ndonjë dy disqe dështojnë, të dhënat garantohen të humbasin, pasi sipas teorisë së probabilitetit, do të ketë të paktën një PG që do të vendoset në këto dy disqe. Dhe humbja e një grupi i bën të gjitha të dhënat në pishinë të padisponueshme. Nëse disqet ndahen në tre çifte dhe të dhënat lejohen të ruhen vetëm në disqe brenda një çifti, atëherë një shpërndarje e tillë është gjithashtu rezistente ndaj dështimit të çdo disku, por nëse dy disqe dështojnë, probabiliteti i humbjes së të dhënave nuk është 100%, por vetëm 3/15, dhe madje edhe në rast të dështimit tre disqe - vetëm 12/20. Prandaj, entropia në shpërndarjen e të dhënave nuk kontribuon në tolerancën e gabimeve. Vini re gjithashtu se për një server skedari, RAM pa pagesë rrit ndjeshëm shpejtësinë e përgjigjes. Sa më shumë memorie në çdo nyje dhe sa më shumë memorie në të gjitha nyjet, aq më shpejt do të jetë. Ky është padyshim një avantazh i një grupi mbi një server të vetëm dhe, aq më tepër, një NAS hardware, ku është ndërtuar një sasi shumë e vogël memorie.

Nga kjo rrjedh se CEPH është një mënyrë e mirë për të krijuar një sistem të besueshëm të ruajtjes së të dhënave për dhjetëra TB me aftësinë për të shkallëzuar me investime minimale nga pajisjet e vjetruara (këtu, natyrisht, do të kërkohen kosto, por të vogla në krahasim me sistemet e ruajtjes komerciale).

Zbatimi i grupit

Për eksperimentin, le të marrim një kompjuter të çmontuar Intel DQ57TM + Intel core i3 540 + 16 GB RAM. Ne do të organizojmë katër disqe 2 TB në diçka si RAID10, pas një testi të suksesshëm do të shtojmë një nyje të dytë dhe të njëjtin numër disqesh.

Instalimi i Linux. Shpërndarja kërkon aftësinë për t'u përshtatur dhe të jetë e qëndrueshme. Debian dhe Suse plotësojnë kërkesat. Suse ka një instalues ​​më fleksibël që ju lejon të çaktivizoni çdo paketë; Fatkeqësisht, nuk mund të kuptoja se cilat mund të hidheshin pa dëmtuar sistemin. Instaloni Debian duke përdorur debootstrap buster. Opsioni min-bazë instalon një sistem të prishur të cilit i mungojnë drejtuesit. Dallimi në madhësi në krahasim me versionin e plotë nuk është aq i madh sa të shqetësojë. Meqenëse puna kryhet në një makinë fizike, unë dua të bëj fotografi, si në makinat virtuale. Ky opsion ofrohet ose nga LVM ose btrfs (ose xfs, ose zfs - ndryshimi nuk është i madh). Fotografitë e LVM nuk janë një pikë e fortë. Instaloni btrfs. Dhe ngarkuesi është në MBR. Nuk ka kuptim të rrëmoni një disk 50 MB me një ndarje FAT kur mund ta shtyni atë në një zonë të tabelës së ndarjes 1 MB dhe të ndani të gjithë hapësirën për sistemin. Mori 700 MB në disk. Nuk mbaj mend se sa ka instalimi bazë SUSE, mendoj se është rreth 1.1 ose 1.4 GB.

Instaloni CEPH. Ne e shpërfillim versionin 12 në depo debian dhe lidhemi drejtpërdrejt nga faqja 15.2.3. Ne ndjekim udhëzimet nga seksioni "Instalo manualisht CEPH" me paralajmërimet e mëposhtme:

  • Përpara se të lidhni depon, duhet të instaloni gnupg wget ca-certifikata
  • Pas lidhjes së magazinës, por përpara instalimit të grupit, instalimi i paketave hiqet: apt -y --no-install-rekomandon instaloni ceph-common ceph-mon ceph-osd ceph-mds ceph-mgr
  • Kur instaloni CEPH, për arsye të panjohura, ai do të përpiqet të instalojë lvm2. Në parim, nuk është për të ardhur keq, por instalimi dështon, kështu që CEPH nuk do të instalojë as.

    Ky patch ndihmoi:

    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
    

Vështrim i përgjithshëm i grupit

ceph-osd - është përgjegjës për ruajtjen e të dhënave në disk. Për çdo disk, lëshohet një shërbim rrjeti që pranon dhe ekzekuton kërkesat për të lexuar ose shkruar objekte. Dy ndarje krijohen në disk. Njëri prej tyre përmban informacione për grupin, numrin e diskut dhe çelësat e grupit. Ky informacion 1 KB krijohet një herë kur shtohet një disk dhe nuk është vërejtur kurrë se ka ndryshuar. Ndarja e dytë nuk ka sistem skedarësh dhe ruan të dhënat binare CEPH. Instalimi automatik në versionet e mëparshme krijoi një ndarje xfs 100MB për informacionin e shërbimit. Unë e konvertova diskun në MBR dhe ndava vetëm 16 MB - shërbimi nuk ankohet. Unë mendoj se xfs mund të zëvendësohet me ext pa asnjë problem. Kjo ndarje është montuar në /var/lib/…, ku shërbimi lexon informacione për OSD dhe gjithashtu gjen një referencë për pajisjen e bllokut ku ruhen të dhënat binare. Teorikisht, mund të vendosni menjëherë skedarë ndihmës në /var/lib/… dhe të ndani të gjithë diskun për të dhëna. Kur krijoni një OSD nëpërmjet ceph-deploy, krijohet automatikisht një rregull për montimin e ndarjes në /var/lib/…, dhe përdoruesit e ceph i janë caktuar gjithashtu të drejtat për të lexuar pajisjen e dëshiruar të bllokut. Nëse instaloni manualisht, duhet ta bëni vetë; dokumentacioni nuk e thotë këtë. Këshillohet gjithashtu të specifikoni parametrin objektiv të memories osd në mënyrë që të ketë memorie të mjaftueshme fizike.

ceph-mds. Në një nivel të ulët, CEPH është ruajtja e objekteve. Aftësia e ruajtjes së bllokut zbret në ruajtjen e çdo blloku 4 MB si një objekt. Ruajtja e skedarëve funksionon në të njëjtin parim. Janë krijuar dy grupe: njëra për metadata, tjetra për të dhëna. Ato kombinohen në një sistem skedari. Në këtë moment, krijohet një lloj regjistrimi, kështu që nëse fshini sistemin e skedarëve, por mbani të dy grupet, nuk do të jeni në gjendje ta rivendosni atë. Ekziston një procedurë për nxjerrjen e skedarëve sipas blloqeve, nuk e kam testuar. Shërbimi ceph-mds është përgjegjës për aksesin në sistemin e skedarëve. Çdo sistem skedar kërkon një shembull të veçantë të shërbimit. Ekziston një opsion "indeks", i cili ju lejon të krijoni pamjen e disa sistemeve të skedarëve në një - gjithashtu jo të testuar.

Ceph-mon - Ky shërbim ruan një hartë të grupit. Ai përfshin informacione për të gjitha OSD-të, një algoritëm për shpërndarjen e PG-ve në OSD dhe, më e rëndësishmja, informacione për të gjitha objektet (detajet e këtij mekanizmi nuk janë të qarta për mua: ekziston një drejtori /var/lib/ceph/mon/…/ store.db, përmban një skedar të madh 26 MB, dhe në një grup prej 105 mijë objektesh, rezulton të jetë pak më shumë se 256 bajt për objekt - mendoj se monitori ruan një listë të të gjitha objekteve dhe PG-ve në të cilat ato janë të vendosura). Dëmtimi i kësaj drejtorie rezulton në humbjen e të gjitha të dhënave në grup. Prandaj u nxorr përfundimi se CRUSH tregon se si PG-të janë të vendosura në OSD, dhe se si objektet janë vendosur në PG - ato ruhen në qendër brenda bazës së të dhënave, pavarësisht se sa zhvilluesit e shmangin këtë fjalë. Si rezultat, së pari, ne nuk mund ta instalojmë sistemin në një flash drive në modalitetin RO, pasi baza e të dhënave po regjistrohet vazhdimisht, nevojitet një disk shtesë për këto (vështirë më shumë se 1 GB), së dyti, është e nevojshme të kemi një kopjoni në kohë reale këtë bazë. Nëse ka disa monitorë, atëherë toleranca ndaj gabimeve sigurohet automatikisht, por në rastin tonë ka vetëm një monitor, maksimumi dy. Ekziston një procedurë teorike për rivendosjen e një monitori bazuar në të dhënat OSD, unë iu drejtova tre herë për arsye të ndryshme, dhe tre herë nuk kishte mesazhe gabimi, si dhe nuk kishte të dhëna. Fatkeqësisht, ky mekanizëm nuk funksionon. Ose përdorim një ndarje në miniaturë në OSD dhe montojmë një RAID për të ruajtur bazën e të dhënave, gjë që sigurisht do të ketë një efekt shumë të keq në performancën, ose do të ndajmë të paktën dy media fizike të besueshme, mundësisht USB, në mënyrë që të mos zënë porte.

rados-gw - eksporton ruajtjen e objekteve nëpërmjet protokollit S3 dhe të ngjashme. Krijon shumë pishina, është e paqartë pse. Nuk kam eksperimentuar shumë.

ceph-mgr - Kur instaloni këtë shërbim, hapen disa module. Një prej tyre është autoscale që nuk mund të çaktivizohet. Ai përpiqet të ruajë sasinë e saktë të PG/OSD. Nëse dëshironi të kontrolloni raportin manualisht, mund të çaktivizoni shkallëzimin për çdo grup, por në këtë rast moduli rrëzohet me një pjesëtim me 0 dhe statusi i grupit bëhet ERROR. Moduli është shkruar në Python, dhe nëse komentoni rreshtin e nevojshëm në të, kjo çon në çaktivizimin e tij. Shumë dembel për të kujtuar detajet.

Lista e burimeve të përdorura:

Instalimi i CEPH
Rimëkëmbja nga një dështim i plotë i monitorit

Listimet e skripteve:

Instalimi i sistemit përmes 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

Krijo një grup

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

Duke shtuar OSD (pjesë)

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

Përmbledhje

Avantazhi kryesor i marketingut i CEPH është CRUSH - një algoritëm për llogaritjen e vendndodhjes së të dhënave. Monitorët shpërndajnë këtë algoritëm tek klientët, pas së cilës klientët kërkojnë drejtpërdrejt nyjen e dëshiruar dhe OSD-në e dëshiruar. CRUSH nuk siguron centralizim. Është një skedar i vogël që mund ta printoni dhe ta varni në mur. Praktika ka treguar se CRUSH nuk është një hartë shteruese. Nëse shkatërroni dhe rikrijoni monitorët, duke mbajtur të gjitha OSD dhe CRUSH, atëherë kjo nuk mjafton për të rivendosur grupin. Nga kjo arrihet në përfundimin se çdo monitor ruan disa meta të dhëna për të gjithë grupimin. Sasia e vogël e këtyre meta të dhënave nuk imponon kufizime në madhësinë e grupit, por kërkon sigurimin e tyre, gjë që eliminon kursimet e diskut duke instaluar sistemin në një flash drive dhe përjashton grupimet me më pak se tre nyje. Politika agresive e zhvilluesit në lidhje me veçoritë opsionale. Larg minimalizmit. Dokumentacioni është në nivelin "faleminderit për atë që kemi, por është shumë, shumë i varfër". Mundësia për të bashkëvepruar me shërbimet në një nivel të ulët ofrohet, por dokumentacioni e prek këtë temë shumë sipërfaqësisht, kështu që ka më shumë gjasa një jo sesa një po. Praktikisht nuk ka asnjë shans për të rikuperuar të dhëna nga një situatë emergjente.

Opsione për veprime të mëtejshme: braktisni CEPH dhe përdorni btrfs banale me shumë disqe (ose xfs, zfs), zbuloni informacione të reja rreth CEPH, të cilat do t'ju lejojnë ta përdorni atë në kushtet e specifikuara, përpiquni të shkruani ruajtjen tuaj si një të avancuar trajnimi.

Burimi: www.habr.com

Shto një koment