CEPH-i kasutuskogemus

Kui andmete hulk ĂŒletab ĂŒhe ketta mahu, on Ă”ige aeg mĂ”elda RAID-i peale. Lapsena kuulsin tihti vanematelt: "Kord jÀÀb RAID minevikku, objektipĂ”hised salvestused vallutavad maailma, aga sina ei tea isegi, mis on CEPH," - seega oli esimene samm iseseisvas elus oma klaster luua. Eksperimendi eesmĂ€rk oli tutvuda ceph'i sisemise struktuuriga ja mĂ”ista selle rakendamise piire. Kui pĂ”hjendatud on ceph'i rakendamine keskmises ja vĂ€ikestes ettevĂ”tetes? PĂ€rast mitmeid aastaid kasutamist ja mĂ”ningaid pöördumatuid andmete kaotusi tekkis arusaam nĂŒanssidest, et kĂ”ik ei ole nii ĂŒheselt mĂ”istetav. CEPH-i omadused loovad takistusi selle ulatuslikule levikule ning seetĂ”ttu on eksperimendid jĂ”udnud ummikusse. Allpool on vĂ€lja toodud kĂ”ik lĂ€bitud sammud, saadud tulemused ja tehtud jĂ€reldused. Kui targad inimesed jagavad oma kogemusi ja selgitavad teatud punkte, olen tĂ€nulik.

MĂ€rkus: kommentaatorid osutasid tĂ”sistele vigadele mĂ”nedes eeldustes, mis nĂ”uavad kogu artikli ĂŒlevaatamist.

CEPH-i strateegia

CEPH-i klaster ĂŒhendab suvalise arvu K ketast suvalise suurusega ja salvestab andmed neile, dubleerides iga tĂŒkki (4 MB vaikesuurus) mÀÀratud arvu N kordi.

Vaatame lihtsamat juhtumit, kus on kaks sama suurusega ketast. Neist saab koostada kas RAID 1 vĂ”i klastriga N=2 — tulemus on sama. Kui kettaid on kolm ja need on erineva suurusega, siis klastriga N=2 on lihtne luua: osa andmeid on ketastel 1 ja 2, osa on ketastel 1 ja 3, ning osa on ketastel 2 ja 3, kuid RAID-i puhul ei saa seda teha (kuigi sellist RAID-i saab luua, oleks see aga keeruline lahendus). Kui kettaid on veel rohkem, on vĂ”imalik luua RAID 5, millele CEPH-l on analoog — erasure_code, mis on vastuolus arendajate varasemate kontseptsioonidega, ja seetĂ”ttu ei kĂ€sitleta seda. RAID 5 eeldab, et on vĂ€ike arv kettaid, ja kĂ”ik need on heas seisukorras. Ühe ketta rikke korral peavad ĂŒlejÀÀnud vastu pidama kuni ketta vahetamiseni ja andmete taastamiseni sellele. CEPH, kui N>=3, soosib vanade ketaste kasutamist, eriti kui hoida mitut head ketast ĂŒhe andmekoopiana, samas kui ĂŒlejÀÀnud kaks-kolm koopiat hoida suure hulga vanade ketaste peal, siis on informatsioon turvaline, sest nii kaua kui uued kettad on elujĂ”ulised — probleeme ei ole, ja kui ĂŒks neist katkub, siis kolme ĂŒle viie aasta vanuse ketta samal ajal rike, soovitatavalt erinevatelt serveritelt — on ÀÀrmiselt ebatĂ”enĂ€oline.

Kopeerimise jaotuses on nĂŒanss. Vaikimisi arvatakse, et andmed jagatakse suuremale hulgale (~100 kettale) PG jaotamisgruppidele, millest igaĂŒht dubleeritakse mĂ”nel kettal. Oletame, et K=6, N=2, siis kahe mis tahes ketta rikke korral kaotatakse andmed kindlalt, kuna tĂ”enĂ€osusteooria kohaselt leiab aset vĂ€hemalt ĂŒks PG, mis asub just nendel kahel kettal. Ühe grupi kadumine muudab kĂ”ik andmed puulis kĂ€ttesaamatuks. Kui aga kettad jagada kolme paari ja lubada andmete salvestamist ainult ĂŒhe paari ketaste vahel, siis selline jaotus on samuti ĂŒhe ketta rikke suhtes stabiilne, kuid kahe ketta rikke korral ei ole andmete kaotuse tĂ”enĂ€osus 100%, vaid vaid 3/15, ja isegi kolme ketta rikke korral on see ainult 12/20. Seega ei soodusta andmete jaotus andmete talitlushĂ€irete suhtes usaldusvÀÀrsust. Samuti mĂ€rkime, et failiserveri puhul suurendab vabade operatiivmĂ€lu maht oluliselt reageerimise kiirus. Mida rohkem mĂ€lu igas sĂ”lmes ja mida rohkem mĂ€lu kĂ”igis sĂ”lmedes - seda kiiremini see toimib. See on kindlasti klastrite eelis ĂŒksikute serverite ja eriti riistvaraliste NAS-seadmete ees, kuhu on integreeritud vĂ€ga vĂ€ike mĂ€lu maht.

Seega jĂ€reldub, et CEPH on hea viis minimaalse investeeringuga vanemast riistvarast luua usaldusvÀÀrne andmesalvestussĂŒsteem kĂŒmnete TB-de ulatuses, milles on skaleerimisvĂ”ime (siin on muidugi vaja kulutusi, kuid need on vĂ”rreldes kommertsalustega suhteliselt vĂ€ikesed).

Klastri rakendamine

Katses vÔtame kasutusest vÀljas oleva arvuti Intel DQ57TM + Intel core i3 540 + 16 GB RAM. Organiseerime neli 2 TB ketast RAID10 sarnaseks, pÀrast eduka katsetamist lisame teise sÔlme ja veel sama palju kettaid.

Installime Linuxi. Jaotises nĂ”utakse kohandatavust ja stabiilsust. Vastavad nĂ”uetele Debian ja Suse. Suse'l on paindlikum installija, mis vĂ”imaldab vĂ€lja lĂŒlitada igasuguseid pakette; kahjuks ei suutnud ma vĂ€lja selgitada, millised vĂ”ib eemaldada ilma sĂŒsteemile kahju tekitamata. Installime Debian'i debootstrap buster'i kaudu. Valik min-base installib mittefunktsionaalse sĂŒsteemi, mida iseloomustab draiverite puudumine. Erinevus tĂ€isversiooni suuruses ei ole piisavalt suur, et selle ĂŒle vaeva nĂ€ha. Kuna töö toimub fĂŒĂŒsilisel masinal, soovin teha snapshot'e nagu virtuaalmasinates. Selle vĂ”imaluse pakub kas LVM vĂ”i btrfs (vĂ”i xfs, vĂ”i zfs — erinevus ei ole suur). LVM'i puhul ei ole snapshot'id tugev kĂŒlg. Installime btrfs. Ja kĂ€ivituslaadur — MBR-s. Ei ole mĂ”tet ummistada ketast 50 MB FAT-partitsiooniga, kui seda saab suruda 1 MB partitsioonitabeli alasse ja kogu ruumi eraldada sĂŒsteemile. Ketas vĂ”ttis 700 MB. Kui palju on SUSE bainstallis — ei mĂ€leta, tundub, et umbes 1.1 vĂ”i 1.4 GB.

Installime CEPH'i. Ignoreerime versiooni 12 debiani hoidlas ja vÔtame otse veebisaidilt 15.2.3. JÀrgime "installime CEPH kÀsitsi" jaotise juhiseid jÀrgmiste eranditega:

  • Enne hoidla ĂŒhendamist on vaja installida gnupg wget ca-certificates.
  • PĂ€rast hoidla ĂŒhendamist, kuid enne klastrite alustamist on unustatud paigaldada paketid: apt -y --no-install-recommends install ceph-common ceph-mon ceph-osd ceph-mds ceph-mgr.
  • CEPH'i installimise hetkel ĂŒritab lvm2 mĂ”istetamatutel pĂ”hjustel paigalduda. PĂ”himĂ”tteliselt ei ole kahju, aga installimine lĂ”ppeb tĂ”rke tĂ”ttu, mistĂ”ttu CEPH samuti ei paigalduda.

    Aitas see patch:

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

Klastri ĂŒlevaade

ceph-osd vastutab andmete salvestamise eest kettale. Iga ketta jaoks kĂ€ivitatakse vĂ”rguteenuse, mis aktsepteerib ja tĂ€idab pĂ€ringuid objektide lugemiseks vĂ”i kirjutamiseks. Kettale luuakse kaks jaotust. Üks neist sisaldab teavet klastrist, ketta numbrist ning ka vĂ”tmeid klastrile. See 1KB ulatuses teave luuakse ĂŒks kord ketta lisamisel ja enam ei muutu. Teisel jaotusel ei ole failisĂŒsteemi ja seal hoitakse binaardata CEPH. Eelmiste versioonide automaatne seadistus lĂ”i 100MB suuruse xfs jaotuse teenuste teabe jaoks. Minu, konverteeritud ketas MBR formaati ja eraldasin kokku vaid 16MB — teenus ei kaeba. Arvan, et xfs-iga ei tohiks probleeme olla, kui asendada see ext-ga. See jaotus mountitakse /var/lib/... , kus teenus loeb OSD teavet ja leiab viite plokiseadmest, kus binaardata hoitakse. Teoreetiliselt on vĂ”imalik kohe abijooned paigutada /var/lib/... , kusjuures kogu ketas on eraldatud andmete jaoks. OSD loomisel lĂ€bi ceph-deploy luuakse automaatselt reegel jaotuse mountimiseks /var/lib/... , ning mÀÀratakse Ă”igused kasutajale ceph, et lugeda vajalikku plokiseadet. KĂ€esoleva kĂ€sitsi seadistamise korral tuleb see ise teha, dokumentatsioonis ei öelda. Samuti on soovitatav mÀÀrata parameeter osd memory target, et fĂŒĂŒsilisest mĂ€lust piisaks.

ceph-mds. Madalal tasemel on CEPH objektipĂ”hine salvestamine. Blokeerimise salvestamise vĂ”imalus seisneb iga 4MB ploki salvestamises objektina. Sama pĂ”himĂ”tte kohaselt töötab ka failisĂŒsteem. Loodud on kaks basseini: ĂŒks metaandmete jaoks, teine — andmete jaoks. Need ĂŒhendatakse failisĂŒsteemaks. Sel hetkel luuakse mingi salvestus, seega kui failisĂŒsteem kustutada, kuid mĂ”lemad basseini sĂ€ilitada, ei saa seda taastada. On olemas protseduur failide vĂ€lja tĂ”mbamiseks plokkide kaupa, pole testitud. FailisĂŒsteemi juurdepÀÀsu eest vastutab teenus ceph-mds. Iga failisĂŒsteemi jaoks on vajalik eraldi teenuse eksemplar. On olemas valik "indeks", mis vĂ”imaldab luua sarnaseid mitmeid failisĂŒsteeme ĂŒhes — seda samuti ei ole testitud.

ceph-mon — see teenus hoiab klastrikaarti. Selle alla kuulub teave kĂ”igi OSD-de, PG jaotuse algoritmi OSD-s ning mis kĂ”ige tĂ€htsam, teave kĂ”igi objektide kohta (selle mehhanismi ĂŒksikasjad pole mulle selged: on kataloog /var/lib/ceph/mon/.../store.db, kus on suur fail — 26MB, ja klastris on 105K objekti, seega umbes 256 bitti objekti kohta; arvan, et monitor hoiab kĂ”igi objektide ja PG-de nimekirja, milles need asuvad). Selle katalooge kahjustamine toob kaasa andmete kaotuse klastris. Seega tuleneb jĂ€reldus, et CRUSH nĂ€itab, kuidas PG-d on OSD-de vahel jaotatud, kui objektid on PG-de osas — need on tsentraliseeritult hoitud andmebaasis, hoolimata sellest, kuidas arendajad seda sĂ”na vĂ€ltida ĂŒritaksid. SeetĂ”ttu, esiteks, ei saa me sĂŒsteemi RO-reĆŸiimis mĂ€lupulgale installida, kuna andmebaasi tehakse pidevat kirjutamist; vajalik on tĂ€iendav ketas nende jaoks (ilmselt mitte rohkem kui 1 GB). Teiseks on vajalik reaalaegne koopia sellest andmebaasist. Kui monitoore on mitu, tagatakse tĂ”rkekindlus automaatselt, kuid meie puhul on monitor ĂŒks, maksimaalselt kaks. On teoreetiline protseduur monitori taastamiseks OSD-de andmete pĂ”hjal; olen seda mingitel pĂ”hjustel kolm korda proovinud, ja kolmel korral ei ole mingeid veateateid, samuti andmeid. Kahjuks ei tööta see mehhanism. Kas me kasutame miniatuurselt OSD-lahtrit ja kogume RAID-i andmebaasi hoidmiseks, mis kindlasti mĂ”jutab jĂ”udlust vĂ€ga halvasti, vĂ”i eraldame vĂ€hemalt kaks usaldusvÀÀrset fĂŒĂŒsilist andmekandjat, eelistatult USB, et porte mitte hĂ”ivata.

rados-gw — ekspordib objektihoidla S3 protokolli ja sarnaste kaudu. Loob palju puule, mille eesmĂ€rk pole selge. Pole palju katsetanud.

ceph-mgr — selle teenuse installimisel kĂ€ivitatakse mitu moodulit. Üks neist on mittevĂ€ljaaadatav autoscale. See pĂŒĂŒab sĂ€ilitada Ă”ige PG/OSD arv. Kui soovite suhetest kĂ€sitsi hallata, saate iga puu jaoks skaleerimise keelata, kuid sellisel juhul kukub moodul jagamise tĂ”ttu 0-ga ja klastri staatuseks muutub ERROR. Moodul on kirjutatud Pythonis ja kui seal vajaliku rea kommenteerite, toob see kaasa selle keelamise. Üksikasju on tĂŒdimus meenutada.

Kasutatud allikate loetelu:

CEPH-i installimine
Monitori tÀieliku rikke taastamine

KĂ€suread skriptide jaoks:

SĂŒsteemi installimine debootstrap'i kaudu

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 < /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 <> /var/lib/dpkg/status
Package: lvm2
Status: install ok installed
Priority: important
Section: admin
Installed-Size: 0
Maintainer: Debian Adduser Developers 
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 
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

Klasteri loomine

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 < /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/
anceph-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 lisamine (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

Elulookirjeldus

CEPHi peamine turunduslik eelis on CRUSH — andmete asukoha arvutamise algoritm. Monitorid jagavad klientidele selle algoritmi, pĂ€rast mida kliendid kĂŒsivad otse vajaliku sĂ”lme ja vajaliku OSD kohta. CRUSH tagab keskset juhtimist vĂ€listava ĂŒlesande. See on vĂ€ike fail, mille saab vabalt vĂ€lja printida ja seinale riputada. Praktika on nĂ€idanud, et CRUSH ei ole ammendav kaart. Kui monitorid hĂ€vitatakse ja luuakse uuesti, sĂ€ilitades kĂ”ik OSD-d ja CRUSH-i, ei piisa sellest klastri taastamiseks. SeetĂ”ttu jĂ€reldatakse, et igas monitoris hoitakse teatud metaandmeid kogu klastri kohta. Need metaandmed on vĂ€heses mahus, mistĂ”ttu need ei pane klasse suuruse piiranguid, kuid nĂ”uavad nende sĂ€ilitamist, mis vĂ€listab odava ketta kasutamise sĂŒsteemi jaoks mĂ€lupulgana ning vĂ€listab klastrid, millel on vĂ€hem kui kolm sĂ”lme. Arendaja agressiivne poliitika valikuliste funktsioonide osas. Minimalismist on veel kaugel. Dokumentatsioon on tasemel: „selle eest, mis olemas, — juba aitĂ€h, kuid vĂ€ga, vĂ€ga napp“. Madala taseme teenustega suhtlemise vĂ”imalus on ette nĂ€htud, kuid dokumentatsioon kĂ€sitleb seda teemat liiga pinnapealselt, seetĂ”ttu on pigem ei, kui jaa. Praktiliselt pole ĂŒldse vĂ”imalusi andmete taastamiseks ebanormaalsest olukorrast.

Edasised tegevusvÔimalused: loobuda CEPH-ist ja kasutada tavalist mitme ketta btrfs (vÔi xfs, zfs), uurida uusi teadmisi CEPH-i kohta, mis vÔimaldaks seda nimetatud tingimustes kasutada, proovida oma salvestust kirjutada kui oskuste tÔstmist.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster