CEPH тәжірибесі

Бір дискіге сыймайтын деректерден көп болса, RAID туралы ойланатын кез келді. Бала кезімде мен үлкендерімнен: «Бір күні RAID өткен нәрсе болады, объектілерді сақтау әлемді толтырады, ал сіз CEPH дегеннің не екенін білмейсіз» деп жиі еститінмін, сондықтан менің тәуелсіз өмірімде бірінші нәрсе. өз кластерімді құру болды. Эксперименттің мақсаты – цефтің ішкі құрылысымен танысу және оның қолданылу аясын түсіну. Орта және шағын бизнесте ceph енгізу қаншалықты негізделген? Бірнеше жыл жұмыс істегеннен кейін және деректердің қайтымсыз жоғалуынан кейін, бәрі оңай емес екенін түсіну қиын болды. CEPH ерекшеліктері оның кең таралуына кедергілер тудырады және солардың арқасында эксперименттер тұйыққа тірелді. Төменде барлық қабылданған қадамдардың сипаттамасы, алынған нәтиже және жасалған қорытындылар берілген. Білгірлер тәжірибелерімен бөлісіп, кейбір тұстарын түсіндіріп жатса, риза боламын.

Ескерту: Пікір қалдырушылар мақаланы толығымен қайта қарауды талап ететін кейбір болжамдарда елеулі қателерді анықтады.

CEPH стратегиясы

CEPH кластері ерікті өлшемдегі дискілердің еркін санын K біріктіреді және оларда деректерді сақтайды, әрбір бөлікті (әдепкі бойынша 4 МБ) берілген санды N рет қайталайды.

Екі бірдей дискі бар қарапайым жағдайды қарастырайық. Олардың ішінен RAID 1 немесе N=2 кластерін жинауға болады – нәтиже бірдей болады. Егер үш диск болса және олардың өлшемдері әртүрлі болса, онда N=2 болатын кластерді құрастыру оңай: мәліметтердің бір бөлігі 1 және 2 дискілерде болады, кейбіреулері 1 және 3 дискілерде болады, ал кейбіреулері 2 және 3-де, ал RAID болмайды (мұндай RAID құрастыруға болады, бірақ бұл бұрмалау болар еді). Егер одан да көп дискілер болса, онда RAID 5 құруға болады; CEPH аналогы бар - erasure_code, ол әзірлеушілердің алғашқы тұжырымдамаларына қайшы келеді, сондықтан қарастырылмайды. RAID 5 дискілердің аз саны бар деп есептейді, олардың барлығы жақсы жағдайда. Біреуі сәтсіз болса, басқалары диск ауыстырылғанша және оған деректер қалпына келтірілгенше тұруы керек. CEPH, N>=3, ескі дискілерді пайдалануды ынталандырады, атап айтқанда, деректердің бір көшірмесін сақтау үшін бірнеше жақсы дискілерді сақтасаңыз, ал қалған екі немесе үш көшірмені ескі дискілердің үлкен санында сақтасаңыз, онда ақпарат қауіпсіз болады, өйткені әзірге жаңа дискілер тірі - ешқандай проблемалар жоқ және егер олардың біреуі бұзылса, қызмет ету мерзімі бес жылдан асатын үш дискінің бір уақытта істен шығуы, жақсырақ әртүрлі серверлерден, өте екіталай. оқиға.

Көшірмелерді таратуда нәзіктік бар. Әдепкі бойынша, деректердің әрқайсысы кейбір дискілерде қайталанатын көбірек (әр дискіге ~ 100) PG тарату топтарына бөлінгені болжанады. Айталық, K=6, N=2, егер кез келген екі диск істен шыққан болса, деректердің жоғалуына кепілдік беріледі, өйткені ықтималдық теориясына сәйкес, осы екі дискіде орналасқан кем дегенде бір PG болады. Ал бір топтың жоғалуы пулдағы барлық деректерді қолжетімсіз етеді. Егер дискілер үш жұпқа бөлінсе және деректерді тек бір жұптың ішінде дискілерде сақтауға рұқсат етілсе, онда мұндай тарату кез келген бір дискінің істен шығуына да төзімді, бірақ екі диск істен шыққан болса, деректердің жоғалу ықтималдығы болмайды. 100%, бірақ тек 3/15, тіпті істен шыққан жағдайда үш дискі - тек 12/20. Демек, деректерді таратудағы энтропия ақауларға төзімділікке ықпал етпейді. Сондай-ақ, файлдық сервер үшін бос ЖЖҚ жауап беру жылдамдығын айтарлықтай арттыратынын ескеріңіз. Әрбір түйінде неғұрлым көп жады және барлық түйіндерде неғұрлым көп жады болса, соғұрлым ол жылдамырақ болады. Бұл, сөзсіз, кластердің бір серверден артықшылығы және одан да көп жадтың өте аз көлемі салынған аппараттық NAS.

Бұдан шығатыны, CEPH - ескірген жабдықтан минималды инвестициямен масштабтау мүмкіндігі бар ондаған ТБ үшін сенімді деректерді сақтау жүйесін құрудың жақсы тәсілі (бұл жерде, әрине, шығындар қажет болады, бірақ коммерциялық сақтау жүйелерімен салыстырғанда аз).

Кластерді жүзеге асыру

Эксперимент үшін пайдаланудан шығарылған компьютер Intel DQ57TM + Intel core i3 540 + 16 ГБ жедел жады алайық. Біз төрт 2 ТБ дискіні RAID10 сияқты бір нәрсеге ұйымдастырамыз, сәтті сынақтан кейін біз екінші түйінді және дискілердің бірдей санын қосамыз.

Linux орнату. Тарату теңшеу және тұрақты болу мүмкіндігін талап етеді. Debian және Suse талаптарға сай. Suse-де кез келген буманы өшіруге мүмкіндік беретін икемді орнатушы бар; Өкінішке орай, жүйеге зиян келтірмей, қайсысын лақтыруға болатынын анықтай алмадым. Debootstrap Buster көмегімен Debian орнатыңыз. Мин-база опциясы драйверлері жоқ бұзылған жүйені орнатады. Толық нұсқамен салыстырғанда өлшемдегі айырмашылық алаңдататындай үлкен емес. Жұмыс физикалық машинада орындалатындықтан, виртуалды машиналардағы сияқты суретке түсіргім келеді. Бұл опцияны LVM немесе btrfs (немесе xfs немесе zfs - айырмашылық үлкен емес) қамтамасыз етеді. LVM суреттері күшті нүкте емес. btrfs орнатыңыз. Ал жүктеуші MBR-де. 50 МБ дискіні FAT бөлімімен шатастырудың қажеті жоқ, егер сіз оны 1 Мбайт бөлім кесте аймағына итеріп, жүйе үшін барлық орынды бөле аласыз. Дискіде 700 МБ орын алды. Негізгі SUSE орнатуының көлемі қанша екені есімде жоқ, менің ойымша, бұл шамамен 1.1 немесе 1.4 ГБ.

CEPH орнатыңыз. Біз debian репозиторийінде 12 нұсқасын елемейміз және 15.2.3 сайтынан тікелей қосыламыз. Біз келесі ескертулермен «CEPH қолмен орнату» бөліміндегі нұсқауларды орындаймыз:

  • Репозиторийді қоспас бұрын, gnupg wget ca-сертификаттарын орнату керек
  • Репозиторийді қосқаннан кейін, бірақ кластерді орнатпас бұрын, пакеттерді орнату өткізілмейді: apt -y --no-install-recommends install ceph-common ceph-mon ceph-osd ceph-mds ceph-mgr
  • CEPH орнату кезінде белгісіз себептермен ол lvm2 орнатуға тырысады. Негізінде, бұл өкінішті емес, бірақ орнату сәтсіз аяқталды, сондықтан CEPH де орнатылмайды.

    Бұл патч көмектесті:

    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
    

Кластерге шолу

ceph-osd - дискідегі деректерді сақтауға жауап береді. Әрбір диск үшін объектілерді оқу немесе жазу сұраныстарын қабылдайтын және орындайтын желі қызметі іске қосылады. Дискіде екі бөлім жасалады. Олардың бірінде кластер, диск нөмірі және кластердің кілттері туралы ақпарат бар. Бұл 1 КБ ақпарат дискіні қосқанда бір рет жасалады және ешқашан өзгергені байқалмады. Екінші бөлімде файлдық жүйе жоқ және CEPH екілік деректерін сақтайды. Алдыңғы нұсқалардағы автоматты орнату қызмет туралы ақпарат үшін 100 МБ xfs бөлімін жасады. Мен дискіні MBR-ге түрлендірдім және тек 16 МБ бөлдім - қызмет шағымданбайды. Менің ойымша, xfs ешбір қиындықсыз ext-пен ауыстырылуы мүмкін. Бұл бөлім /var/lib/… ішінде орнатылған, мұнда қызмет экрандық дискі туралы ақпаратты оқиды және екілік деректер сақталатын блоктық құрылғыға сілтеме табады. Теориялық тұрғыдан сіз /var/lib/… ішіне көмекші файлдарды дереу орналастыра аласыз және деректер үшін бүкіл дискіні бөле аласыз. ceph-deploy арқылы OSD жасау кезінде /var/lib/… ішінде бөлімді орнату үшін ереже автоматты түрде жасалады және ceph пайдаланушысына қалаған блок құрылғысын оқу құқығы да тағайындалады. Қолмен орнатсаңыз, мұны өзіңіз жасауыңыз керек, құжатта бұл туралы айтылмайды. Сондай-ақ, физикалық жад жеткілікті болуы үшін osd жады мақсатты параметрін көрсеткен жөн.

ceph-mds. Төмен деңгейде CEPH нысанды сақтау болып табылады. Жадты блоктау мүмкіндігі әрбір 4МБ блокты нысан ретінде сақтауға байланысты. Файлдарды сақтау бірдей принцип бойынша жұмыс істейді. Екі пул құрылады: біреуі метадеректер үшін, екіншісі деректер үшін. Олар файлдық жүйеге біріктірілген. Қазіргі уақытта жазбаның қандай да бір түрі жасалады, сондықтан файлдық жүйені жойсаңыз, бірақ екі пулды да сақтасаңыз, оны қалпына келтіре алмайсыз. Файлдарды блоктар бойынша шығару процедурасы бар, мен оны тексерген жоқпын. ceph-mds қызметі файлдық жүйеге кіруге жауапты. Әрбір файлдық жүйе қызметтің жеке данасын қажет етеді. Бірнеше файлдық жүйелердің ұқсастығын біреуінде жасауға мүмкіндік беретін «индекс» опциясы бар - сонымен қатар тексерілмеген.

Ceph-mon - Бұл қызмет кластердің картасын сақтайды. Ол барлық OSD-лер туралы ақпаратты, OSD-де PG тарату алгоритмін және ең бастысы, барлық объектілер туралы ақпаратты қамтиды (бұл механизмнің егжей-тегжейлері маған түсініксіз: /var/lib/ceph/mon/…/ каталогы бар. store.db, ол үлкен файлды қамтиды 26 МБ, және 105K нысандар кластерінде ол бір нысанға 256 байттан сәл артық болып шығады - менің ойымша, монитор барлық нысандардың және PG файлдарының тізімін сақтайды. олар орналасқан). Бұл каталогтың зақымдануы кластердегі барлық деректердің жоғалуына әкеледі. Осылайша, CRUSH PG-нің OSD-де қалай орналасқанын және нысандардың PG-де қалай орналасқанын көрсетеді - әзірлеушілер бұл сөзден қаншалықты аулақ болса да, олар деректер базасында орталықтандырылған түрде сақталады деген қорытынды жасалды. Нәтижесінде, біріншіден, біз жүйені флэш-дискке RO режимінде орната алмаймыз, өйткені деректер базасы үнемі жазылатындықтан, олар үшін қосымша диск қажет (1 ГБ-тан көп емес), екіншіден, осы базаны нақты уақытта көшіріңіз. Егер бірнеше монитор болса, онда ақауларға төзімділік автоматты түрде қамтамасыз етіледі, бірақ біздің жағдайда бір ғана монитор бар, ең көбі екі. OSD деректеріне негізделген мониторды қалпына келтірудің теориялық процедурасы бар, мен оған әртүрлі себептермен үш рет жүгіндім, үш рет қате туралы хабарлар, сондай-ақ деректер болмады. Өкінішке орай, бұл механизм жұмыс істемейді. Немесе біз OSD-де миниатюралық бөлімді басқарамыз және дерекқорды сақтау үшін RAID жинаймыз, бұл өнімділікке өте нашар әсер етеді немесе порттарды басып алмау үшін кем дегенде екі сенімді физикалық медиа, жақсырақ USB бөлеміз.

rados-gw - S3 хаттамасы арқылы нысанды сақтауды экспорттайды және ұқсас. Көптеген бассейндер жасайды, неге екені белгісіз. Мен көп тәжірибе жасаған жоқпын.

ceph-mgr - Бұл қызметті орнату кезінде бірнеше модульдер іске қосылады. Олардың бірі өшірілмейтін автомасштаб. Ол PG/OSD дұрыс мөлшерін сақтауға тырысады. Егер арақатынасты қолмен басқарғыңыз келсе, әрбір пул үшін масштабтауды өшіруге болады, бірақ бұл жағдайда модуль 0-ге бөлінуімен бұзылады және кластер күйі ҚАТЕ болады. Модуль Python тілінде жазылған және ондағы қажетті жолды түсіндірсеңіз, бұл оның өшірілуіне әкеледі. Мәліметтерді есте сақтауға тым жалқау.

Пайдаланылған көздер тізімі:

CEPH орнату
Монитордың толық ақаулығынан қалпына келтіру

Сценарий тізімдері:

Жүйені debbootstrap арқылы орнату

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

Кластер құру

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 қосу (бөлік)

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

Резюме

CEPH негізгі маркетингтік артықшылығы - CRUSH - деректердің орналасуын есептеу алгоритмі. Мониторлар бұл алгоритмді клиенттерге таратады, содан кейін клиенттер қажетті түйінді және қажетті OSD-ны тікелей сұрайды. CRUSH орталықтандырудың жоқтығын қамтамасыз етеді. Бұл тіпті басып шығарып, қабырғаға іліп қоюға болатын шағын файл. Практика CRUSH толық карта емес екенін көрсетті. Барлық OSD және CRUSH сақтай отырып, мониторларды жойып, қайта жасасаңыз, кластерді қалпына келтіру үшін бұл жеткіліксіз. Бұдан әрбір монитор бүкіл кластер туралы кейбір метадеректерді сақтайды деген қорытындыға келеді. Бұл метадеректердің аз мөлшері кластердің өлшеміне шектеулер қоймайды, бірақ олардың қауіпсіздігін қамтамасыз етуді талап етеді, бұл жүйені флэш-дискке орнату арқылы дискіні үнемдеуді болдырмайды және үш түйіннен аз кластерлерді жоққа шығарады. Қосымша мүмкіндіктерге қатысты әзірлеушінің агрессивті саясаты. Минимализмнен алыс. Құжаттама «бізде бар нәрсе үшін рахмет, бірақ бұл өте, өте аз» деңгейінде. Төмен деңгейде қызметтермен өзара әрекеттесу мүмкіндігі қамтамасыз етілген, бірақ құжаттама бұл тақырыпты тым үстірт қозғайды, сондықтан «иә» дегеннен гөрі «жоқ» болуы мүмкін. Төтенше жағдайдан деректерді қалпына келтіру мүмкіндігі іс жүзінде жоқ.

Әрі қарай әрекет ету опциялары: CEPH-тен бас тартыңыз және банальды көп дискілік btrfs (немесе xfs, zfs) пайдаланыңыз, CEPH туралы жаңа ақпаратты табыңыз, бұл сізге оны көрсетілген шарттарда басқаруға мүмкіндік береді, өзіңіздің жадыңызды кеңейтілген диск ретінде жазуға тырысыңыз. жаттығу.

Ақпарат көзі: www.habr.com

пікір қалдыру