Kiam estas pli da datumoj ol povas konveni sur unu disko, estas tempo pensi pri RAID. Kiel infano, mi ofte aŭdis de miaj pliaĝuloj: "Iun tagon RAID estos afero de la pasinteco, objektostokado plenigos la mondon, kaj vi eĉ ne scias kio estas CEPH", do la unua afero en mia sendependa vivo. estis krei mian propran areton. La celo de la eksperimento estis konatiĝi kun la interna strukturo de ceph kaj kompreni la amplekson de ĝia apliko. Kiel pravigita estas la efektivigo de ceph en mezgrandaj entreprenoj kaj en malgrandaj? Post pluraj jaroj da operacio kaj kelkaj nemaligeblaj datumperdoj, ekkomprenis la komplikaĵojn, ke ne ĉio estas tiel simpla. La proprecoj de CEPH prezentas barojn al ĝia ĝeneraligita adopto, kaj pro ili, eksperimentoj atingis sakstraton. Malsupre estas priskribo de ĉiuj faritaj paŝoj, la rezulto akirita kaj la konkludoj eltiritaj. Se spertaj homoj dividas sian sperton kaj klarigos kelkajn punktojn, mi estos dankema.
Noto: Komentantoj identigis gravajn erarojn en kelkaj el la supozoj kiuj postulas revizion de la tuta artikolo.
CEPH-Strategio
La CEPH-areto kombinas arbitran nombron K da diskoj de arbitra grandeco kaj stokas datenojn pri ili, duobligante ĉiun pecon (4 MB defaŭlte) antaŭfiksitan nombron N fojojn.
Ni konsideru la plej simplan kazon kun du identaj diskoj. El ili vi povas aŭ kunmeti RAID 1 aŭ areton kun N=2 - la rezulto estos la sama. Se estas tri diskoj kaj ili estas de malsamaj grandecoj, tiam estas facile kunmeti areton kun N=2: iuj el la datumoj estos sur diskoj 1 kaj 2, iuj estos sur diskoj 1 kaj 3, kaj iuj estos. sur 2 kaj 3, dum RAID ne faros (vi povas kunveni tian RAID, sed ĝi estus perversaĵo). Se estas eĉ pli da diskoj, tiam eblas krei RAID 5 CEPH havas analogon - erasure_code, kiu kontraŭdiras la fruajn konceptojn de la programistoj, kaj tial ne estas konsiderata; RAID 5 supozas ke ekzistas malgranda nombro da diskoj, ĉiuj el kiuj estas en bona stato. Se unu malsukcesas, la aliaj devas elteni ĝis la disko estas anstataŭigita kaj la datumoj estas restarigitaj al ĝi. CEPH, kun N>=3, instigas la uzon de malnovaj diskoj, precipe, se vi konservas plurajn bonajn diskojn por stoki unu kopion de datumoj, kaj konservas la ceterajn du aŭ tri kopiojn sur granda nombro da malnovaj diskoj, tiam la informo. estos sekura, ĉar nuntempe novaj diskoj vivas - ne ekzistas problemoj, kaj se unu el ili rompas, tiam la samtempa fiasko de tri diskoj kun funkcidaŭro de pli ol kvin jaroj, prefere de malsamaj serviloj, estas ege neverŝajna. evento.
Estas subtileco al la distribuado de kopioj. Defaŭlte, oni supozas, ke la datumoj estas dividitaj en pli da (~100 po disko) PG-distribugrupoj, ĉiu el kiuj estas duobligita sur iuj diskoj. Ni diru K=6, N=2, tiam se iuj du diskoj malsukcesas, datumoj garantias esti perditaj, ĉar laŭ probabla teorio, estos almenaŭ unu PG kiu troviĝos sur ĉi tiuj du diskoj. Kaj la perdo de unu grupo faras ĉiujn datumojn en la naĝejo neatingeblaj. Se la diskoj estas dividitaj en tri parojn kaj datumoj rajtas esti stokitaj nur sur diskoj ene de unu paro, tiam tia distribuo ankaŭ rezistas al la fiasko de iu ajn disko, sed se du diskoj malsukcesas, la probablo de perdo de datumoj ne estas. 100%, sed nur 3/15, kaj eĉ en kazo de fiasko tri diskoj - nur 12/20. Tial, entropio en datendistribuo ne kontribuas al faŭltoleremo. Rimarku ankaŭ, ke por dosierservilo, libera RAM signife pliigas la respondrapidecon. Ju pli da memoro en ĉiu nodo, kaj ju pli da memoro en ĉiuj nodoj, des pli rapide ĝi estos. Ĉi tio estas sendube avantaĝo de areto super ununura servilo kaj, eĉ pli, aparataro NAS, kie tre malgranda kvanto da memoro estas enkonstruita.
Sekvas, ke CEPH estas bona maniero krei fidindan datuman stokadosistemon por dekoj da TB kun la kapablo grimpi kun minimuma investo de malmoderna ekipaĵo (ĉi tie, kompreneble, kostoj estos postulataj, sed malgrandaj kompare kun komercaj stokadsistemoj).
Areto efektivigo
Por la eksperimento, ni prenu malmenditan komputilon Intel DQ57TM + Intel core i3 540 + 16 GB da RAM. Ni organizos kvar 2 TB-diskojn en io kiel RAID10, post sukcesa testo ni aldonos duan nodon kaj la saman nombron da diskoj.
Instali LinuxLa distribuo devas esti personigebla kaj stabila. Ĉi tiujn postulojn plenumas Debian kaj Suse. Suse havas pli flekseblan instalilon, kiu permesas al vi malŝalti ajnan pakaĵon; bedaŭrinde, mi ne povis eltrovi, kiujn mi povus forigi sen difekti la sistemon. Ni instalis Debian Uzante debootstrap buster. La opcio min-base instalas nefunkcian sistemon, al kiu mankas peliloj. La grandecdiferenco kompare kun la plena versio ne estas tiel signifa, ke valoras zorgi pri ĝi. Ĉar mi laboras sur fizika maŝino, mi ŝatus fari momentfotojn, kiel sur virtualaj maŝinoj. Aŭ LVM aŭ btrfs (aŭ xfs, aŭ zfs — la diferenco ne estas tiel granda) provizas ĉi tiun kapablon. Momentfotoj ne estas la forto de LVM. Ni instalos btrfs. Kaj la startigilo estas en la MBR. Ne utilas ŝtopi 50 MB diskon per FAT-sekcio, kiam oni povas enpremi ĝin en 1 MB-sekciotabelan areon kaj dediĉi la tutan spacon al la sistemo. Ĝi okupis 700 MB da diskspaco. Mi ne memoras kiom multe uzas la baza SUSE-instalaĵo, sed mi pensas, ke ĝi estas ĉirkaŭ 1.1 aŭ 1.4 GB.
Instalu CEPH. Ignoru version 12 en la deponejo. debian kaj konektu rekte de la retejo 15.2.3. Sekvu la instrukciojn en la sekcio "Mana Instalado de CEPH", kun la jenaj singardoj:
- Antaŭ ol konekti la deponejon, vi devas instali gnupg wget ca-certificates
- Post konekti la deponejon, sed antaŭ instali la grapolon, instali pakaĵojn estas ellasita: apt -y --no-install-recommends install ceph-common ceph-mon ceph-osd ceph-mds ceph-mgr
- Instalante CEPH, pro nekonataj kialoj, ĝi provos instali lvm2. Principe ne estas domaĝe, sed la instalado malsukcesas, do ankaŭ CEPH ne instalos.
Ĉi tiu flikaĵo helpis:
cat << EOF >> /var/lib/dpkg/status Package: lvm2 Status: install ok installed Priority: important Section: admin Installed-Size: 0 Maintainer: Debian Adduser Developers <adduser@packages.debian.org> Architecture: all Multi-Arch: foreign Version: 113.118 Description: No-install EOF
Areto superrigardo
ceph-osd - respondecas pri stokado de datumoj sur disko. Por ĉiu disko, retservo estas lanĉita, kiu akceptas kaj efektivigas petojn legi aŭ skribi al objektoj. Du sekcioj estas kreitaj sur la disko. Unu el ili enhavas informojn pri la areto, diskonumero kaj ŝlosiloj al la areto. Ĉi tiu informo de 1KB estas kreita unufoje kiam oni aldonas diskon kaj oni neniam rimarkis ŝanĝi. La dua sekcio havas neniun dosiersistemon kaj stokas CEPH-duumajn datumojn. Aŭtomata instalado en antaŭaj versioj kreis 100MB xfs-sekcion por servaj informoj. Mi konvertis la diskon al MBR kaj asignis nur 16MB - la servo ne plendas. Mi pensas, ke xfs povus esti anstataŭigita per ext sen problemoj. Ĉi tiu sekcio estas muntita en /var/lib/..., kie la servo legas informojn pri la OSD kaj ankaŭ trovas referencon al la bloka aparato kie la binaraj datumoj estas stokitaj. Teorie, vi povas tuj meti helpajn dosierojn en /var/lib/..., kaj asigni la tutan diskon por datumoj. Kreante OSD per ceph-deploy, regulo estas aŭtomate kreita por munti la sekcion en /var/lib/..., kaj la ceph-uzanto ankaŭ ricevas rajtojn legi la deziratan blokaparaton. Se vi instalas permane, vi devas fari tion mem la dokumentaro ne diras tion. Estas ankaŭ konsilinde specifi la osd-memorcelan parametron por ke ekzistas sufiĉe da fizika memoro.
ceph-mds. Je malalta nivelo, CEPH estas objektostokado. La kapablo bloki stokadon signifas stoki ĉiun 4MB-blokon kiel objekton. Dosiera stokado funkcias laŭ la sama principo. Du naĝejoj estas kreitaj: unu por metadatenoj, la alia por datumoj. Ili estas kombinitaj en dosiersistemon. En ĉi tiu momento, ia rekordo estas kreita, do se vi forigas la dosiersistemon, sed konservas ambaŭ poolojn, vi ne povos restarigi ĝin. Estas procedo por ĉerpi dosierojn per blokoj, mi ne testis ĝin. La servo ceph-mds respondecas pri aliro al la dosiersistemo. Ĉiu dosiersistemo postulas apartan okazon de la servo. Estas opcio "indekso", kiu permesas krei la ŝajnon de pluraj dosiersistemoj en unu - ankaŭ ne provita.
Ceph-mon - Ĉi tiu servo konservas mapon de la areto. Ĝi inkluzivas informojn pri ĉiuj OSD-oj, algoritmon por distribui PG-ojn en OSD-oj kaj, plej grave, informojn pri ĉiuj objektoj (la detaloj de ĉi tiu mekanismo ne estas klaraj al mi: estas dosierujo /var/lib/ceph/mon/.../ store.db, ĝi enhavas grandan la dosieron estas 26MB, kaj en aro de 105K objektoj, ĝi rezultas esti iom pli ol 256 bajtoj per objekto - mi pensas, ke la monitoro konservas liston de ĉiuj objektoj kaj la PG en kiu ili troviĝas). Damaĝo al ĉi tiu dosierujo rezultigas la perdon de ĉiuj datumoj en la areto. Tial oni eltiris la konkludon, ke CRUSH montras kiel PG-oj situas sur la OSD, kaj kiel objektoj troviĝas sur PG-oj - ili estas centre konservitaj en la datumbazo, kiom ajn la programistoj evitas ĉi tiun vorton. Kiel rezulto, unue, ni ne povas instali la sistemon sur flash drive en RO-reĝimo, ĉar la datumbazo estas konstante registrita, por ĉi tiuj necesas plia disko (apenaŭ pli ol 1 GB), due, necesas havi kopiu en reala tempo ĉi tiun bazon. Se ekzistas pluraj monitoroj, tiam misfunkciadoleremo estas certigita aŭtomate, sed en nia kazo ekzistas nur unu monitoro, maksimume du. Estas teoria proceduro por restarigi monitoron bazitan sur OSD-datumoj, mi recurris al ĝi trifoje pro diversaj kialoj, kaj trifoje estis neniuj erarmesaĝoj, kaj ankaŭ neniuj datumoj. Bedaŭrinde, ĉi tiu mekanismo ne funkcias. Aŭ ni funkciigas miniaturan subdiskon sur la OSD kaj muntas RAID por stoki la datumbazon, kiu certe tre malbona efikos al la rendimento, aŭ ni asignas almenaŭ du fidindajn fizikajn rimedojn, prefere USB, por ne okupi havenojn.
rados-gw - eksportas objektostokadon per la S3-protokolo kaj simile. Kreas multajn naĝejojn, estas neklare kial. Mi ne multe eksperimentis.
ceph-mgr - Instalante ĉi tiun servon, pluraj moduloj estas lanĉitaj. Unu el ili estas aŭtomata skalo, kiu ne povas esti malŝaltita. Ĝi klopodas konservi la ĝustan kvanton de PG/OSD. Se vi volas kontroli la rilatumon permane, vi povas malŝalti skaladon por ĉiu naĝejo, sed ĉi-kaze la modulo kraŝas kun divido per 0, kaj la cluster statuso fariĝas ERARO. La modulo estas skribita en Python, kaj se vi komentas la necesan linion en ĝi, tio kondukas al ĝia malfunkciigo. Tro maldiligenta por memori la detalojn.
Listo de uzataj fontoj:
Skripto-listoj:
Instalante la sistemon per 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 <adduser@packages.debian.org>
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 <adduser@packages.debian.org>
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 6Kreu areton
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@rbd1Aldonante OSD (parto)
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@$osdnumResumo
La ĉefa merkata avantaĝo de CEPH estas CRUSH - algoritmo por kalkuli la lokon de datumoj. Monitoroj distribuas ĉi tiun algoritmon al klientoj, post kiuj klientoj rekte petas la deziratan nodon kaj la deziratan OSD. CRUSH certigas neniun centralizon. Ĝi estas malgranda dosiero, kiun vi eĉ povas presi kaj pendigi sur la muro. Praktiko montris, ke CRUSH ne estas ampleksa mapo. Se vi detruas kaj rekreas la monitorojn, konservante ĉiujn OSD kaj CRUSH, tiam ĉi tio ne sufiĉas por restarigi la areton. El tio oni konkludas, ke ĉiu monitoro konservas iujn metadatenojn pri la tuta areto. La malgranda kvanto de ĉi tiuj metadatenoj ne trudas limigojn pri la grandeco de la areto, sed postulas certigi ilian sekurecon, kio forigas diskoŝparojn instalante la sistemon sur flash drive kaj ekskludas aretojn kun malpli ol tri nodoj. La agresema politiko de la programisto pri laŭvolaj funkcioj. Malproksime de minimalismo. La dokumentaro estas je la nivelo de "dankon pro tio, kion ni havas, sed ĝi estas tre, tre magra." La kapablo interagi kun servoj je malalta nivelo estas provizita, sed la dokumentaro tuŝas ĉi tiun temon tro supraĵe, do pli verŝajne estas ne ol jes. Preskaŭ ne ekzistas ŝanco reakiri datumojn de kriz-situacio.
Ebloj por plua agado: forlasu CEPH kaj uzu la banalan plurdiskajn btrfs (aŭ xfs, zfs), eksciu novajn informojn pri CEPH, kiuj permesos al vi funkciigi ĝin sub la specifitaj kondiĉoj, provu skribi vian propran stokadon kiel altnivela. trejnado.
fonto: www.habr.com
