Таҷрибаи кори CEPH

Вақте ки маълумоти бештар дар як диск мавҷуд аст, вақти он расидааст, ки дар бораи RAID фикр кунед. Дар айёми кӯдакӣ ман аз бузургсолони худ бисёр мешунавам: "Рӯзе RAID як чизи гузашта мешавад, нигаҳдории ашё ҷаҳонро пур мекунад ва шумо ҳатто намедонед, ки CEPH чист", бинобар ин аввалин чизест, ки дар ҳаёти мустақили ман ин буд. буд, ки кластери шахсии худро эҷод кунам. Максад аз тачриба шинос шудан бо сохти дохилии ceph ва фахмидани доираи татбики он буд. Татбиқи ceph дар корхонаҳои миёна ва хурд то чӣ андоза асоснок аст? Пас аз чанд соли фаъолият ва якчанд талафоти бебозгашти додаҳо, фаҳмиши нозукиҳо ба миён омад, ки на ҳама чиз оддӣ аст. Хусусиятҳои CEPH барои қабули васеъи он монеаҳо эҷод мекунанд ва аз ин рӯ, таҷрибаҳо ба як нуқтаи сарбаста расидаанд. Дар зер тавсифи тамоми чораҳои андешидашуда, натиҷаи бадастомада ва хулосаҳои баровардашуда оварда шудааст. Агар одамони донишманд аз тачрибаашон накл кунанд ва баъзе нуктахоро шарх диханд, миннатдо-рам.

Эзоҳ: Шарҳҳо дар баъзе фарзияҳо хатогиҳои ҷиддиро муайян кардаанд, ки таҷдиди тамоми мақоларо тақозо мекунанд.

Стратегияи CEPH

Кластери CEPH адади К-и дискҳои андозаи ихтиёриро муттаҳид мекунад ва маълумотро дар онҳо нигоҳ медорад ва ҳар як порчаро (бо пешфарз 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, истифодаи дискҳои кӯҳнаро ташвиқ мекунад, аз ҷумла, агар шумо якчанд дискҳои хубро барои нигоҳ доштани як нусхаи маълумот нигоҳ доред ва ду ё се нусхаи боқимондаро дар миқдори зиёди дискҳои кӯҳна нигоҳ доред, пас информатсия бехатар хоҳад буд, зеро ҳоло дискҳои нав зиндаанд - ҳеҷ мушкиле вуҷуд надорад ва агар яке аз онҳо шикаста шавад, дар як вақт корношоямии се диск бо мӯҳлати хидмати зиёда аз панҷ сол, беҳтараш аз серверҳои гуногун, хеле ғайриимкон аст. ҳодиса.

Дар тақсими нусхаҳо як нозукӣ вуҷуд дорад. Бо нобаёнӣ, тахмин карда мешавад, ки маълумот ба гурӯҳҳои тақсимоти PG бештар (~100 дар як диск) тақсим карда мешавад, ки ҳар кадоми онҳо дар баъзе дискҳо такрор карда мешаванд. Фарз мекунем, ки K=6, N=2, пас агар ягон ду диск кор накунад, гум шудани маълумот кафолат дода мешавад, зеро тибқи назарияи эҳтимолият, ҳадди аққал як PG мавҷуд аст, ки дар ин ду диск ҷойгир хоҳад шуд. Ва аз даст додани як гурӯҳ тамоми маълумотро дар ҳавз дастнорас месозад. Агар дискҳо ба се ҷуфт тақсим шаванд ва маълумот танҳо дар дискҳо дар дохили як ҷуфт нигоҳ дошта шавад, пас чунин тақсимот инчунин ба шикасти ягон диск тобовар аст, аммо агар ду диск кор накунад, эҳтимолияти гум шудани маълумот нест. 100%, аммо танҳо 3/15 ва ҳатто дар сурати нокомии се диск - танҳо 12/20. Аз ин рӯ, энтропия дар тақсимоти маълумот ба таҳаммулпазирии хато мусоидат намекунад. Инчунин қайд кунед, ки барои сервери файл, RAM-и ройгон суръати посухро ба таври назаррас афзоиш медиҳад. Чӣ қадаре ки хотираи ҳар як гиреҳ зиёд бошад ва хотираи бештар дар ҳама гиреҳҳо ҳамон қадар тезтар мешавад. Ин бешубҳа бартарии кластер нисбат ба як сервер ва ҳатто бештар аз он, сахтафзори NAS мебошад, ки дар он миқдори хеле ками хотира сохта шудааст.

Аз ин бармеояд, ки CEPH як роҳи хуби эҷоди як системаи боэътимоди нигоҳдории маълумот барои даҳҳо бемории сил бо қобилияти миқёс кардан бо сармоягузории ҳадди ақал аз таҷҳизоти кӯҳна мебошад (дар ин ҷо, албатта, хароҷот талаб карда мешавад, аммо дар муқоиса бо системаҳои нигоҳдории тиҷоратӣ хурд).

Амалисозии кластер

Барои таҷриба, биёед як компютери аз кор баровардашуда Intel DQ57TM + Intel core i3 540 + 16 ГБ хотираи оперативӣ гирем. Мо чор диски 2 TB-ро ба монанди RAID10 ташкил мекунем, пас аз санҷиши бомуваффақият мо гиреҳи дуюм ва ҳамон миқдори дискҳоро илова мекунем.

Насб кардани Linux. Тақсим қобилияти мутобиқсозӣ ва устуворро талаб мекунад. Debian ва Suse ба талабот ҷавобгӯ мебошанд. Suse дорои як насбкунандаи фасеҳтар аст, ки ба шумо имкон медиҳад ҳама гуна бастаҳоро хомӯш кунед; Мутаассифона, ман фаҳмида наметавонистам, ки кадоме аз онҳоро бе зарар ба система партофтан мумкин аст. Debian-ро бо истифода аз debootstrap buster насб кунед. Опсияи min-base системаи шикастаеро насб мекунад, ки драйверҳо надоранд. Тафовут дар андоза дар муқоиса бо версияи пурра он қадар калон нест, ки ба ташвиш ояд. Азбаски кор дар мошини физикӣ анҷом дода мешавад, ман мехоҳам аксҳоро ба мисли мошинҳои виртуалӣ гирам. Ин хосият аз ҷониби LVM ё btrfs таъмин карда мешавад (ё xfs, ё zfs - фарқият калон нест). Суратҳои LVM нуқтаи қавӣ нестанд. btrfs насб кунед. Ва пурборкунанда дар MBR аст. Ҳангоми бесарусомонӣ кардани диски 50 МБ бо қисмати FAT ҳеҷ маъно надорад, вақте ки шумо метавонед онро ба майдони ҷадвали тақсимоти 1 МБ тела диҳед ва тамоми ҷойро барои система ҷудо кунед. Дар диск 700 МБ гирифт. Ман дар ёд надорам, ки насби асосии SUSE чӣ қадар аст, ман фикр мекунам он тақрибан 1.1 ё 1.4 ГБ аст.

CEPH насб кунед. Мо версияи 12-ро дар анбори debian нодида мегирем ва мустақиман аз сайти 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/… насб карда шудааст, ки дар он хидмат маълумотро дар бораи OSD мехонад ва инчунин истинод ба дастгоҳи блоке, ки дар он маълумоти дуӣ нигоҳ дошта мешавад, пайдо мекунад. Аз ҷиҳати назариявӣ, шумо метавонед фавран файлҳои ёрирасонро дар /var/lib/… ҷойгир кунед ва тамоми дискро барои маълумот ҷудо кунед. Ҳангоми сохтани OSD тавассути ceph-deploy, қоида ба таври худкор барои насб кардани қисмат дар /var/lib/… эҷод карда мешавад ва ба корбари ceph инчунин ҳуқуқҳои хондани дастгоҳи блоки дилхоҳ дода мешавад. Агар шумо дастӣ насб кунед, шумо бояд ин корро худатон анҷом диҳед; ҳуҷҷатҳо инро намегӯянд. Инчунин тавсия дода мешавад, ки параметри ҳадафи хотираи osd-ро муайян кунед, то хотираи ҷисмонӣ кофӣ бошад.

ceph-мдс. Дар сатҳи паст, CEPH нигаҳдории объект аст. Қобилияти бастани нигаҳдорӣ ба нигоҳ доштани ҳар як блоки 4МБ ҳамчун объект рост меояд. Нигоҳдории файл аз рӯи ҳамин принсип кор мекунад. Ду ҳавзҳо сохта шудаанд: яке барои метамаълумот, дигаре барои маълумот. Онҳо ба системаи файлӣ муттаҳид карда мешаванд. Дар айни замон, як намуди сабт эҷод карда мешавад, бинобар ин, агар шумо системаи файлиро нест кунед, аммо ҳарду ҳавзро нигоҳ доред, шумо онро барқарор карда наметавонед. Тартиби истихроҷи файлҳо аз рӯи блокҳо вуҷуд дорад, ман онро санҷидаам. Хидмати ceph-mds барои дастрасӣ ба системаи файлӣ масъул аст. Ҳар як системаи файлӣ намунаи алоҳидаи хидматро талаб мекунад. Варианти "индекс" мавҷуд аст, ки ба шумо имкон медиҳад шабоҳати якчанд системаи файлиро дар як эҷод кунед - инчунин санҷида нашудааст.

Ceph-mon - Ин хидмат харитаи кластерро нигоҳ медорад. Он маълумотро дар бораи ҳама OSD-ҳо, алгоритми паҳн кардани PG-ҳо дар OSD-ҳо ва муҳимтар аз ҳама, маълумот дар бораи ҳама объектҳоро дар бар мегирад (тафсилоти ин механизм барои ман равшан нест: феҳристи /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
Барқароршавӣ аз нокомии пурраи монитор

Рӯйхати скриптҳо:

Насб кардани система тавассути debotstrap

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 пайдо кунед, ки ба шумо имкон медиҳад, ки онро дар шароити муқарраршуда кор кунед, кӯшиш кунед, ки захираи шахсии худро ҳамчун файли пешрафта нависед. таълим.

Манбаъ: will.com

Илова Эзоҳ