Tecrûbeya xebatê ya CEPH

Gava ku bêtir daneya ku dikare li ser yek dîskê bicîh bibe hebe, ew dem e ku meriv li ser RAID-ê bifikire. Wekî zarokek, min pir caran ji mezinên xwe bihîst: "Rojek RAID dê bibe tiştek berê, hilanîna tiştan dê cîhanê tije bike, û hûn jî nizanin CEPH çi ye," ji ber vê yekê yekem tişt di jiyana min a serbixwe de bû ku ez komê xwe biafirînim. Armanca azmûnê ew bû ku bi avahiya hundurîn a ceph-ê re were naskirin û çarçoweya sepana wê fam bike. Di karsaziyên navîn û yên piçûk de pêkanîna cephê çiqas rewa ye? Piştî çend salan xebitandinê û çend windahiyên daneya nevegerandî, têgihîştina tevliheviyan derket holê ku ne her tişt ew qas hêsan e. Taybetmendiyên CEPH li pêşiya pejirandina wê ya berbelav astengiyan derdixe, û ji ber wan ceribandinan gihîştine qonaxek mirî. Li jêr hemû gavên ku hatine avêtin, encamên ku hatine bidestxistin û encamên ku hatine derxistin têne vegotin. Ger mirovên zana serpêhatiya xwe parve bikin û hin xalan vebêjin, ez ê spasdar bim.

Nîşe: Şîrovekaran di hin texmînan de xeletiyên cidî tespît kirine ku hewcedariya guheztina tevahiya gotarê heye.

Stratejiya CEPH

Komxebata CEPH hejmareke keyfî K dîskên bi mezinahiya kêfî berhev dike û daneyan li ser wan hilîne, her perçeyê (bi xwerû 4 MB) hejmarek diyarkirî N caran dubare dike.

Werin em doza herî hêsan a bi du dîskên wekhev re bifikirin. Ji wan hûn dikarin RAID 1 an jî komek bi N=2 bicivînin - encam dê heman be. Heger sê dîsk hebin û mezinahiya wan ji hev cihê bin, wê hingê komkirina komek bi N=2 hêsan e: Hin dane dê li ser dîskên 1 û 2, hin dê li ser dîskên 1 û 3, û hin jî dê bibin. li ser 2 û 3, dema ku RAID dê nebe (hûn dikarin RAIDek wusa bicivînin, lê ew ê xeletiyek be). Ger hêj bêtir dîsk hebin, wê hingê gengaz e ku RAID 5 were afirandin; CEPH xwedan analogek erasure_code ye, ku dijberî têgehên destpêkê yên pêşdebiran e, û ji ber vê yekê nayê hesibandin. RAID 5 texmîn dike ku hejmarek piçûk ajoker hene, ku hemî di rewşek baş de ne. Ger yek têk neçe, divê yên din bisekinin heya ku dîsk were guheztin û dane li wê were vegerandin. CEPH, bi N>=3, karanîna dîskên kevn teşwîq dike, nemaze, heke hûn çend dîskên baş hilînin da ku yek kopiyek daneyê hilînin, û du an sê kopiyên mayî li ser hejmarek mezin ji dîskên kevn hilînin, wê hingê agahdarî dê ewledar be, ji ber ku heya nuha dîskên nû zindî ne - pirsgirêk tune ne, û heke yek ji wan bişkê, wê hingê têkçûna hevdemî ya sê dîskên bi temenê karûbarê ji pênc salan zêdetir, bi tercîh ji serverên cihêreng, pir ne gengaz e. bûyer.

Di belavkirina nusxeyan de nazikiyek heye. Bi xwerû, tê texmîn kirin ku dane li bêtir (~ 100 her dîskê) komên belavkirina PG-yê têne dabeş kirin, ku her yek li ser hin dîskan têne dubare kirin. Em bibêjin K=6, N=2, wê demê ger her du dîsk têk biçin, garantî ye ku dane winda bibin, ji ber ku li gorî teoriya îhtîmalê, dê bi kêmanî yek PG hebe ku dê li ser van her du dîskan cih bigire. Û windabûna yek komê dike ku hemî daneyên di hewzê de nebin. Ger dîsk li sê cotan bêne dabeş kirin û destûr were dayîn ku dane tenê li ser dîskan di nav yek cotê de werin hilanîn, wê hingê dabeşek weha li hember têkçûna yek dîskê jî berxwedêr e, lê heke du dîsk têk biçin, îhtîmala windabûna daneyê ne 100%, lê tenê 3/15, û tewra di rewşa têkçûna sê dîskê de - tenê 12/20. Ji ber vê yekê, entropî di belavkirina daneyê de beşdarî tolerasyona xeletiyê nake. Di heman demê de bîr bînin ku ji bo serverek pelê, RAM-a belaş leza bersivê bi girîngî zêde dike. Di her girêkekê de çiqas bîranîn, û di hemî girêkan de bîranîn pirtir be, ew ê zûtir be. Ev bê guman avantajek komê ye li ser serverek yekane û, hêj bêtir, NAS-ya hardware, ku tê de hejmareke pir piçûk bîranîn tê çêkirin.

Ji ber vê yekê CEPH rêgezek baş e ku meriv ji bo bi dehan TB-ê pergalek hilanîna daneya pêbawer biafirîne ku bi jêhatîbûna bi veberhênana hindiktirîn ji alavên kevnar ve were pîvandin (li vir, bê guman, lêçûn dê hewce be, lê li gorî pergalên hilanîna bazirganî piçûk).

Cluster pêkanîna

Ji bo azmûnê, em komputerek bêbandor Intel DQ57TM + Intel core i3 540 + 16 GB RAM bistînin. Em ê çar dîskên 2 TB di tiştek mîna RAID10 de birêxistin bikin, piştî ceribandinek serketî em ê girêkek duyemîn û heman hejmar dîskê lê zêde bikin.

Linux saz dike. Dabeşkirin jêhatîbûna xwerû û îstîqrar hewce dike. Debian û Suse hewcedariyan pêk tînin. Suse xwedan sazkerek maqûltir e ku dihêle hûn her pakêtê neçalak bikin; Mixabin, min nikarî fêhm bikim ka kîjan bêyî zirarê bide pergalê dikare were avêtin. Debian bi karanîna debootstrap buster saz bikin. Vebijarka min-base pergalek şikestî ya ku ajokar tune saz dike. Cûdahiya mezinahiyê li gorî guhertoya tevahî ne ew qas mezin e ku meriv aciz bike. Ji ber ku kar li ser makîneyek laşî tê kirin, ez dixwazim wêneyan bigirim, mîna makîneyên virtual. Ev vebijark ji hêla LVM an btrfs (an xfs, an zfs) ve tê peyda kirin - cûdahî ne mezin e. Wêneyên LVM ne xalek bihêz in. Btrfs saz bikin. Û bootloader di MBR de ye. Tiştek tune ku hûn dîskek 50 MB bi dabeşek FAT re tevlihev bikin dema ku hûn dikarin wê bixin nav qada tabloya dabeşkirinê ya 1 MB û hemî cîhê pergalê veqetînin. 700 MB li ser dîskê girt. Nayê bîra min ka sazkirina bingehîn SUSE çiqas heye, ez difikirim ku ew li ser 1.1 an 1.4 GB ye.

CEPH saz bikin. Em guhertoya 12-a di depoya debian de paşguh dikin û rasterast ji malpera 15.2.3 ve girêdidin. Em rêwerzên ji beşa "CEPH bi destan saz bikin" bi hişyariyên jêrîn bişopînin:

  • Berî girêdana depoyê, divê hûn gnupg wget ca-sertîfîkayên saz bikin
  • Piştî girêdana depoyê, lê berî sazkirina komê, sazkirina pakêtan ji holê radibe: apt -y --no-install-pêşniyar dike ceph-common ceph-mon ceph-osd ceph-mds ceph-mgr
  • Dema ku CEPH saz dike, ji ber sedemên nenas, ew ê hewl bide lvm2 saz bike. Di prensîbê de, ne xemgîn e, lê sazkirin têk diçe, ji ber vê yekê CEPH jî dê saz neke.

    Vê patchê alîkarî kir:

    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
    

Cluster view giştî

ceph-osd - berpirsiyar e ku daneyên li ser dîskê hilîne. Ji bo her dîskê, karûbarek torê tê destpêkirin ku daxwazên xwendin an nivîsandina tiştan qebûl dike û pêk tîne. Li ser dîskê du beş têne çêkirin. Yek ji wan agahdariya li ser komê, jimareya dîskê û bişkojkên komê vedihewîne. Ev agahdariya 1KB dema ku dîskek lê zêde dike carekê tê afirandin û çu carî nehatiye guheztin. Parçeya duyemîn pergala pelan tune û daneyên binary CEPH hilîne. Sazkirina otomatîkî di guhertoyên berê de ji bo agahdariya karûbarê dabeşek xfs ya 100MB çêkir. Min dîskê veguherand MBR û tenê 16 MB veqetand - karûbar gilî nake. Ez difikirim ku xfs bêyî pirsgirêk bi ext re were guheztin. Ev dabeşkirin di /var/lib/… de hatî danîn, ku karûbar agahdariya li ser OSD-ê dixwîne û di heman demê de referansek ji cîhaza blokê ya ku daneyên binaryê lê têne hilanîn jî dibîne. Bi teorîkî, hûn dikarin tavilê pelên alîkar li /var/lib/… bi cîh bikin, û tevahiya dîskê ji bo daneyan veqetînin. Dema ku OSD-yek bi navgîniya ceph-deploy ve diafirîne, rêgezek bixweber tê afirandin da ku dabeşkirinê li /var/lib/… bike, û ji bikarhênerê ceph re jî mafên xwendina amûra bloka xwestinê tê destnîşankirin. Ger hûn bi destan saz bikin, divê hûn vê yekê bixwe bikin; belge vê yekê nabêjin. Di heman demê de tê pêşniyar kirin ku hûn pîvana armanca bîranîna osd diyar bikin da ku têra bîranîna laşî hebe.

ceph-mds. Di astek nizm de, CEPH hilanîna tiştan e. Kapasîteya astengkirina hilanînê bi hilanîna her blokek 4 MB wekî objeyekê tê. Hilberîna pelan li ser heman prensîbê dixebite. Du hewz têne afirandin: yek ji bo metadata, ya din ji bo daneyan. Ew di pergala pelan de têne hev kirin. Di vê gavê de, celebek tomar tê afirandin, ji ber vê yekê heke hûn pergala pelan jêbirin, lê her du hewz jî bihêlin, hûn ê nikaribin wê sererast bikin. Pêvajoyek ji bo derxistina pelan bi blokan heye, min ew ceriband. Karûbarê ceph-mds ji bo gihîştina pergala pelan berpirsiyar e. Her pergala pelê mînakek karûbarê cûda hewce dike. Vebijêrkek "index" heye, ku destûrê dide te ku hûn di yek de dîmena gelek pergalên pelan biafirînin - di heman demê de ne ceribandin.

Ceph-mon - Ev karûbar nexşeyek komê hilîne. Ew agahdariya li ser hemî OSD-an, algorîtmayek ji bo belavkirina PG-ê di OSD-an de û ya herî girîng jî, agahdariya li ser hemî tiştan vedihewîne (hûrguliyên vê mekanîzmayê ji min re ne diyar in: pelrêçek heye /var/lib/ceph/mon/…/ store.db, pelek mezin dihewîne 26 MB, û di komek ji 105K hêmanan de, ew ji her tiştekê piçekî zêdetirî 256 byte derdikeve - ez difikirim ku çavdêr navnîşek hemî tiştan û PG-yên ku tê de tomar dike. ew cih digirin). Zirara vê pelrêçê dibe sedema windakirina hemî daneyên di komê de. Ji ber vê yekê encam hate derxistin ku CRUSH destnîşan dike ka PG-ê çawa li ser OSD-ê, û tiştên çawa li ser PG-an têne bicîh kirin - ew bi navendî di hundurê databasê de têne hilanîn, her çend pêşdebiran ji vê peyvê dûr bixin. Wekî encamek, yekem, em nekarin pergalê di moda RO-yê de li ser ajokerek flash saz bikin, ji ber ku databas bi domdarî tê tomar kirin, ji bo van dîskek zêde hewce ye (ji 1 GB zêdetir), ya duyemîn jî, pêdivî ye ku vê bingehê di demek rast de kopî bikin. Ger çend çavdêr hebin, wê hingê tolerasyona xeletiyê bixweber tê peyda kirin, lê di rewşa me de tenê yek çavdêr, herî zêde du heye. Ji bo sererastkirina çavdêriyek li ser bingeha daneyên OSD-ê pêvajoyek teorîkî heye, min sê caran ji ber sedemên cihêreng serî lê da, û sê caran jî peyamên xeletiyê tune bûn, û her weha dane tune. Mixabin, ev mekanîzma kar nake. An em dabeşek piçûk li ser OSD-ê dixebitînin û RAID-ê berhev dikin da ku databasê hilînin, ku bê guman dê bandorek pir xirab li ser performansê bike, an jî em bi kêmî ve du medyayên laşî yên pêbawer, bijartî USB, veqetînin da ku portan dagir nekin.

rados-gw - hilanîna tiştan bi navgîniya protokola S3 û mîna wan derdixe. Gelek hewz çêdike, ne diyar e çima. Min zêde ceribandin nekir.

ceph-mgr - Dema ku vê karûbarê saz dikin, gelek modul têne destpêkirin. Yek ji wan otoscale ye ku nayê asteng kirin. Ew hewl dide ku mîqdara rast a PG / OSD biparêze. Heke hûn dixwazin rêjeyê bi destan kontrol bikin, hûn dikarin pîvandinê ji bo her hewzê neçalak bikin, lê di vê rewşê de modul bi dabeşkirina 0-ê têk diçe, û statûya komê dibe ERROR. Module bi Python-ê hatî nivîsandin, û ger hûn rêzika pêwîst tê de şîrove bikin, ev dibe sedema neçalakkirina wê. Ji bo bîranîna hûrguliyan pir tembel.

Lîsteya çavkaniyên ku hatine bikar anîn:

Sazkirina CEPH
Vejandina ji têkçûnek çavdêriya tevahî

Navnîşanên Skrîptê:

Sazkirina pergalê bi rêya 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

Komek ava bikin

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

Zêdekirina OSD (beş)

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

Nîqaş

Avantaja kirrûbirra sereke ya CEPH CRUSH e - algorîtmayek ji bo hesabkirina cîhê daneyê. Çavdêr vê algorîtmayê li xerîdaran belav dikin, piştî ku xerîdar rasterast girêka xwestî û OSD-ya xwestinê daxwaz dikin. CRUSH tu navendîbûnê misoger dike. Ew pelek piçûk e ku hûn jî dikarin çap bikin û bi dîwar ve daliqînin. Pratîkê destnîşan kir ku CRUSH ne nexşeyek tevlihev e. Ger hûn çavdêran hilweşînin û ji nû ve biafirînin, hemî OSD û CRUSH biparêzin, wê hingê ev ji bo sererastkirina komê ne bes e. Ji vê yekê tê encamdan ku her çavdêr hin metadata li ser tevahiya komê hilîne. Rêjeya piçûk a vê metadata li ser mezinahiya komê tixûbdar nake, lê hewce dike ku ewlehiya wan bipejirîne, ku bi sazkirina pergalê li ser ajokerek flash-ê re teserûfa dîskê ji holê radike û komên ku ji sê girêk kêmtir in derdixe. Siyaseta êrîşkar a pêşdebir di derheqê taybetmendiyên vebijarkî de. Dûr ji minimalîzmê. Belgekirin di asta "spas ji bo tiştên me hene, lê ew pir, pir hindik e." Kapasîteya danûstandina bi karûbaran re di astek nizm de tê peyda kirin, lê belgename vê mijarê pir bi çavan dişewitîne, ji ber vê yekê ew ji erê bêtir erê ye. Di pratîkê de şansek vegerandina daneyan ji rewşek awarte tune.

Vebijarkên ji bo çalakiya din: dev ji CEPH berdin û btrfên pir-dîskê yên banal (an xfs, zfs) bikar bînin, di derbarê CEPH de agahdariya nû bibînin, ku dê bihêle hûn wê di bin şert û mercên diyarkirî de bixebitînin, hewl bidin ku hilanînê xwe wekî pêşkeftî binivîsin. hîndarî.

Source: www.habr.com

Add a comment