Pengalaman karo CEPH

Nalika ana data luwih saka bisa pas siji disk, iku wektu kanggo mikir bab RAID. Minangka bocah, aku kerep krungu saka wong tuwaku: "Sawijining dina RAID bakal dadi perkara sing kepungkur, panyimpenan obyek bakal ngisi jagad iki, lan sampeyan ora ngerti apa CEPH iku," dadi perkara pisanan ing uripku sing mandiri. yaiku nggawe kluster dhewe. Tujuan saka eksperimen yaiku kanggo ngerteni struktur internal ceph lan ngerti ruang lingkup aplikasi kasebut. Kepiye kabeneran implementasine ceph ing bisnis ukuran menengah lan ing bisnis cilik? Sawise pirang-pirang taun operasi lan sawetara kerugian data sing ora bisa dibatalake, pangerten babagan kerumitan muncul sing ora kabeh gampang banget. Keanehan saka CEPH nyebabake alangan kanggo adopsi sing nyebar, lan amarga eksperimen kasebut wis rampung. Ing ngisor iki ana katrangan babagan kabeh langkah sing ditindakake, asil sing dipikolehi lan kesimpulan sing ditindakake. Yen wong pinter nuduhake pengalaman lan nerangake sawetara poin, aku bakal matur nuwun.

Cathetan: Komentator wis nemtokake kesalahan serius ing sawetara asumsi sing mbutuhake revisi kabeh artikel.

Strategi CEPH

Kluster CEPH nggabungke jumlah disk sembarang K saka ukuran sembarang lan nyimpen data ing, duplikat saben Piece (4 MB minangka standar) diwenehi nomer N kaping.

Ayo nimbang kasus paling gampang karo rong disk sing padha. Saka wong-wong mau sampeyan bisa ngumpulake RAID 1 utawa kluster karo N = 2 - asil bakal padha. Yen ana telung disk lan ukurane beda-beda, mula gampang kanggo ngumpulake kluster kanthi N = 2: sawetara data bakal ana ing disk 1 lan 2, sawetara bakal ana ing disk 1 lan 3, lan sawetara bakal ana. ing 2 lan 3, nalika RAID ora bakal (sampeyan bisa ngumpul RAID kuwi, nanging bakal perversion). Yen ana luwih akeh disk, banjur bisa nggawe RAID 5; CEPH duwe analog - erasure_code, sing mbantah konsep awal para pangembang, lan mulane ora dianggep. RAID 5 nganggep ana sawetara drive cilik, kabeh ana ing kondisi apik. Yen salah siji gagal, liyane kudu terus metu nganti disk diganti lan data dibalèkaké menyang. CEPH, kanthi N> = 3, nyengkuyung panggunaan disk lawas, utamane, yen sampeyan nyimpen sawetara disk sing apik kanggo nyimpen siji salinan data, lan nyimpen loro utawa telung salinan sing isih ana ing akeh disk lawas, banjur informasi kasebut bakal aman, amarga saiki disk anyar isih urip - ora ana masalah, lan yen salah sijine rusak, mula kegagalan simultan saka telung disk kanthi umur layanan luwih saka limang taun, luwih becik saka server sing beda-beda, ora mungkin. acara.

Ana subtlety kanggo distribusi salinan. Kanthi gawan, iku dianggep sing data dipΓ©rang dadi luwih (~ 100 saben disk) kelompok distribusi PG, saben kang duplikat ing sawetara disk. Ayo ngomong K = 6, N = 2, banjur yen ana rong disk sing gagal, data dijamin bakal ilang, amarga miturut teori probabilitas, paling ora ana siji PG sing bakal ana ing rong disk kasebut. Lan mundhut siji klompok ndadekake kabeh data ing blumbang ora kasedhiya. Yen disk dipΓ©rang dadi telung pasangan lan data diijini kanggo disimpen mung ing disk ing siji pasangan, banjur distribusi kuwi uga tahan kanggo Gagal salah siji disk, nanging yen loro disk gagal, kemungkinan mundhut data ora. 100%, nanging mung 3/15, lan malah ing cilik saka Gagal telung disk - mung 12/20. Mula, entropi ing distribusi data ora nyumbang kanggo toleransi kesalahan. Elinga uga kanggo server file, RAM gratis nambah kacepetan respon. Sing luwih akeh memori ing saben simpul, lan luwih akeh memori ing kabeh simpul, bakal luwih cepet. Iki temtu kauntungan saka kluster liwat server siji lan, malah luwih, hardware NAS, ngendi jumlah cilik saka memori dibangun ing.

Nderek CEPH minangka cara sing apik kanggo nggawe sistem panyimpenan data sing bisa dipercaya kanggo puluhan TB kanthi kemampuan kanggo skala kanthi investasi minimal saka peralatan sing wis kadaluwarsa (ing kene, mesthi, biaya bakal dibutuhake, nanging cilik dibandhingake karo sistem panyimpenan komersial).

Implementasi klaster

Kanggo eksperimen, ayo njupuk komputer Intel DQ57TM + Intel core i3 540 + 16 GB RAM. Kita bakal ngatur papat disk 2 TB menyang kaya RAID10, sawise tes sukses kita bakal nambah simpul kapindho lan jumlah disk sing padha.

Nginstal Linux. Distribusi mbutuhake kemampuan kanggo ngatur lan stabil. Debian lan Suse nyukupi syarat kasebut. Suse duwe installer sing luwih fleksibel sing ngidini sampeyan mateni paket apa wae; Sayange, aku ora bisa ngerteni endi sing bisa dibuwang tanpa ngrusak sistem. Instal Debian nggunakake debootstrap buster. Opsi min-base nginstal sistem rusak sing ora duwe driver. Bentenipun ing ukuran dibandhingake versi lengkap ora dadi gedhe kanggo keganggu. Wiwit karya ditindakake ing mesin fisik, aku pengin njupuk gambar, kaya ing mesin virtual. Opsi iki diwenehake dening LVM utawa btrfs (utawa xfs, utawa zfs - bedane ora gedhe). Snapshots LVM dudu titik sing kuwat. Instal btrfs. Lan bootloader ana ing MBR. Ora ana gunane cluttering 50 MB disk karo pemisahan FAT nalika sampeyan bisa push menyang 1 MB wilayah Tabel pemisahan lan nyedhiakke kabeh papan kanggo sistem. Njupuk munggah 700 MB ing disk. Aku ora ngelingi carane akeh instalasi SUSE dhasar, Aku iku bab 1.1 utawa 1.4 GB.

Instal CEPH. Kita nglirwakake versi 12 ing repositori debian lan nyambung langsung saka situs 15.2.3. Kita tindakake pandhuan saka bagean "Instal CEPH kanthi manual" kanthi peringatan ing ngisor iki:

  • Sadurunge nyambungake repositori, sampeyan kudu nginstal gnupg wget ca-certificates
  • Sawise nyambungake repositori, nanging sadurunge nginstal kluster, nginstal paket diilangi: apt -y --no-install-recommends install ceph-common ceph-mon ceph-osd ceph-mds ceph-mgr
  • Nalika nginstal CEPH, amarga alasan sing ora dingerteni, bakal nyoba nginstal lvm2. Ing asas, iku ora tega, nanging instalasi gagal, supaya CEPH ora bakal nginstal.

    Patch iki mbantu:

    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
    

Ringkesan kluster

ceph-osd - tanggung jawab kanggo nyimpen data ing disk. Kanggo saben disk, layanan jaringan diluncurake sing nampa lan nglakokake panjalukan kanggo maca utawa nulis menyang obyek. Rong partisi digawe ing disk. Salah sijine ngemot informasi babagan kluster, nomer disk, lan kunci kluster. Informasi 1KB iki digawe sapisan nalika nambah disk lan wis tau weruh kanggo ngganti. Partisi kapindho ora duwe sistem file lan nyimpen data binar CEPH. Instalasi otomatis ing versi sadurunge nggawe partisi xfs 100MB kanggo informasi layanan. Aku diowahi disk kanggo MBR lan diparengake mung 16MB - layanan ora sambat. Aku xfs bisa diganti karo ext tanpa masalah. Partisi iki dipasang ing / var / lib / ..., ing ngendi layanan kasebut maca informasi babagan OSD lan uga nemokake referensi menyang piranti blok ing ngendi data binar disimpen. Secara teoritis, sampeyan bisa langsung nyelehake file tambahan ing / var / lib / ..., lan nyedhiyakake kabeh disk kanggo data. Nalika nggawe OSD liwat ceph-deploy, aturan digawe kanthi otomatis kanggo masang partisi ing /var/lib/…, lan pangguna ceph uga diwenehi hak kanggo maca piranti pemblokiran sing dikarepake. Yen sampeyan nginstal kanthi manual, sampeyan kudu nindakake iki dhewe; dokumentasi ora nyatakake iki. Sampeyan uga dianjurake kanggo nemtokake parameter target memori osd supaya ana memori fisik sing cukup.

ceph-mds. Ing tingkat sing kurang, CEPH minangka panyimpenan obyek. Kemampuan kanggo mblokir panyimpenan mudhun kanggo nyimpen saben blok 4MB minangka obyek. Panyimpenan file dianggo ing prinsip sing padha. Loro pools digawe: siji kanggo metadata, liyane kanggo data. Padha digabungake menyang sistem file. Ing wayahe, sawetara jinis rekaman digawe, dadi yen sampeyan mbusak sistem file, nanging tetep loro pools, sampeyan ora bakal bisa mulihake. Ana prosedur kanggo ngekstrak file kanthi pamblokiran, aku durung nyoba. Layanan ceph-mds tanggung jawab kanggo akses menyang sistem file. Saben sistem file mbutuhake conto layanan sing kapisah. Ana pilihan "indeks", sing ngijini sampeyan kanggo nggawe semblance saka sawetara sistem file ing siji - uga ora dites.

Ceph-mon - Layanan iki nyimpen peta kluster. Iki kalebu informasi babagan kabeh OSD, algoritma kanggo nyebarake PG ing OSD lan, sing paling penting, informasi babagan kabeh obyek (rincian mekanisme iki ora jelas kanggo aku: ana direktori /var/lib/ceph/mon/…/ store.db, ngandhut file gedhe 26MB, lan ing kluster 105K obyek, iku dadi metu sethitik liwat 256 bita saben obyek - Aku sing monitor nyimpen dhaptar kabeh obyek lan PGs kang padha dumunung). Kerusakan ing direktori iki nyebabake ilang kabeh data ing kluster. Empu kesimpulan iki digambar CRUSH nuduhake carane PG dumunung ing OSD, lan carane obyek dumunung ing PGs - lagi disimpen ing tengah ing database, ora ketompo carane akeh gawe supaya tembung iki. AkibatΓ©, pisanan, kita ora bisa nginstal sistem ing flash drive ing mode RO, amarga database terus direkam, disk tambahan dibutuhake kanggo iki (ora luwih saka 1 GB), sareh, iku perlu kanggo duwe. nyalin ing wektu nyata basa iki. Yen ana pirang-pirang monitor, mula toleransi kesalahan dijamin kanthi otomatis, nanging ing kasus kita mung ana siji monitor, maksimal loro. Ana prosedur teoretis kanggo mulihake monitor adhedhasar data OSD, aku nggunakake kaping telu kanggo macem-macem alasan, lan kaping telu ora ana pesen kesalahan, uga ora ana data. Sayange, mekanisme iki ora bisa. Salah siji kita operate partisi miniatur ing OSD lan ngumpul RAID kanggo nyimpen database, kang mesthi bakal duwe efek ala banget ing kinerja, utawa kita nyedhiakke paling loro media fisik dipercaya, luwih USB, supaya ora Occupy bandar.

rados-gw - ngekspor panyimpenan obyek liwat protokol S3 lan padha. Nggawe akeh blumbang, ora jelas kenapa. Aku ora akeh eksperimen.

ceph-mgr - Nalika nginstal layanan iki, sawetara modul diluncurake. Salah sijine yaiku skala otomatis sing ora bisa dipateni. Iku usaha kanggo njaga jumlah bener saka PG / OSD. Yen sampeyan pengin ngontrol rasio kanthi manual, sampeyan bisa mateni njongko kanggo saben blumbang, nanging ing kasus iki modul tabrakan karo divisi dening 0, lan status cluster dadi ERROR. Modul ditulis ing Python, lan yen sampeyan komentar metu baris perlu ing, iki ndadΓ©kakΓ© kanggo mateni sawijining. Keset kanggo ngelingi rincian.

Dhaptar sumber sing digunakake:

Pemasangan CEPH
Recovery saka Gagal monitor lengkap

Daftar skrip:

Nginstal sistem liwat 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

Nggawe kluster

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

Nambahake OSD (bagean)

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

Ringkesan

Kauntungan marketing utama CEPH yaiku CRUSH - algoritma kanggo ngitung lokasi data. Monitor nyebarake algoritma iki kanggo klien, sawise klien langsung njaluk simpul sing dikarepake lan OSD sing dikarepake. CRUSH njamin ora ana sentralisasi. Iki minangka file cilik sing bisa dicithak lan digantung ing tembok. Praktek wis nuduhake yen CRUSH dudu peta sing lengkap. Yen sampeyan numpes lan nggawΓ© ulang monitor, tetep kabeh OSD lan CRUSH, banjur iki ora cukup kanggo mulihake kluster. Saka iki disimpulake yen saben monitor nyimpen sawetara metadata babagan kabeh kluster. Jumlah cilik saka metadata iki ora nemtokke Watesan ing ukuran kluster, nanging mbutuhake mesthekake safety, kang ngilangake tabungan disk dening nginstal sistem ing flash drive lan ora kalebu klompok kurang saka telung kelenjar. Kabijakan agresif pangembang babagan fitur opsional. Adoh saka minimalism. Dokumentasi kasebut ana ing tingkat "matur nuwun kanggo apa sing kita duwe, nanging sithik banget." Kemampuan kanggo sesambungan karo layanan ing tingkat kurang kasedhiya, nanging dokumentasi ndemek topik iki banget cethek, supaya luwih kamungkinan ora saka ya. Sakbenere ora ana kasempatan kanggo mbalekake data saka kahanan darurat.

Opsi kanggo tumindak luwih lanjut: ninggalake CEPH lan gunakake btrfs multi-disk banal (utawa xfs, zfs), temokake informasi anyar babagan CEPH, sing bakal ngidini sampeyan ngoperasikake ing kahanan sing ditemtokake, coba tulis panyimpenan sampeyan dhewe minangka maju. latihan.

Source: www.habr.com

Add a comment