CEPH ilə təcrübə

Bir diskə sığacaqdan daha çox məlumat olduqda, RAID haqqında düşünməyin vaxtı gəldi. Uşaq vaxtı böyüklərimdən tez-tez eşidirdim: “bir gün RAID keçmişdə qalacaq, obyektlərin saxlanması dünyanı dolduracaq və siz CEPH-nin nə olduğunu belə bilmirsiniz”, buna görə də müstəqil həyatımda ilk şey öz klasterimi yaratmaq idi. Təcrübənin məqsədi cephin daxili quruluşu ilə tanış olmaq və onun tətbiq dairəsini anlamaq idi. Orta və kiçik müəssisələrdə cephin tətbiqi nə dərəcədə əsaslıdır? Bir neçə illik əməliyyatdan və bir neçə geri dönməz məlumat itkisindən sonra, hər şeyin o qədər də sadə olmadığını başa düşmək yarandı. CEPH-nin özəllikləri onun geniş yayılmasına maneələr yaradır və buna görə də təcrübələr dalana dirənib. Aşağıda atılan bütün addımların, əldə edilən nəticənin və çıxarılan nəticələrin təsviri verilmişdir. Bilikli insanlar təcrübələrini bölüşsələr və bəzi məqamları izah etsələr, minnətdar olaram.

Qeyd: Şərhçilər bütün məqaləyə yenidən baxılmasını tələb edən bəzi fərziyyələrdə ciddi səhvlər aşkar ediblər.

CEPH Strategiyası

CEPH klasteri ixtiyari sayda K ixtiyari ölçülü diskləri birləşdirir və onlarda məlumatları saxlayır, hər bir parçanı (standart olaraq 4 MB) verilmiş sayda N dəfə təkrarlayır.

İki eyni disklə ən sadə işi nəzərdən keçirək. Onlardan ya RAID 1, ya da N=2 olan klaster yığa bilərsiniz - nəticə eyni olacaq. Əgər üç disk varsa və onlar müxtəlif ölçülüdürsə, onda N=2 olan klasteri yığmaq asandır: verilənlərin bir hissəsi 1 və 2-ci disklərdə, bəziləri 1 və 3-cü disklərdə, bəziləri isə 2 və 3-də, RAID isə olmayacaq (siz belə bir RAID yığa bilərsiniz, lakin bu, təhrif olardı). Əgər daha çox disk varsa, onda RAID 5 yaratmaq mümkündür; CEPH-in analoqu var - erasure_code, tərtibatçıların erkən konsepsiyalarına ziddir və buna görə də nəzərə alınmır. RAID 5, hamısı yaxşı vəziyyətdə olan az sayda sürücünün olduğunu güman edir. Biri uğursuz olarsa, digərləri disk dəyişdirilənə və məlumat ona bərpa olunana qədər dayanmalıdır. CEPH, N>=3 ilə köhnə disklərdən istifadəni təşviq edir, xüsusən məlumatların bir nüsxəsini saxlamaq üçün bir neçə yaxşı disk saxlayırsınızsa və qalan iki və ya üç nüsxəni çox sayda köhnə disklərdə saxlayırsınızsa, o zaman məlumat təhlükəsiz olacaq, çünki indiyə qədər yeni disklər canlıdır - heç bir problem yoxdur və onlardan biri xarab olarsa, xidmət müddəti beş ildən çox olan üç diskin, tercihen fərqli serverlərdən eyni vaxtda sıradan çıxması çox az ehtimal olunur. hadisə.

Nüsxələrin yayılmasında bir incəlik var. Varsayılan olaraq, verilənlərin hər biri bəzi disklərdə təkrarlanan daha çox (hər diskə ~ 100) PG paylama qruplarına bölündüyü güman edilir. Tutaq ki, K=6, N=2, onda hər hansı iki disk uğursuz olarsa, məlumatların itirilməsinə zəmanət verilir, çünki ehtimal nəzəriyyəsinə görə, bu iki diskdə yerləşəcək ən azı bir PG olacaq. Və bir qrupun itirilməsi hovuzdakı bütün məlumatları əlçatmaz edir. Disklər üç cütə bölünürsə və məlumatların yalnız bir cüt daxilində disklərdə saxlanmasına icazə verilirsə, belə bir paylama hər hansı bir diskin sıradan çıxmasına da davamlıdır, lakin iki disk uğursuz olarsa, məlumat itkisi ehtimalı deyil. 100%, lakin yalnız 3/15, hətta uğursuzluq halında üç disk - yalnız 12/20. Beləliklə, məlumatların paylanmasındakı entropiya səhvlərə dözümlülüyünə kömək etmir. Onu da qeyd edək ki, fayl serveri üçün pulsuz RAM cavab sürətini əhəmiyyətli dərəcədə artırır. Hər qovşaqda nə qədər çox yaddaş və bütün qovşaqlarda nə qədər çox yaddaş olarsa, bir o qədər sürətli olar. Bu, şübhəsiz ki, bir klasterin tək bir server və daha çox, çox az miqdarda yaddaşın qurulduğu hardware NAS üzərindəki üstünlüyüdür.

Buradan belə nəticə çıxır ki, CEPH köhnəlmiş avadanlıqdan minimal sərmayə ilə miqyas almaq qabiliyyəti ilə onlarla TB üçün etibarlı məlumat saxlama sistemi yaratmaq üçün yaxşı bir yoldur (burada, əlbəttə ki, xərclər tələb olunacaq, lakin kommersiya saxlama sistemləri ilə müqayisədə kiçikdir).

Klasterin həyata keçirilməsi

Təcrübə üçün istismardan çıxarılan Intel DQ57TM + Intel core i3 540 + 16 GB operativ yaddaşı götürək. Dörd 2 TB diski RAID10 kimi bir şeyə təşkil edəcəyik, uğurlu sınaqdan sonra ikinci bir node və eyni sayda disk əlavə edəcəyik.

Linux quraşdırılması. Dağıtım fərdiləşdirmək və sabit olmaq qabiliyyətini tələb edir. Debian və Suse tələblərə cavab verir. Suse istənilən paketi söndürməyə imkan verən daha çevik quraşdırıcıya malikdir; Təəssüf ki, sistemə zərər vermədən hansının atılacağını anlaya bilmədim. Debootstrap buster istifadə edərək Debian quraşdırın. Minimum baza seçimi, sürücüləri olmayan sınıq sistemi quraşdırır. Tam versiya ilə müqayisədə ölçü fərqi narahat edəcək qədər böyük deyil. İş fiziki maşında aparıldığı üçün virtual maşınlarda olduğu kimi anlıq görüntülər çəkmək istəyirəm. Bu seçim ya LVM, ya da btrfs (yaxud xfs, ya da zfs - fərq böyük deyil) tərəfindən təmin edilir. LVM snapshotları güclü nöqtə deyil. btrfs quraşdırın. Və yükləyici MBR-dədir. 50 MB diski FAT bölməsi ilə qarışdırmağın heç bir mənası yoxdur, onu 1 MB bölmə masası sahəsinə itələyə və sistem üçün bütün yerləri ayıra bilərsiniz. Diskdə 700 MB yer tutdu. Əsas SUSE quraşdırmasının nə qədər olduğunu xatırlamıram, düşünürəm ki, bu, təxminən 1.1 və ya 1.4 GB-dır.

CEPH quraşdırın. Debian deposunda 12-ci versiyaya məhəl qoymuruq və birbaşa 15.2.3 saytından qoşuluruq. Aşağıdakı xəbərdarlıqlarla "CEPH-i əl ilə quraşdırın" bölməsindəki təlimatlara əməl edirik:

  • Repozitoriyaya qoşulmazdan əvvəl gnupg wget ca-sertifikatlarını quraşdırmalısınız
  • Anbarı birləşdirdikdən sonra, lakin klasteri quraşdırmadan əvvəl paketlərin quraşdırılması buraxılır: apt -y --no-install-recommends install ceph-common ceph-mon ceph-osd ceph-mds ceph-mgr
  • CEPH quraşdırarkən naməlum səbəblərdən o, lvm2-ni quraşdırmağa çalışacaq. Prinsipcə, təəssüf ki, quraşdırma uğursuz oldu, buna görə də CEPH də quraşdırılmayacaq.

    Bu yamaq kömək etdi:

    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
    

Klaster icmalı

ceph-osd - diskdə məlumatların saxlanmasına cavabdehdir. Hər bir disk üçün obyektləri oxumaq və ya yazmaq üçün sorğuları qəbul edən və icra edən şəbəkə xidməti işə salınır. Diskdə iki bölmə yaradılır. Onlardan birində klaster, disk nömrəsi və klasterin açarları haqqında məlumatlar var. Bu 1KB məlumat disk əlavə edilərkən bir dəfə yaradılır və heç vaxt dəyişdirilməyib. İkinci bölmənin fayl sistemi yoxdur və CEPH binar məlumatlarını saxlayır. Əvvəlki versiyalarda avtomatik quraşdırma xidmət məlumatları üçün 100MB xfs bölməsi yaratdı. Diski MBR-ə çevirdim və yalnız 16MB ayırdım - xidmət şikayət etmir. Düşünürəm ki, xfs heç bir problem olmadan ext ilə əvəz edilə bilər. Bu bölmə /var/lib/…-də quraşdırılıb, burada xidmət OSD haqqında məlumatı oxuyur və həmçinin binar məlumatların saxlandığı blok cihazına istinad tapır. Teorik olaraq, siz dərhal /var/lib/…-də köməkçi faylları yerləşdirə və bütün diski məlumat üçün ayıra bilərsiniz. Ceph-deploy vasitəsilə OSD yaratarkən, bölməni /var/lib/…-də quraşdırmaq üçün avtomatik qayda yaradılır və ceph istifadəçisinə də istədiyiniz blok cihazını oxumaq hüququ verilir. Əl ilə quraşdırırsınızsa, bunu özünüz etməlisiniz, sənədlər bunu demir. Kifayət qədər fiziki yaddaş olması üçün osd yaddaşının hədəf parametrini təyin etmək də məqsədəuyğundur.

ceph-mds. Aşağı səviyyədə CEPH obyekt yaddaşıdır. Blok saxlama qabiliyyəti hər 4MB bloku obyekt kimi saxlamağa başlayır. Fayl saxlama eyni prinsiplə işləyir. İki hovuz yaradılır: biri metadata, digəri məlumat üçün. Onlar bir fayl sisteminə birləşdirilir. Bu anda bir növ qeyd yaradılır, buna görə də fayl sistemini silsəniz, lakin hər iki hovuzu saxlasanız, onu bərpa edə bilməyəcəksiniz. Faylların bloklarla çıxarılması proseduru var, mən onu sınaqdan keçirməmişəm. Ceph-mds xidməti fayl sisteminə daxil olmaq üçün məsuliyyət daşıyır. Hər bir fayl sistemi xidmətin ayrıca nümunəsini tələb edir. Bir neçə fayl sisteminin oxşarını yaratmağa imkan verən "indeks" seçimi var - həm də sınaqdan keçirilməyib.

Ceph-mon - Bu xidmət klasterin xəritəsini saxlayır. Buraya bütün OSD-lər haqqında məlumat, PG-lərin OSD-lərdə paylanması alqoritmi və ən əsası bütün obyektlər haqqında məlumat daxildir (bu mexanizmin təfərrüatları mənə aydın deyil: /var/lib/ceph/mon/…/ kataloqu var. store.db, o, böyük bir faylı ehtiva edir 26MB və 105K obyektdən ibarət çoxluqda, hər bir obyekt üçün 256 baytdan bir qədər çox olduğu ortaya çıxır - düşünürəm ki, monitor bütün obyektlərin və PG-lərin siyahısını saxlayır. yerləşirlər). Bu kataloqun zədələnməsi klasterdəki bütün məlumatların itirilməsi ilə nəticələnir. Beləliklə, belə bir nəticəyə gəlindi ki, CRUSH PG-lərin OSD-də necə yerləşdiyini və obyektlərin PG-lərdə necə yerləşdiyini göstərir - tərtibatçılar bu sözdən nə qədər qaçsalar da, onlar mərkəzləşdirilmiş şəkildə verilənlər bazasında saxlanılır. Nəticədə, birincisi, sistemi RO rejimində bir flash sürücüyə quraşdıra bilmirik, çünki verilənlər bazası daim qeyd olunur, bunlar üçün əlavə disk lazımdır (çox az 1 GB-dan çox), ikincisi, bu bazanı real vaxtda kopyalayın. Bir neçə monitor varsa, o zaman nasazlığa dözümlülük avtomatik olaraq təmin edilir, lakin bizim vəziyyətimizdə yalnız bir monitor var, maksimum iki. OSD məlumatlarına əsaslanan monitoru bərpa etmək üçün nəzəri prosedur var, mən müxtəlif səbəblərdən üç dəfə müraciət etdim və üç dəfə heç bir səhv mesajı, həmçinin məlumat yox idi. Təəssüf ki, bu mexanizm işləmir. Ya biz OSD-də miniatür arakəsmə işlədirik və verilənlər bazasını saxlamaq üçün RAID yığırıq ki, bu, şübhəsiz ki, performansa çox pis təsir edəcək, ya da portları tutmamaq üçün ən azı iki etibarlı fiziki media, tercihen USB ayırırıq.

rados-gw - S3 protokolu və bənzəri vasitəsilə obyekt yaddaşını ixrac edir. Çoxlu hovuzlar yaradır, niyə bəlli deyil. Çox təcrübə etmədim.

ceph-mgr - Bu xidməti quraşdırarkən bir neçə modul işə salınır. Onlardan biri əlil ola bilməyən avtomatik miqyasdır. Düzgün PG/OSD miqdarını saxlamağa çalışır. Nisbətə əl ilə nəzarət etmək istəyirsinizsə, hər bir hovuz üçün miqyaslaşdırmanı söndürə bilərsiniz, lakin bu halda modul 0-a bölünməklə çökür və klaster statusu ERROR olur. Modul Python-da yazılmışdır və orada lazımi sətri şərh etsəniz, bu, onun söndürülməsinə gətirib çıxarır. Detalları xatırlamaq üçün çox tənbəl.

İstifadə olunan mənbələrin siyahısı:

CEPH quraşdırılması
Tam monitor nasazlığından bərpa

Skript siyahıları:

Sistemin debotstrap vasitəsilə quraşdırılması

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

Klaster yaradın

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 əlavə edilməsi (hissə)

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

Xülasə

CEPH-in əsas marketinq üstünlüyü CRUSH - məlumatların yerini hesablamaq üçün bir alqoritmdir. Monitorlar bu alqoritmi müştərilərə paylayır, bundan sonra müştərilər birbaşa istədiyiniz node və istənilən OSD-ni tələb edirlər. CRUSH heç bir mərkəzləşməni təmin etmir. Bu, hətta çap edib divara asa biləcəyiniz kiçik bir fayldır. Təcrübə göstərdi ki, CRUSH hərtərəfli xəritə deyil. Bütün OSD və CRUSH-u saxlayaraq monitorları məhv edib yenidən yaratsanız, klasteri bərpa etmək üçün bu kifayət deyil. Buradan belə nəticəyə gəlmək olar ki, hər bir monitor bütün klaster haqqında bəzi metaməlumatları saxlayır. Bu metaməlumatların kiçik miqdarı klasterin ölçüsünə məhdudiyyətlər qoymur, lakin onların təhlükəsizliyinin təmin edilməsini tələb edir ki, bu da sistemi bir flash sürücüyə quraşdırmaqla diskə qənaəti aradan qaldırır və üçdən az qovşaq olan klasterləri istisna edir. İsteğe bağlı xüsusiyyətlərlə bağlı tərtibatçının aqressiv siyasəti. Minimalizmdən uzaq. Sənədlər “bizdə olanlara görə təşəkkür edirəm, amma çox, çox cüzidir” səviyyəsindədir. Xidmətlərlə aşağı səviyyədə qarşılıqlı əlaqə imkanı təmin edilir, lakin sənədlər bu mövzuya çox səthi toxunur, ona görə də bu, hədən daha çox “yox”dur. Fövqəladə vəziyyətdən məlumatları bərpa etmək üçün praktiki olaraq heç bir şans yoxdur.

Sonrakı fəaliyyət üçün seçimlər: CEPH-dən imtina edin və banal çox diskli btrfs (və ya xfs, zfs) istifadə edin, CEPH haqqında yeni məlumat tapın, bu, onu müəyyən edilmiş şərtlərdə idarə etməyə imkan verəcəkdir, öz yaddaşınızı inkişaf etmiş kimi yazmağa çalışın. təlim.

Mənbə: www.habr.com

Добавить комментарий