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:
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