CEPH funtzionamendu-esperientzia

Disko batean sar daitekeena baino datu gehiago dagoenean, RAID-en inguruan pentsatzeko garaia da. Txikitan, askotan entzun nien nire adinekoei: β€œEgunen batean RAID iraganeko gauza izango da, objektuen biltegiratzeak mundua beteko du, eta ez dakizu zer den CEPH”, beraz, nire bizitza independentean lehenengo gauza. nire kluster propioa sortzea zen. Esperimentuaren helburua ceph-en barne-egitura ezagutzea eta bere aplikazio-esparrua ulertzea zen. Nola justifikatzen da ceph-a ezartzea enpresa ertainetan eta txikietan? Hainbat urtez funtzionatzen eta datu-galera itzulezin baten ondoren, dena ez dela hain erraza den korapilatsuen ulermena sortu zen. CEPH-ren berezitasunek oztopoak jartzen dituzte bere hedapenerako, eta hori dela eta, esperimentuek muturreraino iritsi dira. Jarraian, emandako pauso guztien deskribapena, lortutako emaitza eta ateratako ondorioak azaltzen dira. Jende adituek beren esperientzia partekatzen badute eta puntu batzuk azaltzen badituzte, eskertuko dut.

Oharra: Iruzkinek akats larriak identifikatu dituzte artikulu osoa berrikustea eskatzen duten hipotesi batzuetan.

CEPH Estrategia

CEPH klusterrak tamaina arbitrarioko diskoen K kopuru arbitrarioa konbinatzen du eta horietan datuak gordetzen ditu, pieza bakoitza (4 MB lehenespenez) N aldiz zenbaki jakin batean bikoiztuz.

Demagun kasurik errazena bi disko berdinekin. Horietatik RAID 1 edo N=2 duen cluster bat munta dezakezu - emaitza berdina izango da. Hiru disko badaude eta tamaina ezberdinekoak badira, orduan erraza da N=2 duen kluster bat muntatzea: datu batzuk 1. eta 2. diskoetan egongo dira, beste batzuk 1. eta 3. diskoetan eta beste batzuk. 2 eta 3an, RAID-ek ez duen bitartean (RAID hori munta dezakezu, baina perbertsio bat izango litzateke). Disko gehiago badaude, RAID 5 sortzea posible da; CEPH-k analogiko bat du - erasure_code, garatzaileen hasierako kontzeptuekin kontraesanean dagoena eta, beraz, ez da kontuan hartzen. RAID 5-ek unitate kopuru txiki bat dagoela suposatzen du, guztiak egoera onean daudela. Batek huts egiten badu, besteek eutsi behar diote diskoa ordezkatu eta datuak berrezartzen diren arte. CEPH-k, N>=3-rekin, disko zaharrak erabiltzea bultzatzen du, bereziki, hainbat disko on gordetzen badituzu datuen kopia bat gordetzeko eta gainerako bizpahiru kopiak disko zahar kopuru handi batean gordetzen badituzu, orduan informazioa. segurua izango da, oraingoz disko berriak bizirik daudelako - ez dago arazorik, eta horietako bat apurtzen bada, bost urte baino gehiagoko iraupena duten hiru diskoren aldi berean huts egitea oso zaila da. gertaera.

Sotiltasun bat dago kopien banaketan. Lehenespenez, datuak PG banaketa-talde gehiagotan (~100 disko bakoitzeko) banatzen direla suposatzen da, horietako bakoitza disko batzuetan bikoiztuta dagoela. Demagun K=6, N=2, orduan bi diskoren batek huts egiten badu, datuak galtzea bermatuta dago, probabilitatearen teoriaren arabera, bi disko hauetan kokatuko den PG bat gutxienez egongo baita. Eta talde bat galtzeak igerilekuko datu guztiak erabilgarri ez ditu. Diskoak hiru bikotetan banatzen badira eta datuak pare bateko diskoetan soilik gordetzea onartzen bada, banaketa hori edozein diskoren hutsegitearekiko ere erresistentea da, baina bi diskok huts egiten badute, datuak galtzeko probabilitatea ez da. 100%, baina 3/15 bakarrik, eta hutsegite kasuan ere hiru disko - 12/20 bakarrik. Beraz, datu banaketan entropiak ez du akatsen tolerantzian laguntzen. Kontuan izan, halaber, fitxategi zerbitzari batentzat, doako RAMak erantzun-abiadura nabarmen handitzen duela. Zenbat eta memoria gehiago nodo bakoitzean, eta zenbat eta memoria gehiago nodo guztietan, orduan eta azkarragoa izango da. Hau da, dudarik gabe, kluster baten abantaila bat zerbitzari bakar baten aurrean eta, are gehiago, hardware NAS baten aurrean, non memoria kopuru oso txikia baitago.

Ondorioz, CEPH hamarka TBren datuen biltegiratze sistema fidagarri bat sortzeko modu ona da ekipamendu zaharkituetatik gutxieneko inbertsioarekin eskalatzeko gaitasuna duena (hemen, noski, kostuak beharko dira, baina txikiak biltegiratze sistemekin alderatuta).

Klusterraren ezarpena

Esperimenturako, har dezagun deskargatutako ordenagailu bat Intel DQ57TM + Intel core i3 540 + 16 GB RAM. 2 TBko lau disko RAID10 bezalako zerbait antolatuko dugu, proba arrakastatsua egin ondoren bigarren nodo bat eta disko kopuru bera gehituko ditugu.

Linux instalatzea. Banaketak pertsonalizatzeko eta egonkorra izateko gaitasuna eskatzen du. Debian eta Suse-k baldintzak betetzen dituzte. Susek instalatzaile malguagoa du, edozein pakete desgaitzeko aukera ematen duena; Zoritxarrez, ezin nuen asmatu zeintzuk bota daitezkeen sistema kaltetu gabe. Instalatu Debian debootstrap buster erabiliz. Min-base aukerak kontrolatzailerik ez duen sistema hautsi bat instalatzen du. Tamainaren aldea bertsio osoarekin alderatuta ez da hain handia traba egiteko. Lana makina fisiko batean egiten denez, argazkiak atera nahi ditut, makina birtualetan bezala. Aukera hau LVM edo btrfs-ek ematen dute (edo xfs, edo zfs - aldea ez da handia). LVM argazkiak ez dira puntu sendoak. Instalatu btrfs. Eta abiarazlea MBRn dago. Ez du zentzurik 50 MBko disko bat FAT partizio batekin nahastea 1 MBko partizio-taularen eremura bultza dezakezunean eta sistemarako espazio guztia esleitu. 700 MB hartzen zituen diskoan. Ez dut gogoratzen SUSEren oinarrizko instalazioak zenbat duen, uste dut 1.1 edo 1.4 GB ingurukoa dela.

Instalatu CEPH. Debian biltegian 12. bertsioa alde batera utzi eta 15.2.3 gunetik zuzenean konektatzen dugu. "CEPH eskuz instalatu" ataleko argibideak jarraitzen ditugu, ohar hauekin:

  • Biltegia konektatu aurretik, gnupg wget ca-certificates instalatu behar duzu
  • Biltegia konektatu ondoren, baina klusterra instalatu aurretik, paketeak instalatzea baztertzen da: apt -y --no-install-recommends install ceph-common ceph-mon ceph-osd ceph-mds ceph-mgr
  • CEPH instalatzean, arrazoi ezezagunengatik, lvm2 instalatzen saiatuko da. Printzipioz, ez da pena, baina instalazioak huts egiten du, beraz CEPH ere ez da instalatuko.

    Adabaki honek lagundu zuen:

    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
    

Klusterraren ikuspegi orokorra

ceph-osd - datuak diskoan gordetzeaz arduratzen da. Disko bakoitzeko, sareko zerbitzu bat abiarazten da, objektuak irakurtzeko edo idazteko eskaerak onartu eta exekutatzen dituena. Bi partizio sortzen dira diskoan. Horietako batek klusterraren, disko-zenbakiaren eta klusterraren gakoei buruzko informazioa dauka. 1KB-ko informazio hori disko bat gehitzean behin sortzen da eta ez da inoiz aldatzen nabaritu. Bigarren partizioak ez du fitxategi-sistemarik eta CEPH datu bitarrak gordetzen ditu. Aurreko bertsioetan instalazio automatikoak 100MB xfs partizioa sortu zuen zerbitzuaren informazioa lortzeko. Diskoa MBR bihurtu nuen eta 16MB bakarrik esleitu nituen - zerbitzuak ez du kexatzen. Uste dut xfs ext-ekin ordezkatu daitekeela arazorik gabe. Partizio hau /var/lib/…-n muntatzen da, non zerbitzuak OSDari buruzko informazioa irakurtzen duen eta datu bitarrak gordetzen dituen bloke-gailuaren erreferentzia bat ere aurkitzen du. Teorian, berehala jar ditzakezu fitxategi laguntzaileak /var/lib/…-n, eta disko osoa esleitu datuetarako. Ceph-deploy bidez OSD bat sortzean, automatikoki arau bat sortzen da partizioa /var/lib/...-n muntatzeko, eta ceph erabiltzaileari nahi den bloke-gailua irakurtzeko eskubideak ere esleitzen zaizkio. Eskuz instalatzen baduzu, zuk zeuk egin beharko duzu; dokumentazioak ez du hori esaten. Osd memoria xede-parametroa zehaztea ere komeni da, memoria fisiko nahikoa egon dadin.

ceph-mds. Maila baxuan, CEPH objektuen biltegiratzea da. Biltegiratzea blokeatzeko gaitasuna 4MB bloke bakoitza objektu gisa gordetzera dator. Fitxategien biltegiratzeak printzipio berdinean funtzionatzen du. Bi multzo sortzen dira: bat metadatuetarako, bestea datuetarako. Fitxategi-sistema batean konbinatzen dira. Momentu honetan, erregistro moduko bat sortzen da, beraz, fitxategi-sistema ezabatzen baduzu, baina bi multzoak mantentzen badituzu, ezin izango duzu leheneratu. Badago fitxategiak blokeka ateratzeko prozedura bat, ez dut probatu. Ceph-mds zerbitzua fitxategi-sistemarako sarbideaz arduratzen da. Fitxategi-sistema bakoitzak zerbitzuaren instantzia bereizia behar du. "Indizea" aukera bat dago, hainbat fitxategi-sistemaren itxura bakar batean sortzeko aukera ematen duena, probatu gabe ere.

Ceph-mon - Zerbitzu honek klusterraren mapa gordetzen du. OSD guztiei buruzko informazioa, PGak OSDetan banatzeko algoritmoa eta, batez ere, objektu guztiei buruzko informazioa biltzen du (mekanismo honen xehetasunak ez ditut argi: /var/lib/ceph/mon/…/ direktorioa dago. store.db, fitxategi handi bat dauka, 26MB-koa da, eta 105K objektuen multzo batean, objektu bakoitzeko 256 byte baino apur bat baino gehiagokoa izaten dela uste dut; kokatzen dira). Direktorio honetan kalteak klusterreko datu guztiak galtzen ditu. Horregatik ondorioztatu zen CRUSH-ek PGak OSDan nola kokatzen diren eta objektuak PGetan nola kokatzen diren erakusten duela; datu-basearen barruan zentralki gordetzen dira, garatzaileek hitz hori zenbat saihesten duten arren. Ondorioz, lehenik eta behin, ezin dugu sistema flash drive batean instalatu RO moduan, datu-basea etengabe grabatzen denez, disko gehigarri bat behar da hauetarako (1 GB baino gehiago ia), bigarrenik, beharrezkoa da bat edukitzea. kopiatu oinarri hau denbora errealean. Hainbat monitore badaude, akatsen tolerantzia automatikoki bermatzen da, baina gure kasuan monitore bakarra dago, gehienez bi. OSD datuetan oinarritutako monitorea berreskuratzeko prozedura teoriko bat dago, hiru aldiz jo nuen hainbat arrazoirengatik, eta hiru aldiz ez zegoen errore-mezurik, baita daturik ere. Zoritxarrez, mekanismo honek ez du funtzionatzen. Edo miniaturazko partizio bat funtzionatzen dugu OSDan eta RAID bat muntatzen dugu datu-basea gordetzeko, eta horrek, zalantzarik gabe, oso eragin txarra izango du errendimenduan, edo gutxienez bi euskarri fisiko fidagarri esleitzen ditugu, ahal izanez gero, USB, portuak ez okupatzeko.

rados-gw - objektuen biltegiratzea esportatzen du S3 protokoloaren eta antzekoen bidez. Igerileku asko sortzen ditu, ez dago argi zergatik. Ez nuen asko esperimentatu.

ceph-mgr - Zerbitzu hau instalatzean, hainbat modulu abiarazten dira. Horietako bat desgaitu ezin den eskala automatikoa da. PG/OSD kopuru zuzena mantentzen ahalegintzen da. Ratioa eskuz kontrolatu nahi baduzu, igerileku bakoitzeko eskalatzea desgaitu dezakezu, baina kasu honetan modulua huts egiten du 0 bidezko zatiketarekin, eta klusterraren egoera ERRORE bihurtzen da. Modulua Python-en idatzita dago, eta bertan beharrezko lerroa iruzkintzen baduzu, horrek desgaitu egiten du. Nagiegi xehetasunak gogoratzeko.

Erabilitako iturrien zerrenda:

CEPH instalatzea
Monitorearen hutsegite osoa berreskuratzea

Gidoien zerrendak:

Sistema instalatzea debootstrap bidez

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

Sortu kluster bat

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 gehitzea (zatia)

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

Laburpena

CEPH-ren marketin abantaila nagusia CRUSH da - datuen kokapena kalkulatzeko algoritmoa. Monitoreek algoritmo hau banatzen diete bezeroei, eta ondoren bezeroek zuzenean nahi duten nodoa eta nahi den OSDa eskatzen dituzte. CRUSHek zentralizaziorik ez du ziurtatzen. Fitxategi txiki bat da, inprimatu eta horman zintzilikatzeko ere. Praktikak erakutsi du CRUSH ez dela mapa zehatza. Monitoreak suntsitzen eta birsortzen badituzu, OSD eta CRUSH guztiak mantenduz, hori ez da nahikoa klusterra leheneratzeko. Hortik ondorioztatzen da monitore bakoitzak kluster osoari buruzko metadatu batzuk gordetzen dituela. Metadatu horien kopuru txikiak ez du murrizketarik ezartzen klusterraren tamainari, baina haien segurtasuna bermatzea eskatzen du, eta horrek disko-aurreztea ezabatzen du sistema flash drive batean instalatuta eta hiru nodo baino gutxiago dituzten klusterrak baztertzen ditu. Garatzaileak aukerako eginbideei buruzko politika oldarkorra. Minimalismotik urrun. Dokumentazioa "eskerrik asko daukagunagatik, baina oso-oso eskasa da". Maila baxuko zerbitzuekin elkarreragiteko gaitasuna ematen da, baina dokumentazioak gai hau azaletik gehiegi ukitzen du, beraz, litekeena da ezetza baiezkoa baino. Ia ez dago larrialdi egoera batetik datuak berreskuratzeko aukerarik.

Ekintza gehiago egiteko aukerak: utzi CEPH eta erabili disko anitzeko btrfs hutsalak (edo xfs, zfs), aurkitu CEPH-ri buruzko informazio berria, zehaztutako baldintzetan funtzionatzeko aukera emango dizuna, saiatu zure biltegiratze propioa idazten aurreratu gisa. prestakuntza.

Iturria: www.habr.com

Gehitu iruzkin berria