Reynsla af CEPH

Þegar það eru fleiri gögn en rúmast á einum diski er kominn tími til að huga að RAID. Sem barn heyrði ég oft frá öldungum mínum: „Einn daginn mun RAID heyra fortíðinni til, mun geymsla á hlutum fylla heiminn og þú veist ekki einu sinni hvað CEPH er,“ svo það fyrsta í mínu sjálfstæða lífi var að búa til minn eigin klasa. Tilgangur tilraunarinnar var að kynnast innri uppbyggingu ceph og skilja umfang notkunar þess. Hversu réttlætanlegt er innleiðing ceph í meðalstórum fyrirtækjum og litlum fyrirtækjum? Eftir nokkurra ára rekstur og nokkra óafturkræfu gagnatap, vaknaði skilningur á flækjunum að ekki er allt svo einfalt. Sérkenni CEPH eru hindranir fyrir víðtækri upptöku þess og vegna þeirra hafa tilraunir komist í hnút. Hér að neðan er lýsing á öllum skrefum sem tekin voru, niðurstöðunni sem fengin var og ályktunum sem dregnar eru. Ef fróðir menn deila reynslu sinni og útskýra nokkur atriði, mun ég vera þakklátur.

Athugið: Umsagnaraðilar hafa bent á alvarlegar villur í sumum forsendunum sem krefjast endurskoðunar á allri greininni.

CEPH stefna

CEPH þyrpingin sameinar handahófskennda fjölda K af diskum af handahófskenndri stærð og geymir gögn á þeim og afritar hvert stykki (4 MB sjálfgefið) ákveðna tölu N sinnum.

Við skulum íhuga einfaldasta málið með tveimur eins diskum. Úr þeim geturðu annað hvort sett saman RAID 1 eða klasa með N=2 - niðurstaðan verður sú sama. Ef það eru þrír diskar og þeir eru af mismunandi stærðum, þá er auðvelt að setja saman klasa með N=2: sum gagna verða á diskum 1 og 2, sum verða á diskum 1 og 3 og sum verða á 2 og 3, á meðan RAID gerir það ekki (þú getur sett saman svona RAID, en það væri öfugmæli). Ef það eru enn fleiri diskar, þá er hægt að búa til RAID 5; CEPH er með hliðstæðu - erasure_code, sem stangast á við fyrstu hugmyndir þróunaraðila og er því ekki tekinn til greina. RAID 5 gerir ráð fyrir að það sé lítill fjöldi diska, sem allir eru í góðu ástandi. Ef einn mistekst verða hinir að halda út þar til disknum er skipt út og gögnin eru endurheimt á hann. CEPH, með N>=3, hvetur til notkunar á gömlum diskum, sérstaklega ef þú geymir nokkra góða diska til að geyma eitt eintak af gögnum og geymir tvö eða þrjú eintök sem eftir eru á miklum fjölda gamalla diska, þá munu upplýsingarnar mun vera öruggur, þar sem nýir diskar eru á lífi í bili - það eru engin vandamál, og ef einn þeirra bilar, þá er samtímis bilun þriggja diska með meira en fimm ára endingartíma, helst frá mismunandi netþjónum, afar ólíklegt atburður.

Það er næmni við dreifingu eintaka. Sjálfgefið er gert ráð fyrir að gögnunum sé skipt í fleiri (~100 á disk) PG dreifingarhópa, sem hver um sig er afritaður á sumum diskum. Segjum að K=6, N=2, ef einhverjir tveir diskar bila, þá er tryggt að gögn glatist, þar sem samkvæmt líkindafræði verður að minnsta kosti einn PG staðsettur á þessum tveimur diskum. Og tap á einum hópi gerir öll gögnin í lauginni ótiltæk. Ef diskunum er skipt í þrjú pör og leyfilegt er að geyma gögn aðeins á diskum innan eins pars, þá er slík dreifing einnig ónæm fyrir bilun á einum diski, en ef tveir diskar bila eru líkurnar á gagnatapi ekki. 100%, en aðeins 3/15, og jafnvel ef bilun er á þremur diskum - aðeins 12/20. Þess vegna stuðlar óreiðu í gagnadreifingu ekki til bilunarþols. Athugaðu einnig að fyrir skráarþjónn eykur ókeypis vinnsluminni svarhraðann verulega. Því meira minni í hverjum hnút og því meira minni í öllum hnútum, því hraðar verður það. Þetta er án efa kostur þyrpingar umfram einn netþjón og enn frekar vélbúnaðar NAS, þar sem mjög lítið magn af minni er innbyggt.

Af því leiðir að CEPH er góð leið til að búa til áreiðanlegt gagnageymslukerfi fyrir tugi TB með getu til að skala með lágmarksfjárfestingu frá gamaldags búnaði (hér þarf auðvitað kostnaður, en lítill miðað við geymslukerfi í atvinnuskyni).

Klasaútfærsla

Fyrir tilraunina skulum við taka óvirkjaða tölvu Intel DQ57TM + Intel core i3 540 + 16 GB af vinnsluminni. Við munum skipuleggja fjóra 2 TB diska í eitthvað eins og RAID10, eftir árangursríka prófun munum við bæta við öðrum hnút og sama fjölda diska.

Að setja upp Linux. Dreifingin krefst getu til að sérsníða og vera stöðug. Debian og Suse uppfylla kröfurnar. Suse er með sveigjanlegri uppsetningarforrit sem gerir þér kleift að slökkva á hvaða pakka sem er; Því miður gat ég ekki fundið út hverjum væri hægt að henda án þess að skemma kerfið. Settu upp Debian með því að nota debootstrap buster. Min-base valkosturinn setur upp bilað kerfi sem vantar rekla. Stærðarmunurinn miðað við heildarútgáfuna er ekki svo mikill að hann trufli. Þar sem vinnan fer fram á líkamlegri vél vil ég taka skyndimyndir, eins og á sýndarvélum. Þessi valmöguleiki er veittur af annað hvort LVM eða btrfs (eða xfs, eða zfs - munurinn er ekki mikill). LVM skyndimyndir eru ekki sterk hlið. Settu upp btrfs. Og ræsiforritið er í MBR. Það þýðir ekkert að klúðra 50 MB diski með FAT skipting þegar þú getur ýtt honum inn á 1 MB skiptingartöflusvæði og úthlutað öllu plássi fyrir kerfið. Tók 700 MB á disknum. Ég man ekki hversu mikið grunn SUSE uppsetningin hefur, ég held að hún sé um 1.1 eða 1.4 GB.

Settu upp CEPH. Við hunsum útgáfu 12 í debian geymslunni og tengjumst beint frá 15.2.3 síðunni. Við fylgjum leiðbeiningunum í kaflanum „Setja upp CEPH handvirkt“ með eftirfarandi fyrirvörum:

  • Áður en þú tengir geymsluna verður þú að setja upp gnupg wget ca-vottorð
  • Eftir að hafa tengt geymsluna, en áður en þyrpingin er sett upp, er uppsetningu pakka sleppt: apt -y --no-install-recommends install ceph-common ceph-mon ceph-osd ceph-mds ceph-mgr
  • Þegar CEPH er sett upp, af óþekktum ástæðum, mun það reyna að setja upp lvm2. Í grundvallaratriðum er það ekki samúð, en uppsetningin mistekst, svo CEPH mun ekki setja upp heldur.

    Þessi plástur hjálpaði:

    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
    

Klasa yfirlit

ceph-osd - ber ábyrgð á að geyma gögn á disk. Fyrir hvern disk er netþjónusta ræst sem tekur við og framkvæmir beiðnir um að lesa eða skrifa á hluti. Tvær skiptingar eru búnar til á disknum. Einn þeirra inniheldur upplýsingar um klasann, disknúmer og lykla að klasanum. Þessar 1KB upplýsingar eru búnar til einu sinni þegar diski er bætt við og hefur aldrei verið tekið eftir að breytast. Önnur skiptingin hefur ekkert skráarkerfi og geymir CEPH tvöfalda gögn. Sjálfvirk uppsetning í fyrri útgáfum bjó til 100MB xfs skipting fyrir þjónustuupplýsingar. Ég breytti disknum í MBR og úthlutaði aðeins 16MB - þjónustan kvartar ekki. Ég held að það væri hægt að skipta út xfs fyrir ext án vandræða. Þessi skipting er sett upp í /var/lib/…, þar sem þjónustan les upplýsingar um OSD og finnur einnig tilvísun í blokkartækið þar sem tvöfaldur gögn eru geymd. Fræðilega séð geturðu strax sett hjálparskrár í /var/lib/… og úthlutað öllum disknum fyrir gögn. Þegar OSD er búið til í gegnum ceph-deploy, er sjálfkrafa búin til regla til að tengja skiptinguna í /var/lib/…, og ceph notandinn fær einnig réttindi til að lesa viðkomandi blokkartæki. Ef þú setur upp handvirkt verður þú að gera þetta sjálfur; skjölin segja þetta ekki. Það er líka ráðlegt að tilgreina osd minnismarkbreytuna þannig að það sé nóg líkamlegt minni.

ceph-mds. Á lágu stigi er CEPH hluti geymsla. Hæfni til að loka fyrir geymslu kemur niður á því að geyma hverja 4MB blokk sem hlut. Skráageymsla virkar á sömu reglu. Tvær laugar eru búnar til: önnur fyrir lýsigögn, hin fyrir gögn. Þau eru sameinuð í skráarkerfi. Á þessu augnabliki er einhvers konar skrá búin til, þannig að ef þú eyðir skráarkerfinu, en heldur báðum laugunum, muntu ekki geta endurheimt það. Það er aðferð til að draga út skrár með blokkum, ég hef ekki prófað það. ceph-mds þjónustan ber ábyrgð á aðgangi að skráarkerfinu. Hvert skráarkerfi krefst sérstakt tilvik af þjónustunni. Það er „vísitölu“ valkostur, sem gerir þér kleift að búa til líkingu nokkurra skráarkerfa í einu - heldur ekki prófað.

Ceph-mon - Þessi þjónusta geymir kort af þyrpingunni. Það inniheldur upplýsingar um allar OSD, reiknirit til að dreifa PGs í OSDs og, síðast en ekki síst, upplýsingar um alla hluti (upplýsingarnar um þetta kerfi eru mér ekki ljósar: það er skrá /var/lib/ceph/mon/…/ store.db, það inniheldur stóra skrána er 26MB, og í þyrping af 105K hlutum, reynist það vera rúmlega 256 bæti á hlut - ég held að skjárinn geymir lista yfir alla hluti og PGs sem þær eru staðsettar). Skemmdir á þessari möppu hafa í för með sér tap á öllum gögnum í þyrpingunni. Þess vegna var sú ályktun dregin að CRUSH sýnir hvernig PGs eru staðsettir á OSD, og ​​hvernig hlutir eru staðsettir á PGs - þeir eru geymdir miðlægt inni í gagnagrunninum, sama hversu mikið forritarar forðast þetta orð. Fyrir vikið getum við í fyrsta lagi ekki sett upp kerfið á flash-drifi í RO-stillingu, þar sem gagnagrunnurinn er stöðugt tekinn upp, það þarf aukadisk fyrir þetta (varla meira en 1 GB), í öðru lagi er nauðsynlegt að hafa afritaðu þennan grunn í rauntíma. Ef það eru nokkrir skjáir, þá er bilunarþol tryggt sjálfkrafa, en í okkar tilviki er aðeins einn skjár, mest tveir. Það er fræðileg aðferð til að endurheimta skjá sem byggir á OSD gögnum, ég gripið til þess þrisvar sinnum af ýmsum ástæðum og þrisvar sinnum komu engin villuboð og engin gögn. Því miður virkar þessi vélbúnaður ekki. Annaðhvort rekum við litlu skiptinguna á OSD og setjum saman RAID til að geyma gagnagrunninn, sem mun örugglega hafa mjög slæm áhrif á frammistöðu, eða við úthlutum að minnsta kosti tveimur áreiðanlegum efnismiðlum, helst USB, til að taka ekki upp tengi.

rados-gw - flytur út hlutageymslu í gegnum S3 samskiptareglur og álíka. Skapar margar laugar, það er óljóst hvers vegna. Ég gerði ekki miklar tilraunir.

ceph-mgr - Þegar þessi þjónusta er sett upp eru nokkrar einingar ræstar. Einn þeirra er sjálfvirkur mælikvarði sem ekki er hægt að slökkva á. Það leitast við að viðhalda réttu magni PG/OSD. Ef þú vilt stjórna hlutfallinu handvirkt geturðu slökkt á mælikvarða fyrir hverja laug, en í þessu tilviki hrynur einingin með deilingu með 0, og klasastaðan verður VILLA. Einingin er skrifuð í Python og ef þú gerir athugasemdir við nauðsynlega línu í henni leiðir það til þess að hún verður óvirk. Of latur til að muna smáatriðin.

Listi yfir notaðar heimildir:

Uppsetning CEPH
Bati eftir algjöra skjábilun

Handritaskráningar:

Að setja upp kerfið með 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

Búðu til klasa

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

Bætir við OSD (hluti)

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

Yfirlit

Helsti markaðskostur CEPH er CRUSH - reiknirit til að reikna út staðsetningu gagna. Skjár dreifa þessu reiknirit til viðskiptavina, eftir það biðja viðskiptavinir beint um viðkomandi hnút og æskilegan OSD. CRUSH tryggir enga miðstýringu. Þetta er lítil skrá sem þú getur jafnvel prentað út og hengt upp á vegg. Æfingin hefur sýnt að CRUSH er ekki tæmandi kort. Ef þú eyðileggur og endurskapar skjáina, heldur öllum OSD og CRUSH, þá er þetta ekki nóg til að endurheimta þyrpinguna. Af þessu er ályktað að hver skjár geymir nokkur lýsigögn um allan klasann. Lítið magn þessara lýsigagna setur ekki takmarkanir á stærð klasans, heldur krefst þess að tryggja öryggi þeirra, sem útilokar diskasparnað með því að setja kerfið upp á flash-drifi og útilokar klasa með færri en þrjá hnúta. Árásargjarn stefna þróunaraðila varðandi valfrjálsa eiginleika. Langt frá naumhyggju. Skjölin eru á stigi „þakka þér fyrir það sem við höfum, en þau eru mjög, mjög lítil.“ Möguleikinn á að hafa samskipti við þjónustu á lágu stigi er veitt, en skjölin snerta þetta efni of yfirborðslega, svo það er líklegra nei en já. Það eru nánast engar líkur á að endurheimta gögn úr neyðartilvikum.

Valkostir fyrir frekari aðgerðir: yfirgefa CEPH og nota banal multi-disk btrfs (eða xfs, zfs), finna nýjar upplýsingar um CEPH, sem gerir þér kleift að stjórna því við tilgreind skilyrði, reyndu að skrifa þína eigin geymslu sem háþróaða þjálfun.

Heimild: www.habr.com

Bæta við athugasemd