Uzoefu na CEPH

Wakati kuna data zaidi kuliko inaweza kutoshea kwenye diski moja, ni wakati wa kufikiria kuhusu RAID. Nikiwa mtoto, mara nyingi nilisikia kutoka kwa wazee wangu: "Siku moja RAID itakuwa jambo la zamani, hifadhi ya kitu itajaza ulimwengu, na hata hujui CEPH ni nini," kwa hiyo jambo la kwanza katika maisha yangu ya kujitegemea. ilikuwa kuunda nguzo yangu mwenyewe. Madhumuni ya jaribio lilikuwa kufahamiana na muundo wa ndani wa ceph na kuelewa upeo wa matumizi yake. Je, ni haki gani utekelezaji wa ceph katika biashara za ukubwa wa kati na ndogo? Baada ya miaka kadhaa ya operesheni na hasara kadhaa za data zisizoweza kutenduliwa, uelewa wa ugumu uliibuka kwamba sio kila kitu ni rahisi sana. Sifa za kipekee za CEPH zinaweka vizuizi kwa kupitishwa kwake kwa kuenea, na kwa sababu yao, majaribio yamefikia mwisho. Chini ni maelezo ya hatua zote zilizochukuliwa, matokeo yaliyopatikana na hitimisho lililotolewa. Ikiwa watu wenye ujuzi watashiriki uzoefu wao na kuelezea baadhi ya pointi, nitashukuru.

Kumbuka: Watoa maoni wametambua makosa makubwa katika baadhi ya mawazo yanayohitaji marekebisho ya makala yote.

Mkakati wa CEPH

Kundi la CEPH linachanganya nambari ya kiholela K ya diski za ukubwa usio na mpangilio na huhifadhi data juu yao, ikinakili kila kipande (MB 4 kwa chaguo-msingi) nambari fulani N mara.

Hebu fikiria kesi rahisi zaidi na disks mbili zinazofanana. Kutoka kwao unaweza kukusanya RAID 1 au nguzo na N = 2 - matokeo yatakuwa sawa. Ikiwa kuna diski tatu na ni za ukubwa tofauti, basi ni rahisi kukusanya nguzo na N = 2: data zingine zitakuwa kwenye diski 1 na 2, zingine zitakuwa kwenye diski 1 na 3, na zingine zitakuwa. tarehe 2 na 3, wakati RAID haita (unaweza kukusanya RAID kama hiyo, lakini itakuwa upotovu). Ikiwa kuna diski zaidi, basi inawezekana kuunda RAID 5; CEPH ina analog - erasure_code, ambayo inapingana na dhana za awali za watengenezaji, na kwa hiyo hazizingatiwi. RAID 5 inadhani kuna idadi ndogo ya anatoa, zote ziko katika hali nzuri. Ikiwa moja itashindwa, wengine lazima washikilie hadi diski ibadilishwe na data irejeshwe kwake. CEPH, na N> = 3, inahimiza matumizi ya disks za zamani, hasa, ikiwa unaweka disks kadhaa nzuri kuhifadhi nakala moja ya data, na kuhifadhi nakala mbili au tatu zilizobaki kwenye idadi kubwa ya disks za zamani, basi habari itakuwa salama, kwani kwa sasa diski mpya ziko hai - hakuna shida, na ikiwa moja yao itavunjika, basi kutofaulu kwa wakati mmoja kwa diski tatu na maisha ya huduma ya zaidi ya miaka mitano, ikiwezekana kutoka kwa seva tofauti, haiwezekani sana. tukio.

Kuna ujanja wa usambazaji wa nakala. Kwa chaguo-msingi, inachukuliwa kuwa data imegawanywa katika vikundi zaidi vya usambazaji wa PG (~ 100 kwa kila diski), ambayo kila moja inarudiwa kwenye diski zingine. Wacha tuseme K = 6, N = 2, basi ikiwa diski zozote mbili zitashindwa, data imehakikishwa kupotea, kwani kulingana na nadharia ya uwezekano, kutakuwa na angalau PG moja ambayo itakuwa iko kwenye diski hizi mbili. Na upotezaji wa kikundi kimoja hufanya data yote kwenye bwawa isipatikane. Ikiwa diski zimegawanywa katika jozi tatu na data inaruhusiwa kuhifadhiwa tu kwenye diski ndani ya jozi moja, basi usambazaji huo pia unakabiliwa na kushindwa kwa diski yoyote, lakini ikiwa disks mbili zinashindwa, uwezekano wa kupoteza data sio. 100%, lakini 3/15 tu, na hata katika kesi ya kushindwa disks tatu - 12/20 tu. Kwa hivyo, entropy katika usambazaji wa data haichangia uvumilivu wa makosa. Pia kumbuka kuwa kwa seva ya faili, RAM ya bure huongeza kasi ya majibu. Kumbukumbu zaidi katika kila nodi, na kumbukumbu zaidi katika nodes zote, itakuwa kasi zaidi. Bila shaka hii ni faida ya nguzo juu ya seva moja na, hata zaidi, NAS ya vifaa, ambapo kiasi kidogo sana cha kumbukumbu kinajengwa.

Inafuata kwamba CEPH ni njia nzuri ya kuunda mfumo wa kuaminika wa kuhifadhi data kwa makumi ya TB na uwezo wa kuongeza na uwekezaji mdogo kutoka kwa vifaa vya zamani (hapa, bila shaka, gharama zitahitajika, lakini ndogo ikilinganishwa na mifumo ya kuhifadhi biashara).

Utekelezaji wa nguzo

Kwa jaribio, hebu tuchukue kompyuta iliyokataliwa ya Intel DQ57TM + Intel core i3 540 + 16 GB ya RAM. Tutapanga diski nne za TB 2 kuwa kitu kama RAID10, baada ya mtihani uliofanikiwa tutaongeza node ya pili na idadi sawa ya diski.

Inasakinisha Linux. Usambazaji unahitaji uwezo wa kubinafsisha na kuwa thabiti. Debian na Suse wanakidhi mahitaji. Suse ina kisakinishi rahisi zaidi ambacho hukuruhusu kuzima kifurushi chochote; Kwa bahati mbaya, sikuweza kujua ni zipi zinaweza kutupwa bila kuharibu mfumo. Sakinisha Debian kwa kutumia debootstrap buster. Chaguo la min-base husakinisha mfumo uliovunjika ambao hauna viendeshi. Tofauti ya ukubwa ikilinganishwa na toleo kamili sio kubwa sana ili kusumbua. Kwa kuwa kazi inafanywa kwenye mashine ya mwili, nataka kuchukua picha, kama kwenye mashine za kawaida. Chaguo hili hutolewa na LVM au btrfs (au xfs, au zfs - tofauti sio kubwa). Picha za LVM sio hatua kali. Weka btrfs. Na bootloader iko kwenye MBR. Hakuna maana katika kuunganisha diski ya MB 50 na kizigeu cha FAT wakati unaweza kuisukuma kwenye eneo la meza ya kizigeu cha MB 1 na kutenga nafasi yote ya mfumo. Ilichukua 700 MB kwenye diski. Sikumbuki ni kiasi gani cha usakinishaji wa msingi wa SUSE, nadhani ni kuhusu 1.1 au 1.4 GB.

Sakinisha CEPH. Tunapuuza toleo la 12 kwenye hazina ya debi na kuunganisha moja kwa moja kutoka kwa tovuti ya 15.2.3. Tunafuata maagizo kutoka kwa sehemu ya "Sakinisha CEPH wewe mwenyewe" na tahadhari zifuatazo:

  • Kabla ya kuunganisha hazina, lazima usakinishe vyeti vya gnupg wget ca
  • Baada ya kuunganisha hazina, lakini kabla ya kusakinisha nguzo, usakinishaji wa vifurushi umeachwa: apt -y --no-install-inapendekeza kusakinisha ceph-common ceph-mon ceph-osd ceph-mds ceph-mgr
  • Wakati wa kusakinisha CEPH, kwa sababu zisizojulikana, itajaribu kusakinisha lvm2. Kimsingi, sio huruma, lakini usakinishaji unashindwa, kwa hivyo CEPH haitasakinisha pia.

    Kichocheo hiki kilisaidia:

    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
    

Muhtasari wa nguzo

ceph-osd - inawajibika kwa kuhifadhi data kwenye diski. Kwa kila diski, huduma ya mtandao inazinduliwa ambayo inakubali na kutekeleza maombi ya kusoma au kuandika kwa vitu. Sehemu mbili zinaundwa kwenye diski. Mmoja wao ana habari kuhusu nguzo, nambari ya diski, na funguo za nguzo. Maelezo haya ya 1KB huundwa mara moja wakati wa kuongeza diski na haijawahi kuonekana kubadilika. Sehemu ya pili haina mfumo wa faili na huhifadhi data ya binary ya CEPH. Usakinishaji otomatiki katika matoleo ya awali uliunda kizigeu cha xfs cha 100MB kwa maelezo ya huduma. Nilibadilisha diski kuwa MBR na kutenga 16MB tu - huduma hailalamiki. Nadhani xfs zinaweza kubadilishwa na ext bila shida yoyote. Sehemu hii imewekwa ndani /var/lib/…, ambapo huduma husoma maelezo kuhusu OSD na pia hupata marejeleo ya kifaa cha kuzuia ambapo data ya binary huhifadhiwa. Kinadharia, unaweza kuweka faili za usaidizi mara moja /var/lib/…, na kutenga diski nzima kwa data. Wakati wa kuunda OSD kupitia ceph-deploy, sheria huundwa kiotomatiki kuweka kizigeu katika /var/lib/…, na mtumiaji wa ceph pia amepewa haki za kusoma kifaa cha kuzuia. Ikiwa utasanikisha kwa mikono, lazima ufanye hivi mwenyewe; hati hazisemi hivi. Pia ni vyema kutaja parameter ya lengo la kumbukumbu ya osd ili kuna kumbukumbu ya kutosha ya kimwili.

ceph-mds. Katika kiwango cha chini, CEPH ni hifadhi ya kitu. Uwezo wa kuzuia hifadhi unakuja chini ya kuhifadhi kila block ya 4MB kama kitu. Hifadhi ya faili hufanya kazi kwa kanuni sawa. Mabwawa mawili yanaundwa: moja kwa metadata, nyingine kwa data. Wao ni pamoja katika mfumo wa faili. Kwa wakati huu, aina fulani ya rekodi imeundwa, hivyo ikiwa utafuta mfumo wa faili, lakini uhifadhi mabwawa yote mawili, huwezi kurejesha. Kuna utaratibu wa kutoa faili kwa vizuizi, sijaijaribu. Huduma ya ceph-mds inawajibika kwa ufikiaji wa mfumo wa faili. Kila mfumo wa faili unahitaji mfano tofauti wa huduma. Kuna chaguo la "index", ambayo hukuruhusu kuunda sura ya mifumo kadhaa ya faili kwa moja - pia haijajaribiwa.

Ceph-mon - Huduma hii huhifadhi ramani ya nguzo. Inajumuisha habari kuhusu OSD zote, algorithm ya kusambaza PGs katika OSD na, muhimu zaidi, habari kuhusu vitu vyote (maelezo ya utaratibu huu si wazi kwangu: kuna saraka /var/lib/ceph/mon/.../ store.db, ina faili kubwa ni 26MB, na katika nguzo ya vitu 105K, inageuka kuwa zaidi ya ka 256 kwa kila kitu - nadhani mfuatiliaji huhifadhi orodha ya vitu vyote na PG ambayo zipo). Uharibifu wa saraka hii husababisha upotezaji wa data zote kwenye nguzo. Kwa hivyo hitimisho lilitolewa kuwa CRUSH inaonyesha jinsi PG ziko kwenye OSD, na jinsi vitu viko kwenye PGs - huhifadhiwa katikati mwa hifadhidata, haijalishi ni kiasi gani watengenezaji huepuka neno hili. Kama matokeo, kwanza, hatuwezi kusanikisha mfumo kwenye gari la flash katika hali ya RO, kwani hifadhidata inarekodiwa kila wakati, diski ya ziada inahitajika kwa hizi (karibu zaidi ya 1 GB), pili, ni muhimu kuwa na nakala katika muda halisi msingi huu. Ikiwa kuna wachunguzi kadhaa, basi uvumilivu wa makosa huhakikishwa moja kwa moja, lakini kwa upande wetu kuna mfuatiliaji mmoja tu, kiwango cha juu mbili. Kuna utaratibu wa kinadharia wa kurejesha mfuatiliaji kulingana na data ya OSD, niliitumia mara tatu kwa sababu tofauti, na mara tatu hakukuwa na ujumbe wa makosa, na pia hakuna data. Kwa bahati mbaya, utaratibu huu haufanyi kazi. Tunaweza kutumia kizigeu kidogo kwenye OSD na kukusanya RAID ili kuhifadhi hifadhidata, ambayo kwa hakika itakuwa na athari mbaya sana kwenye utendakazi, au tunatenga angalau midia ya kweli miwili inayotegemeka, ikiwezekana USB, ili tusichukue bandari.

rados-gw - husafirisha nje hifadhi ya kitu kupitia itifaki ya S3 na sawa. Inaunda mabwawa mengi, haijulikani kwa nini. Sikufanya majaribio mengi.

ceph-mgr - Wakati wa kufunga huduma hii, moduli kadhaa zinazinduliwa. Mmoja wao ni autoscale ambayo haiwezi kuzimwa. Inajitahidi kudumisha kiwango sahihi cha PG/OSD. Ikiwa ungependa kudhibiti uwiano wewe mwenyewe, unaweza kuzima kuongeza kwa kila kundi, lakini katika kesi hii moduli huacha kufanya kazi na mgawanyiko wa 0, na hali ya nguzo inakuwa ERROR. Moduli imeandikwa katika Python, na ikiwa unatoa maoni nje ya mstari muhimu ndani yake, hii inasababisha kulemazwa kwake. Wavivu sana kukumbuka maelezo.

Orodha ya vyanzo vilivyotumika:

Ufungaji wa CEPH
Ahueni kutoka kwa kushindwa kamili kwa kufuatilia

Orodha za hati:

Kufunga mfumo kupitia 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

Unda nguzo

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

Kuongeza OSD (sehemu)

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

Muhtasari

Faida kuu ya uuzaji ya CEPH ni CRUSH - algorithm ya kuhesabu eneo la data. Wachunguzi husambaza algoriti hii kwa wateja, baada ya hapo wateja wanaomba moja kwa moja nodi inayotakiwa na OSD inayotakiwa. CRUSH inahakikisha hakuna uwekaji kati. Ni faili ndogo ambayo unaweza hata kuchapisha na kuning'inia ukutani. Mazoezi yameonyesha kuwa CRUSH si ramani kamili. Ikiwa utaharibu na kuunda upya wachunguzi, kuweka OSD na CRUSH zote, basi hii haitoshi kurejesha nguzo. Kutokana na hili inahitimishwa kuwa kila mfuatiliaji huhifadhi baadhi ya metadata kuhusu nguzo nzima. Kiasi kidogo cha metadata hii haitoi vikwazo kwa ukubwa wa kikundi, lakini inahitaji kuhakikisha usalama wao, ambayo huondoa akiba ya disk kwa kufunga mfumo kwenye gari la flash na haijumuishi makundi yenye nodes chini ya tatu. Sera ya uchokozi ya msanidi programu kuhusu vipengele vya hiari. Mbali na minimalism. Nyaraka ziko katika kiwango cha "asante kwa kile tulicho nacho, lakini ni kidogo sana." Uwezo wa kuingiliana na huduma kwa kiwango cha chini hutolewa, lakini nyaraka zinagusa mada hii kwa juu juu sana, kwa hivyo kuna uwezekano mkubwa wa hapana kuliko ndiyo. Kwa kweli hakuna nafasi ya kurejesha data kutoka kwa hali ya dharura.

Chaguzi za hatua zaidi: acha CEPH na utumie btrfs za diski nyingi za banal (au xfs, zfs), pata habari mpya kuhusu CEPH, ambayo itakuruhusu kuitumia chini ya hali maalum, jaribu kuandika hifadhi yako mwenyewe kama kifaa cha hali ya juu. mafunzo.

Chanzo: mapenzi.com

Kuongeza maoni