CEPH менен тажрыйба

Бир дискке туура келгенден көп маалымат болгондо, RAID жөнүндө ойлонууга убакыт келди. Бала кезимде мен улууларымдан: “Бир күнү RAID өткөн нерсеге айланат, объекттерди сактоо дүйнөнү каптап кетет, а сен CEPH эмне экенин билбейсиң” деп көп укчумун, ошондуктан көз карандысыз жашоодо биринчи нерсе өзүңүздүн кластериңизди түзүп жаткан. Эксперименттин максаты 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 бөлүштүрүүчү топторго бөлүнгөн деп болжолдонот, алардын ар бири кээ бир дисктерде кайталанат. К=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 бустер аркылуу Debian орнотуңуз. Мин-база параметри драйверлери жок иштебеген системаны орнотот. Толук версияга салыштырмалуу өлчөмүнүн айырмасы анчалык деле чоң эмес. Иш физикалык машинада жасалып жаткандыктан, виртуалдык машиналардагыдай эле көз ирмемдерди тарткым келет. Мындай мүмкүнчүлүктү LVM же btrfs (же xfs, же zfs - айырмасы чоң эмес) берет. Сүрөттөр LVMдин күчү эмес. btrfs орнотуу. Жана жүктөгүч MBRде. 50 МБ дискти FAT бөлүмү менен жаап коюунун мааниси жок, качан сиз аны 1 МБ бөлүү таблицасына түртүп, система үчүн бардык мейкиндикти бөлүп бере аласыз. Бул дискте 700 Мб алды. SUSEнин базалык орнотуусу канчага ээ - эсимде жок, болжол менен 1.1 же 1.4 ГБ.

CEPH орнотуу. Дебиан репозиторийиндеги 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 бинардык маалыматтарын сактайт. Мурунку версияларда автоматтык орнотуу кызмат маалыматы үчүн 100MB xfs бөлүмүн түздү. Мен дискти MBRге өзгөртүп, болгону 16 МБ бөлдүм - кызмат нааразы эмес. Менимче, көйгөйсүз, xfs ext менен алмаштырылышы мүмкүн. Бул бөлүм /var/lib/… ичинде орнотулган, анда кызмат OSD жөнүндө маалыматты окуйт, ошондой эле бинардык маалыматтар сакталган блоктук түзүлүшкө шилтеме табат. Теориялык жактан алганда, сиз дароо эле / 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МБ жана 105К объектилердин кластеринде, ал бир объектке 256 байттан бир аз ашат - менимче, монитор бардык объекттердин жана PGнын тизмесин сактайт. алар калп айтышат). Бул каталогдун бузулушу кластердеги бардык маалыматтардын жоголушуна алып келет. Бул жерден CRUSH PG'лердин OSD боюнча кантип жайгашканын жана PG боюнча объекттер кандайча жайгашканын көрсөтөт - иштеп чыгуучулар бул сөздөн кантип качса дагы, алар маалымат базасында борборлоштурулуп сакталат деген тыянакка келди. Натыйжада, биринчиден, системаны RO режиминде флэш-дискке орното албайбыз, анткени маалымат базасы тынымсыз жазылып тургандыктан, булар үчүн кошумча диск керектелет (1 ГБ ашык эмес), экинчиден, бул керек реалдуу убакытта бул базаны көчүрүү. Эгерде бир нече мониторлор бар болсо, анда ката толеранттуулук автоматтык түрдө камсыз кылынат, бирок биздин учурда бир гана монитор бар, максимум эки. OSD маалыматтарынын негизинде мониторду калыбына келтирүүнүн теориялык жол-жобосу бар, мен ага ар кандай себептерден улам үч жолу кайрылдым, үч жолу ката билдирүүлөрү, ошондой эле маалыматтар жок. Тилекке каршы, бул механизм иштебейт. Же биз OSD миниатюралык бөлүгүн иштетебиз жана маалымат базасын сактоо үчүн RAIDди чогултабыз, бул иштин иштешине өтө жаман таасирин тийгизиши мүмкүн, же порттор ээлебеши үчүн, жок дегенде, эки ишенимдүү физикалык медианы, эң жакшысы USB бөлүп беребиз.

rados-gw - S3 протоколун жана ушул сыяктууларды колдонуу менен объект сактагычты экспорттойт. Көптөгөн бассейндерди жаратат, эмне үчүн экени белгисиз. Чынында эксперимент кылган эмес.

ceph-mgr - Бул кызматты орнотуу бир нече модулдарды баштайт. Алардын бири - өчүрүлбөгөн автошкала. Ал PG/OSDлердин туура санын сактоого умтулат. Эгерде сиз катышты кол менен көзөмөлдөгүңүз келсе, анда ар бир бассейн үчүн масштабдоону өчүрө аласыз, бирок бул учурда модул 0гө бөлүнүү менен түшөт, ал эми кластердин статусу ERROR болуп калат. Модуль питондо жазылган жана андагы керектүү сапты түшүндүрүп берсеңиз, бул анын өчүрүлүшүнө алып келет. Деталдарды эстеп калууга өтө жалкоо.

Колдонулган булактардын тизмеси:

CEPH орнотуу
Толук монитор иштебей калгандан кийин калыбына келтирүү

Скрипт тизмеси:

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

Кластер түзүү

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 жөнүндө жаңы маалыматты үйрөнүңүз, бул сизге аны көрсөтүлгөн шарттарда иштетүүгө мүмкүндүк берет, өзүңүздүн сактагычыңызды өркүндөтүлгөн тренинг катары жазууга аракет кылыңыз. .

Source: www.habr.com

Комментарий кошуу