Esperienza cù CEPH

Quandu ci sò più dati di quelli chì ponu accade in un discu, hè ora di pensà à RAID. Cum'è un zitellu, aghju intesu spessu da i mo anziani: "un ghjornu RAID serà una cosa di u passatu, u almacenamentu di l'ughjettu riempia u mondu, è ùn sapete ancu ciò chì CEPH hè", cusì u primu in a mo vita indipendente. era di creà u mo propiu cluster. U scopu di l'esperimentu era di cunnosce a struttura interna di ceph è capisce u scopu di a so applicazione. Quantu hè ghjustificata l'implementazione di ceph in e imprese mediane è in i picculi? Dopu à parechji anni di funziunamentu è un coppiu di perditi di dati irreversibile, una cunniscenza di l'intricacies hè ghjuntu chì micca tuttu hè cusì simplice. E peculiarità di CEPH ponenu ostaculi à a so adopzione generalizata, è per via di elli, l'esperimenti anu righjuntu una strada morta. Quì sottu hè una descrizzione di tutti i passi fatti, u risultatu ottenutu è e cunclusioni tratte. Se e persone esperte sparte a so sperienza è spiegà certi punti, ne saraghju grata.

Nota: Cummentarii anu identificatu errori serii in alcune di l'assunzioni chì necessitanu rivisione di l'articulu sanu.

Strategia CEPH

U cluster CEPH combina un numeru arbitrariu K di dischi di dimensione arbitraria è almacena dati nantu à elli, duplicà ogni pezzu (4 MB per difettu) un numeru datu N volte.

Fighjemu u casu più simplice cù dui dischi idèntici. Da elli pudete assemble RAID 1 o un cluster cù N = 2 - u risultatu serà u listessu. Se ci sò trè dischi è sò di dimensioni diverse, allora hè faciule d'assemble un cluster cù N = 2: alcuni di i dati seranu nantu à i dischi 1 è 2, alcuni seranu nantu à i dischi 1 è 3, è alcuni saranu. nantu à 2 è 3, mentre chì RAID ùn serà micca (pudete assemble un tali RAID, ma seria una perversione). Se ci sò ancu più dischi, allora hè pussibule di creà RAID 5; CEPH hà un analogu - erasure_code, chì cuntradisce i primi cuncetti di i sviluppatori, è per quessa ùn hè micca cunsideratu. RAID 5 assume chì ci sò un picculu numeru di unità, chì sò tutti in bona cundizione. Se unu falla, l'altri duveranu mantene finu à chì u discu hè rimpiazzatu è i dati sò restituiti. CEPH, cù N> = 3, incuragisce l'usu di vechji dischi, in particulare, se tenete parechji boni dischi per almacenà una copia di dati, è almacenà i restanti dui o trè copie nantu à un gran numaru di vechji dischi, allora l'infurmazioni. Sarà sicuru, postu chì per ora i novi dischi sò vivi - ùn ci sò micca prublemi, è se unu di elli si rompe, allora u fallimentu simultaneo di trè dischi cù una vita di serviziu di più di cinque anni, preferibile da diversi servitori, hè assai improbabile. avvenimentu.

Ci hè una sutilezza à a distribuzione di copie. Per automaticamente, si assume chì a dati hè divisu in più (~ 100 per discu) gruppi di distribuzione PG, ognuna di quale hè duplicata in certi discu. Diciamu K = 6, N = 2, allora se alcuni dui dischi fallenu, a dati hè garantitu per esse persu, postu chì sicondu a teoria di probabilità, ci sarà almenu un PG chì si trova nantu à sti dui discu. È a perdita di un gruppu rende tutti i dati in a piscina indisponibile. Sì i dischi sò spartuti in trè coppie è i dati sò permessi di esse guardati solu nantu à i dischi in un paru, allora una tale distribuzione hè ancu resistente à u fallimentu di qualsiasi discu, ma se dui dischi fallenu, a probabilità di perdita di dati ùn hè micca. 100%, ma solu 3/15, è ancu in casu di fallimentu trè dischi - solu 12/20. Dunque, l'entropia in a distribuzione di dati ùn cuntribuisce micca à a tolleranza di difetti. Innota ancu chì per un servitore di file, RAM libera aumenta significativamente a velocità di risposta. A più memoria in ogni nodu, è più memoria in tutti i nodi, u più veloce serà. Questu hè senza dubbitu un vantaghju di un cluster nantu à un servitore unicu è, ancu di più, un hardware NAS, induve una quantità assai chjuca di memoria hè integrata.

Segue chì CEPH hè un bonu modu per creà un sistema di almacenamentu di dati affidabile per decine di TB cù a capacità di scala cù l'investimentu minimu da l'equipaggiu anticu (quì, sicuru, i costi seranu dumandati, ma chjuchi cumparatu cù i sistemi di almacenamentu cummerciale).

Implementazione di cluster

Per l'esperimentu, andemu à piglià un computer decommissioned Intel DQ57TM + Intel core i3 540 + 16 GB di RAM. Urganizeremu quattru dischi 2 TB in qualcosa cum'è RAID10, dopu una prova di successu aghjunghje un secondu node è u listessu numeru di discu.

Installazione di Linux. A distribuzione richiede a capacità di persunalizà è esse stabile. Debian è Suse risponde à i requisiti. Suse hà un installatore più flexible chì permette di disattivà qualsiasi pacchettu; Sfurtunatamente, ùn aghju micca pussutu capisce quale puderia esse ghjittatu senza dannà u sistema. Installa Debian cù debootstrap buster. L'opzione min-base stalla un sistema rottu chì ùn manca di driver. A diffarenza di grandezza paragunata à a versione cumpleta ùn hè micca cusì grande da disturbà. Siccomu u travagliu hè realizatu nantu à una macchina fisica, vogliu piglià snapshots, cum'è in macchine virtuali. Questa opzione hè furnita da LVM o btrfs (o xfs, o zfs - a diferenza ùn hè micca grande). I snapshots LVM ùn sò micca un puntu forte. Installa btrfs. È u bootloader hè in u MBR. Ùn ci hè micca un puntu in cluttering un discu di 50 MB cù una particione FAT quandu pudete spinghje in una zona di tavula di partizioni 1 MB è assignà tuttu u spaziu per u sistema. Pigliò 700 MB nantu à u discu. Ùn mi ricordu micca quantu l'installazione basica di SUSE hà, pensu chì hè di circa 1.1 o 1.4 GB.

Installa CEPH. Ignoramu a versione 12 in u repositoriu debian è cunnette direttamente da u situ 15.2.3. Seguimu l'istruzzioni da a sezione "Installa CEPH manualmente" cù i seguenti avvertimenti:

  • Prima di cunnette u repository, duvete installà gnupg wget ca-certificates
  • Dopu avè cunnessu u repository, ma prima di installà u cluster, l'installazione di pacchetti hè omessa: apt -y --no-install-recommends install ceph-common ceph-mon ceph-osd ceph-mds ceph-mgr
  • Quandu si stallanu CEPH, per ragioni scunnisciute, pruverà à stallà lvm2. In principiu, ùn hè micca una pietà, ma a stallazione falla, cusì CEPH ùn stalla micca.

    Stu patch hà aiutatu:

    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
    

Panoramica di u cluster

ceph-osd - hè rispunsevule per almacenà e dati nantu à u discu. Per ogni discu, un serviziu di rete hè lanciatu chì accetta è eseguisce dumande per leghje o scrive à l'uggetti. Dui partizioni sò creati nantu à u discu. Unu di elli cuntene infurmazione nantu à u cluster, u numeru di discu è e chjave di u cluster. Questa informazione 1KB hè creata una volta quandu aghjunghje un discu è ùn hè mai statu nutatu di cambià. A seconda partizione ùn hà micca un sistema di fugliale è guarda dati binari CEPH. L'installazione automatica in versioni precedenti hà creatu una partizione xfs 100MB per l'infurmazioni di serviziu. Aghju cunvertitu u discu à MBR è allughjatu solu 16MB - u serviziu ùn si lamenta micca. Pensu chì xfs puderia esse rimpiazzatu cù ext senza prublemi. Questa partizione hè muntata in /var/lib/…, induve u serviziu leghje infurmazione nantu à l'OSD è trova ancu una riferenza à u dispositivu di bloccu induve i dati binari sò almacenati. In teoria, pudete mette immediatamente i fugliali ausiliari in /var/lib/…, è attribuisce u discu sanu per i dati. Quandu crea un OSD via ceph-deploy, una regula hè automaticamente creata per muntà a partizione in /var/lib/..., è l'utilizatore ceph hè ancu attribuitu i diritti per leghje u dispusitivu di bloccu desideratu. Se installate manualmente, duvete fà questu stessu; a documentazione ùn dice micca questu. Hè ancu cunsigliatu di specificà u paràmetru di destinazione di memoria osd in modu chì ci hè abbastanza memoria fisica.

ceph-mds. À un livellu bassu, CEPH hè u almacenamentu di l'ughjettu. A capacità di bluccà l'almacenamiento si riduce à almacenà ogni bloccu 4MB cum'è un ughjettu. L'archiviazione di u schedariu travaglia nantu à u listessu principiu. Sò creati dui pools: unu per metadata, l'altru per dati. Sò cumminati in un sistema di schedari. A stu mumentu, un tipu di registru hè creatu, perchè s'è vo sguassate u sistema di schedari, ma tenite tramindui pools, ùn sarà capaci di risturà lu. Ci hè una prucedura per l'estrazione di i fugliali per blocchi, ùn aghju micca pruvatu. U serviziu ceph-mds hè rispunsevule per l'accessu à u sistema di schedari. Ogni sistema di file richiede una istanza separata di u serviziu. Ci hè una opzione "indici", chì permette di creà l'apparenza di parechji sistemi di schedari in unu - ancu micca pruvatu.

Ceph-mon - Stu serviziu guarda una mappa di u cluster. Include infurmazione nantu à tutti l'OSD, un algoritmu per a distribuzione di PG in OSD è, più impurtante, infurmazione nantu à tutti l'uggetti (i dettagli di stu mecanismu ùn sò micca chjaru per mè: ci hè un repertoriu /var/lib/ceph/mon/…/ store.db, cuntene un grande u schedariu hè 26MB, è in un gruppu di oggetti 105K, risulta esse un pocu più di 256 bytes per ughjettu - Pensu chì u monitor guarda una lista di tutti l'uggetti è i PG in quale sò situati). Dannu à stu repertoriu risultatu in a perdita di tutti i dati in u cluster. Da quì a cunclusione hè stata tirata chì CRUSH mostra cumu si trovanu i PG nantu à l'OSD, è cumu si trovanu l'uggetti nantu à i PG - sò stati cullucati in u centru di a basa di dati, ùn importa quantu i sviluppatori evitanu sta parolla. In u risultatu, prima, ùn pudemu micca installà u sistema nantu à una unità flash in modalità RO, postu chì a basa di dati hè constantemente registrata, un discu supplementu hè necessariu per questi (quasi più di 1 GB), secondu, hè necessariu avè un copia in tempu reale sta basa. Se ci sò parechji monitori, a tolleranza di difetti hè assicurata automaticamente, ma in u nostru casu ci hè solu un monitor, massimu dui. Ci hè una prucedura teorica per restaurà un monitoru basatu nantu à e dati OSD, l'aghju ricursu trè volte per diversi motivi, è trè volte ùn ci era micca messagi d'errore, è ancu micca dati. Sfortunatamente, stu mecanismu ùn funziona micca. O operemu una partizione in miniatura nantu à l'OSD è assemblemu un RAID per almacenà a basa di dati, chì certamenti avarà un effettu assai pessimu nantu à u rendiment, o assignemu almenu dui media fisichi affidabili, preferibilmente USB, per ùn occupà i porti.

rados-gw - esporta u almacenamentu di l'ughjettu via u protocolu S3 è simili. Crea parechje piscine, ùn hè micca chjaru perchè. Ùn aghju micca assai sperimentu.

ceph-mgr - Quandu si stallanu stu serviziu, parechji moduli sò lanciati. Unu di elli hè autoscale chì ùn pò micca esse disattivatu. Si sforza di mantene a quantità curretta di PG / OSD. Se vulete cuntrullà u rapportu manualmente, pudete disattivà a scala per ogni piscina, ma in questu casu, u modulu crashs with a division by 0, è u statutu di cluster diventa ERROR. U modulu hè scrittu in Python, è se cummentate a linea necessaria in questu, questu porta à a so disattivazione. Troppu pigro per ricurdà i dettagli.

Lista di fonti utilizati:

Installazione di CEPH
Recuperazione da un fallimentu cumpletu di u monitor

Elenchi di script:

Stallà u sistema 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

Crea un cluster

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

Adding OSD (parte)

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

Resumen

U vantaghju principali di u marketing di CEPH hè CRUSH - un algoritmu per calculà a situazione di dati. I monitors distribuiscenu stu algoritmu à i clienti, dopu chì i clienti dumandanu direttamente u nodu desideratu è l'OSD desideratu. CRUSH assicura nisuna centralizazione. Hè un picculu schedariu chì pudete ancu stampà è appiccà à u muru. A pratica hà dimustratu chì CRUSH ùn hè micca una mappa exhaustiva. Se distrughjite è ricreate i monitori, mantenendu tutti l'OSD è CRUSH, allora questu ùn hè micca abbastanza per restaurà u cluster. Da questu hè cunclusu chì ogni monitoru guarda qualchi metadata nantu à u cluster sanu. A piccula quantità di sta metadata ùn impone micca restrizioni à a dimensione di u cluster, ma esige assicurà a so sicurità, chì elimina u risparmiu di discu installendu u sistema in un flash drive è esclude clusters cù menu di trè nodi. A pulitica aggressiva di u sviluppatore in quantu à e funzioni opzionali. Luntanu da u minimalismu. A ducumentazione hè à u livellu di "grazie per ciò chì avemu, ma hè assai, assai scarsa". A capacità di interagisce cù servizii à un livellu bassu hè furnita, ma a ducumentazione tocca stu tema troppu superficialmente, per quessa, hè più prubabile un no chè un sì. Ùn ci hè praticamente nisuna chance di ricuperà dati da una situazione d'emergenza.

Opzioni per più azzione: abbandunà CEPH è utilizate u banale multi-disk btrfs (o xfs, zfs), scopre una nova infurmazione nantu à CEPH, chì vi permetterà di uperà in e cundizioni specificate, pruvate à scrive u vostru propiu almacenamentu cum'è un avanzatu. furmazione.

Source: www.habr.com

Add a comment