Pangalaman sareng CEPH

Lamun aya leuwih data ti bisa nyocogkeun dina hiji disk, éta waktu pikeun mikir ngeunaan RAID. Salaku murangkalih, kuring sering nguping ti sesepuh kuring: "hiji dinten RAID bakal janten jaman baheula, panyimpen barang bakal ngeusian dunya, sareng anjeun henteu terang naon CEPH," janten hal anu munggaran dina kahirupan mandiri kuring. éta nyieun klaster kuring sorangan. Tujuan percobaan éta pikeun ngenalkeun struktur internal ceph sareng ngartos ruang lingkup aplikasina. Kumaha diyakinkeun nyaéta palaksanaan ceph dina usaha sedeng-ukuran jeung leutik? Saatos sababaraha taun operasi sareng sababaraha karugian data anu teu tiasa dibalikeun, timbul pamahaman ngeunaan intricacies anu henteu sadayana saderhana. Fitur CEPH nyababkeun halangan pikeun nyoko na nyebar, sareng kusabab éta, percobaan parantos dugi ka jalan buntu. Di handap ieu katerangan ngeunaan sagala léngkah anu dilaksanakeun, hasil anu dicandak sareng kacindekan anu dicandak. Mun jalma pangaweruh babagi pangalaman maranéhanana sarta ngajelaskeun sababaraha titik, abdi bakal nganuhunkeun.

Catetan: Koméntar parantos ngaidentipikasi kasalahan anu serius dina sababaraha asumsi anu peryogi révisi sadaya tulisan.

Stratégi CEPH

Cluster CEPH ngagabungkeun hiji angka wenang K tina disk ukuran sawenang-wenang jeung nyimpen data dina eta, duplicating unggal sapotong (4 MB sacara standar) jumlah dibikeun N kali.

Hayu urang nganggap kasus pangbasajanna dua disk idéntik. Ti aranjeunna anjeun tiasa ngumpul RAID 1 atanapi klaster sareng N = 2 - hasilna bakal sami. Upami aya tilu disk sareng ukuranana béda-béda, maka gampang pikeun ngumpul klaster kalayan N = 2: sababaraha data bakal aya dina disk 1 sareng 2, sababaraha bakal aya dina disk 1 sareng 3, sareng sababaraha bakal aya. on 2 jeung 3, bari razia moal (Anjeun tiasa ngumpul razia sapertos, tapi bakal perversion a). Upami aya langkung seueur disk, teras anjeun tiasa nyiptakeun RAID 5; CEPH ngagaduhan analog - erasure_code, anu bertentangan sareng konsép awal pamekar, sareng ku kituna henteu dianggap. RAID 5 nganggap aya sajumlah leutik drive, sadayana aya dina kaayaan anu saé. Upami salah sahiji gagal, anu sanésna kedah tahan dugi ka disk diganti sareng datana disimpen deui. CEPH, kalawan N> = 3, nyorong pamakéan disk heubeul, hususna, lamun nyimpen sababaraha disk alus pikeun nyimpen hiji salinan data, sarta nyimpen dua atawa tilu salinan sésana dina sajumlah badag disk heubeul, teras informasi bakal aman, sabab pikeun ayeuna disk anyar masih hirup - teu aya masalah, sarta lamun salah sahijina ngarecah, mangka kagagalan simultaneous tina tilu disk jeung hirup layanan leuwih ti lima taun, preferably ti server béda, éta pisan saperti teu mirip. acara.

Aya subtlety kana distribusi salinan. Sacara standar, eta dianggap yén data dibagi kana leuwih (~ 100 per disk) grup distribusi PG, nu masing-masing duplikat dina sababaraha disk. Sebutkeun K = 6, N = 2, teras upami aya dua disk gagal, data dijamin leungit, sabab dumasar kana téori probabilitas, sahenteuna bakal aya hiji PG anu bakal aya dina dua disk ieu. Jeung leungitna hiji grup ngajadikeun sakabeh data di kolam renang nu sadia. Upami disk dibagi kana tilu pasang sareng data diidinan disimpen ukur dina disk dina hiji pasangan, maka distribusi sapertos kitu ogé tahan kana gagalna hiji disk, tapi upami dua disk gagal, kamungkinan kaleungitan data henteu. 100%, tapi ngan 3/15, komo bisi gagal tilu disk - ngan 12/20. Lantaran kitu, éntropi dina distribusi data henteu nyumbang kana kasabaran kasalahan. Catet ogé yén pikeun server file, RAM gratis sacara signifikan ningkatkeun kagancangan réspon. Beuki mémori dina unggal titik, sareng langkung seueur mémori dina sadaya titik, éta bakal langkung gancang. Ieu undoubtedly hiji kaunggulan klaster leuwih hiji server tunggal jeung, komo deui, hardware NAS, dimana jumlah leutik pisan memori diwangun dina.

Kituna CEPH mangrupakeun cara nu sae pikeun nyieun sistem gudang data dipercaya pikeun puluhan TB kalawan kamampuhan pikeun skala kalawan investasi minimal tina parabot luntur (di dieu, tangtosna, waragad bakal diperlukeun, tapi leutik dibandingkeun sistem gudang komérsial).

palaksanaan klaster

Pikeun percobaan, hayu urang nyandak hiji komputer decommissioned Intel DQ57TM + Intel core i3 540 + 16 GB RAM. Urang bakal ngatur opat 2 TB disk kana hal kawas RAID10, sanggeus test suksés urang bakal nambahan hiji titik kadua jeung jumlah sarua disk.

Masang Linux. Sebaran merlukeun kamampuhan pikeun ngaropéa tur stabil. Debian sareng Suse nyumponan sarat. Suse gaduh installer anu langkung fleksibel anu ngamungkinkeun anjeun nganonaktipkeun pakét naon waé; Hanjakalna, kuring henteu tiasa terang anu mana anu tiasa dibuang tanpa ngarusak sistem. Pasang Debian nganggo debootstrap buster. Pilihan min-base installs sistem rusak nu lacks drivers. Beda dina ukuran dibandingkeun versi pinuh teu jadi badag pikeun ngaganggu. Kusabab karya dilumangsungkeun dina mesin fisik, abdi hoyong nyandak snapshots, kawas dina mesin virtual. Pilihan ieu disayogikeun ku LVM atanapi btrfs (atanapi xfs, atanapi zfs - bédana henteu ageung). snapshots LVM sanes titik kuat. Pasang btrfs. Sareng bootloader aya dina MBR. Teu aya gunana pikeun ngaganggu disk 50 MB sareng partisi FAT nalika anjeun tiasa nyorong kana méja partisi 1 MB sareng nyayogikeun sadaya rohangan pikeun sistem. Nyandak up 700 MB dina disk. Kuring teu apal sabaraha instalasi SUSE dasar, Jigana éta ngeunaan 1.1 atawa 1.4 GB.

Pasang CEPH. Urang malire versi 12 dina Repository debian tur sambungkeun langsung ti situs 15.2.3. Urang turutan parentah ti bagian "Pasang CEPH sacara manual" kalawan caveats handap:

  • Sateuacan nyambungkeun gudang, anjeun kedah masang gnupg wget ca-sertipikat
  • Saatos nyambungkeun gudang, tapi sateuacan masang klaster, masang bungkusan dileungitkeun: apt -y --no-install-recommends install ceph-common ceph-mon ceph-osd ceph-mds ceph-mgr
  • Nalika masang CEPH, alesan anu teu dipikanyaho, éta bakal nyobian masang lvm2. Sacara prinsip, éta teu karunya, tapi instalasi gagal, jadi CEPH moal install ogé.

    Patch ieu ngabantosan:

    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
    

Tinjauan klaster

ceph-osd - tanggung jawab pikeun nyimpen data dina disk. Pikeun unggal disk, layanan jaringan diluncurkeun anu nampi sareng ngalaksanakeun pamundut pikeun maca atanapi nyerat kana objék. Dua partisi dijieun dina disk. Salah sahijina ngandung inpormasi ngeunaan kluster, nomer disk, sareng konci kluster. Inpormasi 1KB ieu didamel sakali nalika nambihan disk sareng teu acan kantos diperhatoskeun pikeun robih. Partisi kadua henteu gaduh sistem file sareng nyimpen data binér CEPH. Pamasangan otomatis dina versi sateuacana nyiptakeun partisi xfs 100MB kanggo inpormasi jasa. Kuring ngarobah disk ka MBR sarta disadiakeun ngan 16MB - jasa teu ngawadul. Jigana xfs bisa diganti ku ext tanpa masalah. Partisi ieu dipasang dina /var/lib/…, dimana jasa maca inpormasi ngeunaan OSD sareng ogé mendakan rujukan ka alat blok tempat data binér disimpen. Sacara téoritis, anjeun tiasa langsung nempatkeun file bantu dina /var/lib/…, sareng ngalokasikeun sadaya disk kanggo data. Nalika nyieun OSD via ceph-deploy, aturan otomatis dijieun pikeun masang partisi dina /var/lib/..., sarta pamaké ceph ogé ditugaskeun hak maca alat block nu dipikahoyong. Upami anjeun masang sacara manual, anjeun kedah ngalakukeun ieu nyalira; dokuméntasi henteu nyarios kieu. Éta ogé sasaena pikeun nangtukeun parameter target memori osd ambéh aya cukup memori fisik.

ceph-mds. Dina tingkat anu rendah, CEPH mangrupikeun panyimpenan obyék. Kamampuhan pikeun meungpeuk gudang asalna handap pikeun nyimpen unggal blok 4MB salaku hiji obyék. Panyimpen file dianggo dina prinsip anu sami. Dua pools dijieun: hiji keur metadata, nu séjén pikeun data. Aranjeunna digabungkeun kana sistem file. Dina momen ieu, sababaraha jenis rékaman dijieun, jadi lamun ngahapus sistem file, tapi tetep duanana pools, anjeun moal bisa balikkeun deui. Aya prosedur pikeun nimba file ku blok, kuring henteu acan nguji éta. Ladenan ceph-mds tanggung jawab pikeun aksés kana sistem file. Unggal sistem file merlukeun conto misah tina jasa. Aya pilihan "indéks", anu ngamungkinkeun anjeun nyiptakeun rupa-rupa sababaraha sistem file dina hiji - ogé henteu diuji.

Ceph-mon - jasa ieu nyimpen peta ngeunaan klaster. Éta kalebet inpormasi ngeunaan sadaya OSD, algoritma pikeun nyebarkeun PG dina OSD sareng, anu paling penting, inpormasi ngeunaan sadaya objék (detil mékanisme ieu henteu jelas pikeun kuring: aya diréktori /var/lib/ceph/mon/…/ store.db, ngandung hiji badag file nyaeta 26MB, sarta dina klaster 105K objék, tétéla saeutik leuwih 256 bait per obyék - Jigana éta monitor nyimpen daptar sadaya objék jeung PGs nu. aranjeunna lokasina). Ruksakna diréktori ieu nyababkeun leungitna sadaya data dina kluster. Mangkana kacindekan ieu digambar yén CRUSH nembongkeun kumaha PGs lokasina di OSD, sarta kumaha objék anu lokasina di PGs - aranjeunna centrally disimpen di jero database, euweuh urusan sabaraha pamekar ulah kecap ieu. Hasilna, mimitina, urang moal tiasa masang sistem dina flash drive dina modeu RO, sabab pangkalan data terus dirékam, disk tambahan diperyogikeun pikeun ieu (boro langkung ti 1 GB), kadua, peryogi gaduh a nyalin sacara real waktos dasar ieu. Upami aya sababaraha monitor, maka kasabaran sesar dipastikeun sacara otomatis, tapi dina kasus urang ngan aya hiji monitor, maksimal dua. Aya prosedur téoritis pikeun malikkeun monitor dumasar kana data OSD, abdi resorted ka dinya tilu kali pikeun sagala rupa alesan, sarta tilu kali teu aya pesen kasalahan, kitu ogé euweuh data. Hanjakal, mékanisme ieu teu jalan. Boh urang beroperasi partisi miniatur dina OSD jeung ngumpul razia pikeun nyimpen database, nu pasti bakal boga pangaruh pisan goréng dina kinerja, atawa urang allocate sahenteuna dua média fisik dipercaya, preferably USB, ku kituna teu nempatan palabuhan.

rados-gw - ékspor gudang obyék via protokol S3 jeung sarupa. Nyiptakeun seueur kolam renang, teu jelas naha. Abdi henteu seueur ékspérimén.

ceph-mgr - Nalika masang jasa ieu, sababaraha modul diluncurkeun. Salah sahijina nyaéta autoscale anu henteu tiasa ditumpurkeun. Ieu narékahan pikeun ngajaga jumlah bener PG / OSD. Upami anjeun hoyong ngadalikeun rasio sacara manual, anjeun tiasa nganonaktipkeun skala pikeun tiap kolam renang, tapi dina hal ieu modul ngadat kalawan division ku 0, sarta status klaster janten ERROR. modul ieu ditulis dina Python, sarta lamun mairan kaluar garis diperlukeun dina, ieu ngakibatkeun nganonaktipkeun na. Puguh teu apal kana detilna.

Daptar sumber anu dianggo:

Pamasangan CEPH
Pamulihan tina gagal monitor lengkep

Daptar naskah:

Masang sistem via 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

Jieun klaster

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

Nambahkeun OSD (bagian)

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

singgetan

Kauntungan pamasaran utama CEPH nyaéta CRUSH - algoritma pikeun ngitung lokasi data. Monitor ngadistribusikaeun algoritma ieu ka klien, nu satutasna klien langsung menta titik nu dipikahoyong tur OSD dipikahoyong. CRUSH mastikeun euweuh sentralisasi. Éta mangrupikeun file leutik anu anjeun tiasa nyitak sareng ngagantung dina témbok. Prakték nunjukkeun yén CRUSH sanés peta anu lengkep. Upami anjeun ngancurkeun sareng nyiptakeun deui monitor, ngajaga sadaya OSD sareng CRUSH, maka ieu henteu cekap pikeun mulangkeun kluster. Ti ieu disimpulkeun yén unggal monitor nyimpen sababaraha metadata ngeunaan sakabéh klaster. Jumlah leutik metadata ieu teu maksakeun larangan dina ukuran klaster, tapi merlukeun mastikeun kasalametan maranéhanana, nu ngaleungitkeun tabungan disk ku cara masang sistem dina flash drive jeung ngaluarkeun klaster kalawan kirang ti tilu titik. Kabijakan agrésif pamekar ngeunaan fitur opsional. Jauh tina minimalism. Dokuméntasina aya dina tingkat "hatur nuhun pikeun naon anu kami gaduh, tapi éta pisan, sakedik." Kamampuhan pikeun berinteraksi sareng jasa dina tingkat low disadiakeun, tapi dokuméntasi némpél dina topik ieu teuing deet, ku kituna leuwih gampang a henteu ti enya. Aya praktis euweuh kasempetan recovering data tina kaayaan darurat.

Pilihan pikeun tindakan salajengna: abandon CEPH sareng nganggo btrfs multi-disk banal (atanapi xfs, zfs), milari inpormasi anyar ngeunaan CEPH, anu bakal ngamungkinkeun anjeun ngoperasikeunana dina kaayaan anu ditangtukeun, cobian nyerat panyimpenan anjeun nyalira salaku canggih latihan.

sumber: www.habr.com

Tambahkeun komentar