Pieredze ar CEPH

Kad ir vairāk datu, nekā var ievietot vienā diskā, ir laiks padomāt par RAID. BērnÄ«bā es bieži dzirdēju no saviem vecākajiem: "kādu dienu RAID bÅ«s pagātne, objektu glabāŔana piepildÄ«s pasauli, un jÅ«s pat nezināt, kas ir CEPH", tātad pirmā lieta manā neatkarÄ«gajā dzÄ«vē. bija izveidot savu kopu. Eksperimenta mērÄ·is bija iepazÄ«ties ar cefa iekŔējo struktÅ«ru un izprast tā pielietojuma apjomu. Cik pamatota ir cefa ievieÅ”ana vidējos un mazajos uzņēmumos? Pēc vairāku gadu darbÄ«bas un pāris neatgriezeniskiem datu zudumiem radās izpratne par sarežģījumiem, ka ne viss ir tik vienkārÅ”i. CEPH Ä«patnÄ«bas rada ŔķērŔļus tās plaÅ”ai ievieÅ”anai, un to dēļ eksperimenti ir nonākuÅ”i strupceļā. Tālāk ir sniegts visu veikto darbÄ«bu apraksts, iegÅ«tais rezultāts un izdarÄ«tie secinājumi. Ja zinoÅ”i cilvēki dalÄ«sies pieredzē un paskaidros dažus punktus, bÅ«Å”u pateicÄ«gs.

PiezÄ«me. Komentētāji ir atklājuÅ”i nopietnas kļūdas dažos pieņēmumos, kuru dēļ ir jāpārskata viss raksts.

CEPH stratēģija

CEPH klasteris apvieno patvaļīgu skaitu K patvaļīga izmēra disku un uzglabā tajos datus, dublējot katru gabalu (pēc noklusējuma 4 MB) noteiktu skaitu N reizes.

ApskatÄ«sim vienkārŔāko gadÄ«jumu ar diviem identiskiem diskiem. No tiem var vai nu samontēt RAID 1 vai klasteru ar N=2 - rezultāts bÅ«s tāds pats. Ja ir trÄ«s diski un tie ir dažāda izmēra, tad ir viegli salikt klasteru ar N=2: daļa datu bÅ«s 1. un 2. diskā, daļa 1. un 3. diskā, bet daļa bÅ«s uz 2 un 3, savukārt RAID nedarÄ«s (var tādu RAID salikt, bet tā bÅ«tu perversija). Ja ir vēl vairāk disku, tad ir iespējams izveidot RAID 5; CEPH ir analogs - erasure_code, kas ir pretrunā ar izstrādātāju agrÄ«najām koncepcijām un tāpēc netiek ņemts vērā. RAID 5 pieņem, ka ir neliels skaits disku, un tie visi ir labā stāvoklÄ«. Ja viens neizdodas, pārējiem jāturas, lÄ«dz disks tiek nomainÄ«ts un tajā tiek atjaunoti dati. CEPH ar N>=3 mudina izmantot vecos diskus, jo Ä«paÅ”i, ja saglabājat vairākus labus diskus, lai saglabātu vienu datu kopiju, un saglabājat atlikuŔās divas vai trÄ«s kopijas lielā skaitā veco disku, tad informācija bÅ«s droŔībā, jo pagaidām jauni diski ir dzÄ«vi - problēmu nav, un, ja kāds no tiem saplÄ«st, tad trÄ«s disku, kuru kalpoÅ”anas laiks pārsniedz piecus gadus, vienlaicÄ«ga kļūme, vēlams no dažādiem serveriem, ir ārkārtÄ«gi maz ticama. notikumu.

Eksemplāru izplatÄ«Å”anai ir savs smalkums. Pēc noklusējuma tiek pieņemts, ka dati ir sadalÄ«ti vairākās (~100 vienā diskā) PG izplatÄ«Å”anas grupās, no kurām katra tiek dublēta dažos diskos. Teiksim, K=6, N=2, tad, ja kādi divi diski sabojājas, dati tiek garantēti zaudēti, jo saskaņā ar varbÅ«tÄ«bas teoriju uz Å”iem diviem diskiem atradÄ«sies vismaz viens PG. Un vienas grupas zaudÄ“Å”ana padara visus pÅ«lā esoÅ”os datus nepieejamus. Ja diski ir sadalÄ«ti trÄ«s pāros un datus atļauts glabāt tikai diskos viena pāra ietvaros, tad Ŕāds sadalÄ«jums ir izturÄ«gs arÄ« pret jebkura viena diska atteici, bet, ja sabojājas divi diski, datu zuduma iespējamÄ«ba nav 100%, bet tikai 3/15, un pat atteices gadÄ«jumā trÄ«s diski - tikai 12/20. Tādējādi entropija datu sadalē neveicina kļūdu toleranci. Ņemiet vērā arÄ« to, ka failu serverim bezmaksas RAM ievērojami palielina reakcijas ātrumu. Jo vairāk atmiņas katrā mezglā un vairāk atmiņas visos mezglos, jo ātrāk tas bÅ«s. Tā neapÅ”aubāmi ir klastera priekÅ”rocÄ«ba salÄ«dzinājumā ar vienu serveri un, vēl jo vairāk, aparatÅ«ras NAS, kurā ir iebÅ«vēts ļoti mazs atmiņas apjoms.

No tā izriet, ka CEPH ir labs veids, kā izveidot uzticamu datu uzglabāŔanas sistēmu desmitiem TB ar iespēju mērogot ar minimālām investÄ«cijām no novecojuŔām iekārtām (Å”eit, protams, bÅ«s vajadzÄ«gas izmaksas, bet nelielas, salÄ«dzinot ar komerciālajām uzglabāŔanas sistēmām).

Klastera ievieŔana

Eksperimentam ņemsim nojauktu datoru Intel DQ57TM + Intel core i3 540 + 16 GB RAM. Mēs sakārtosim četrus 2 TB diskus tādā veidā kā RAID10, pēc veiksmīgas pārbaudes pievienosim otru mezglu un tikpat daudz disku.

Linux instalÄ“Å”ana. IzplatÄ«Å”anai ir nepiecieÅ”ama spēja pielāgoties un bÅ«t stabilam. Debian un Suse atbilst prasÄ«bām. Suse ir elastÄ«gāks instalētājs, kas ļauj atspējot jebkuru pakotni; Diemžēl nevarēju saprast, kuras varētu izmest, nesabojājot sistēmu. Instalējiet Debian, izmantojot debootstrap buster. Min-base opcija instalē bojātu sistēmu, kurai trÅ«kst draiveru. Izmēru atŔķirÄ«ba salÄ«dzinājumā ar pilno versiju nav tik liela, lai traucētu. Tā kā darbs tiek veikts fiziskā maŔīnā, es vēlos uzņemt momentuzņēmumus, piemēram, virtuālajās maŔīnās. Å o iespēju nodroÅ”ina vai nu LVM vai btrfs (vai xfs, vai zfs - atŔķirÄ«ba nav liela). LVM momentuzņēmumi nav stiprā puse. Instalējiet btrfs. Un sāknÄ“Å”anas ielādētājs atrodas MBR. Nav jēgas pārblÄ«vēt 50 MB disku ar FAT nodalÄ«jumu, ja varat to ievietot 1 MB nodalÄ«juma tabulas apgabalā un atvēlēt visu vietu sistēmai. Aizņēma 700 MB diskā. Es neatceros, cik daudz ir pamata SUSE instalācijai, manuprāt, tas ir aptuveni 1.1 vai 1.4 GB.

Instalējiet CEPH. Mēs ignorējam versiju 12 debian repozitorijā un izveidojam savienojumu tieÅ”i no vietnes 15.2.3. Mēs izpildām norādÄ«jumus sadaļā ā€œCEPH manuāla instalÄ“Å”anaā€ ar Ŕādiem brÄ«dinājumiem:

  • Pirms repozitorija pievienoÅ”anas jums jāinstalē gnupg wget ca-sertifikāti
  • Pēc repozitorija pievienoÅ”anas, bet pirms klastera instalÄ“Å”anas, pakotņu instalÄ“Å”ana tiek izlaista: apt -y --no-install-recommends install ceph-common ceph-mon ceph-osd ceph-mds ceph-mgr
  • Instalējot CEPH, nezināmu iemeslu dēļ tas mēģinās instalēt lvm2. Principā nav žēl, bet instalÄ“Å”ana neizdodas, tāpēc arÄ« CEPH neinstalēs.

    Šis ielāps palīdzēja:

    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
    

Klasteru pārskats

ceph-osd - ir atbildÄ«gs par datu glabāŔanu diskā. Katram diskam tiek palaists tÄ«kla pakalpojums, kas pieņem un izpilda pieprasÄ«jumus lasÄ«t vai rakstÄ«t objektos. Diskā tiek izveidoti divi nodalÄ«jumi. Viens no tiem satur informāciju par kopu, diska numuru un klastera atslēgām. Å Ä« 1 KB informācija tiek izveidota vienreiz, pievienojot disku, un tā nekad nav mainÄ«ta. Otrajam nodalÄ«jumam nav failu sistēmas, un tajā tiek saglabāti CEPH binārie dati. Automātiskā instalÄ“Å”ana iepriekŔējās versijās izveidoja 100 MB xfs nodalÄ«jumu pakalpojuma informācijai. Es konvertēju disku uz MBR un pieŔķīru tikai 16 MB - pakalpojums nesÅ«dzas. Es domāju, ka xfs bez problēmām varētu aizstāt ar ext. Å is nodalÄ«jums ir uzstādÄ«ts /var/lib/ā€¦, kur pakalpojums nolasa informāciju par OSD, kā arÄ« atrod atsauci uz bloka ierÄ«ci, kurā tiek glabāti binārie dati. Teorētiski jÅ«s varat nekavējoties ievietot palÄ«gfailus mapē /var/lib/ā€¦ un pieŔķirt visu disku datiem. Veidojot OSD, izmantojot ceph-deploy, tiek automātiski izveidots noteikums, lai uzstādÄ«tu nodalÄ«jumu mapē /var/lib/ā€¦, un ceph lietotājam tiek pieŔķirtas arÄ« tiesÄ«bas lasÄ«t vajadzÄ«go bloka ierÄ«ci. Instalējot manuāli, tas jādara paÅ”am; dokumentācijā tas nav teikts. Ir arÄ« ieteicams norādÄ«t osd atmiņas mērÄ·a parametru, lai bÅ«tu pietiekami daudz fiziskās atmiņas.

ceph-mds. Zemā lÄ«menÄ« CEPH ir objektu krātuve. Bloku krātuves iespēja ir katra 4 MB bloka kā objekta glabāŔana. Failu glabāŔana darbojas pēc tāda paÅ”a principa. Tiek izveidoti divi pÅ«li: viens metadatiem, otrs datiem. Tie ir apvienoti failu sistēmā. Å obrÄ«d tiek izveidots sava veida ieraksts, tāpēc, ja izdzēsÄ«siet failu sistēmu, bet saglabāsiet abus pÅ«lus, to nevarēsit atjaunot. Ir procedÅ«ra failu izvilkÅ”anai pa blokiem, es to neesmu pārbaudÄ«jis. Pakalpojums ceph-mds ir atbildÄ«gs par piekļuvi failu sistēmai. Katrai failu sistēmai ir nepiecieÅ”ams atseviŔķs pakalpojuma gadÄ«jums. Ir opcija ā€œindekssā€, kas ļauj izveidot vairāku failu sistēmu lÄ«dzÄ«bu vienā - arÄ« nav pārbaudÄ«ta.

Ceph-mon ā€” Å”is pakalpojums saglabā klastera karti. Tas ietver informāciju par visiem OSD, algoritmu PG izplatÄ«Å”anai OSD un, pats galvenais, informāciju par visiem objektiem (Ŕī mehānisma detaļas man nav skaidras: ir direktorija /var/lib/ceph/mon/ā€¦/ store.db, tajā ir liels fails ir 26 MB, un 105 256 objektu klasterÄ« tas ir nedaudz vairāk par 1 baitiem vienam objektam - domāju, ka monitors saglabā visu objektu sarakstu un PG, kuros tie atrodas). Å Ä« direktorija bojājuma rezultātā tiek zaudēti visi klastera dati. LÄ«dz ar to tika izdarÄ«ts secinājums, ka CRUSH parāda, kā PG atrodas OSD, un kā objekti atrodas uz PG - tie tiek centralizēti glabāti datu bāzē, neatkarÄ«gi no tā, cik ļoti izstrādātāji izvairās no Ŕī vārda. Tā rezultātā, pirmkārt, mēs nevaram instalēt sistēmu zibatmiņas diskā RO režīmā, jo datu bāze tiek pastāvÄ«gi ierakstÄ«ta, tiem ir nepiecieÅ”ams papildu disks (diez vai vairāk par XNUMX GB), otrkārt, ir nepiecieÅ”ams kopēt reāllaikā Å”o bāzi. Ja ir vairāki monitori, tad defektu tolerance tiek nodroÅ”ināta automātiski, bet mÅ«su gadÄ«jumā ir tikai viens monitors, maksimums divi. Ir teorētiska procedÅ«ra monitora atjaunoÅ”anai, pamatojoties uz OSD datiem, trÄ«s reizes dažādu iemeslu dēļ ķēros pie tās, un trÄ«s reizes nebija kļūdu ziņojumu, kā arÄ« nebija datu. Diemžēl Å”is mehānisms nedarbojas. Vai nu mēs darbinām miniatÅ«ru OSD nodalÄ«jumu un apkopojam RAID datu bāzes glabāŔanai, kas noteikti ļoti slikti ietekmēs veiktspēju, vai arÄ« pieŔķiram vismaz divus uzticamus fiziskos datu nesējus, vēlams USB, lai neaizņemtu portus.

rados-gw - eksportē objektu krātuvi, izmantojot S3 protokolu un tamlīdzīgi. Izveido daudzus baseinus, nav skaidrs, kāpēc. Es daudz neeksperimentēju.

ceph-mgr - Instalējot Å”o pakalpojumu, tiek palaisti vairāki moduļi. Viens no tiem ir automātiskā mērogoÅ”ana, ko nevar atspējot. Tā cenÅ”as uzturēt pareizo PG/OSD daudzumu. Ja vēlaties manuāli kontrolēt attiecÄ«bu, varat atspējot mērogoÅ”anu katram pÅ«lam, taču Å”ajā gadÄ«jumā modulis avarē, dalot ar 0, un klastera statuss kļūst par ERROR. Modulis ir rakstÄ«ts Python, un, ja tajā komentējat nepiecieÅ”amo rindiņu, tas noved pie tā atspējoÅ”anas. Pārāk slinks, lai atcerētos detaļas.

Izmantoto avotu saraksts:

CEPH uzstādīŔana
AtkopÅ”ana pēc pilnÄ«gas monitora kļūmes

Skriptu saraksti:

Sistēmas instalÄ“Å”ana, izmantojot 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

Izveidojiet kopu

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 pievienoŔana (daļa)

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

Kopsavilkums

Galvenā CEPH mārketinga priekÅ”rocÄ«ba ir CRUSH ā€“ datu atraÅ”anās vietas aprēķināŔanas algoritms. Monitori izplata Å”o algoritmu klientiem, pēc tam klienti tieÅ”i pieprasa vajadzÄ«go mezglu un vēlamo OSD. CRUSH nenodroÅ”ina centralizāciju. Tas ir mazs fails, kuru varat pat izdrukāt un piekārt pie sienas. Prakse ir parādÄ«jusi, ka CRUSH nav pilnÄ«ga karte. Ja iznÄ«cināsit un izveidojat no jauna monitorus, saglabājot visu OSD un CRUSH, tad ar to nepietiek, lai atjaunotu kopu. No tā tiek secināts, ka katrs monitors glabā dažus metadatus par visu klasteru. Nelielais Å”o metadatu apjoms neuzliek ierobežojumus klastera lielumam, bet prasa nodroÅ”ināt to droŔību, kas novērÅ” diska ietaupÄ«jumus, instalējot sistēmu zibatmiņas diskā, un izslēdz klasterus ar mazāk nekā trim mezgliem. Izstrādātāja agresÄ«vā politika attiecÄ«bā uz izvēles funkcijām. Tālu no minimālisma. Dokumentācija ir lÄ«menÄ« "paldies par to, kas mums ir, bet tas ir ļoti, ļoti niecÄ«gs". Iespēja sadarboties ar pakalpojumiem tiek nodroÅ”ināta zemā lÄ«menÄ«, taču dokumentācijā Ŕī tēma skarta pārāk virspusēji, tāpēc visticamāk nē, nevis jā. Praktiski nav iespēju atgÅ«t datus no ārkārtas situācijas.

Turpmākās darbības iespējas: atteikties no CEPH un izmantot banālos daudzdisku btrfs (vai xfs, zfs), uzzināt jaunu informāciju par CEPH, kas ļaus to darbināt noteiktos apstākļos, mēģināt uzrakstīt savu krātuvi kā uzlaboto apmācību.

Avots: www.habr.com

Pievieno komentāru