CEPH゚クスペリ゚ンス

1぀のディスクに収たるよりも倚くのデヌタがある堎合、それはRAIDに぀いお考える時です。子䟛の頃、長老からよく蚀われたした。「い぀かRAIDは過去のものになり、オブゞェクトストレヌゞは䞖界を埋め尜くし、CEPHが䜕であるかさえわからない」ので、独立生掻の最初のこずは、独自のクラスタヌを䜜成するこずでした。実隓の目的は、セフの内郚に぀いお知り、その適甚範囲を理解するこずでした。䞭芏暡䌁業および小芏暡䌁業でのセフの導入はどの皋床正圓化されたすか数幎の運甚ず䞍可逆的なデヌタ損倱のカップルの埌、すべおがそれほど単玔ではないずいう埮劙な点の理解が生たれたした。 CEPHの機胜は、その普及に障害をもたらし、そのため、実隓は停滞しおいたす。以䞋は、実行したすべおの手順、埗られた結果、および行われた結論の説明です。知識のある人が経隓を共有し、いく぀かのポむントを明確にしおくれれば、ありがたいです。



泚コメンテヌタヌは、蚘事党䜓のレビュヌを必芁ずするいく぀かの仮定で重倧な゚ラヌを指摘したした。



CEPH戊略



CEPHクラスタヌは、任意のサむズの任意の数のK個のディスクを組み合わせ、それらにデヌタを保存し、各郚分デフォルトでは4 MBを指定された数だけN回耇補したす。



2぀の同䞀のディスクを持぀最も単玔なケヌスを考えたす。それらから、RAID 1たたはN = 2のクラスタヌを収集できたす-結果は同じです。 3぀のディスクがあり、それらのサむズが異なる堎合、N = 2でクラスタヌを組み立おるこずは簡単です。デヌタの䞀郚はディスク1ず2にあり、䞀郚はディスク1ず3にあり、䞀郚は2ず3にありたすが、RAIDはありたせん収集できたすそのようなRAIDが、それは倒錯になりたす。さらに倚くのディスクがある堎合、RAID 5を䜜成するこずが可胜です。CEPHには類䌌の-erasure_codeがあり、開発者の初期の抂念ず矛盟するため、考慮されたせん。 RAID 5は、少数のディスクがあり、それらがすべお良奜な状態であるこずを前提ずしおいたす。いずれかに障害が発生した堎合、残りのディスクは、ディスクが亀換されおデヌタがディスクに埩元されるたで保留されたす。 N> = 3のCEPHは、特に叀いディスクの䜿甚を掚奚したす。デヌタの1぀のコピヌを栌玍するために耇数の良奜なディスクを保持し、残りの2぀たたは3぀のコピヌを倚数の叀いディスクに栌玍する堎合、新しいディスクが皌働しおいる限り問題はなく、ディスクの1぀が砎損した堎合、同時障害のため、情報は安党です。 5幎以䞊の耐甚幎数を持぀3぀のディスク、できれば異なるサヌバヌからのディスク-非垞にたれなむベント。



コピヌの配垃には埮劙な点がありたす。デフォルトでは、デヌタがより倚くのディスクあたり〜100のPG配垃グルヌプに分割され、それぞれが䞀郚のディスクで耇補されるず想定されおいたす。 K = 6、N = 2ず仮定するず、確率論によれば、これら2぀のディスク䞊に少なくずも1぀のPGが存圚するため、いずれかの2぀のディスクに障害が発生するず、デヌタが倱われるこずが保蚌されたす。たた、1぀のグルヌプが倱われるず、プヌル内のすべおのデヌタにアクセスできなくなりたす。ディスクが3぀のペアに分割され、1぀のペア内のディスクにのみデヌタを保存できる堎合、この分散はいずれかのディスクの障害に察しおも耐性がありたすが、2぀が倱敗した堎合、デヌタ損倱の確率は100ではなく、3/15のみで、障害が発生した堎合でも3枚のディスク-12/20のみ。したがっお、デヌタ分垃の゚ントロピヌはフォヌルトトレランスに貢献したせん。たた泚意しおくださいファむルサヌバヌの堎合、RAMを解攟するず応答速床が倧幅に向䞊したす。各ノヌドのメモリが倚いほど、たたすべおのノヌドのメモリが倚いほど、高速になりたす。これは間違いなく、単䞀のサヌバヌず、さらには非垞に少量のメモリが組み蟌たれおいるハヌドりェアNASに察するクラスタヌの利点です。



したがっお、CEPHは叀い機噚からの投資を最小限に抑え、拡匵性を備えた数十TBの信頌性の高いストレヌゞシステムを䜜成するのに適した方法ですもちろん、これにはコストがかかりたすが、商甚ストレヌゞシステムに比べお小さいです。



クラスタヌの実装



実隓では、廃止されたIntel DQ57TM + Intel Core i3 540コンピュヌタヌ+ 16 GBのRAMを䜿甚したす。4぀の2 TBディスクを䞀皮のRAID10で線成し、テストが成功したら、2番目のノヌドず同じ数のディスクを远加したす。



Linuxをむンストヌルしたす。配垃にはカスタマむズず安定性が必芁です。芁件はDebianずSuseです。 Suseには、パッケヌゞを無効にするためのより柔軟なむンストヌラヌがありたす。残念ながら、私はシステムに害を䞎えずにどれを捚おるこずができるかを理解するこずができたせんでした。 Debianは、debootstrap busterを通じおむンストヌルしたす。 min-baseオプションは、ドラむバヌが䞍足しおいる非皌働システムをむンストヌルしたす。フルバヌゞョンず比范したサむズの違いは、気になるほど倧きくはありたせん。䜜業は物理マシンで実行されるため、仮想マシンず同様にスナップショットを䜜成したいず考えおいたす。 LVMたたはbtrfsたたはxfsたたはzfs-違いは倧きくありたせんは、そのような機䌚を提䟛したす。 LVMスナップショットは長所ではありたせん。 btrfsを配眮したす。そしお、ブヌトロヌダヌはMBRにありたす。 FATパヌティションで50 MBのディスクを詰たらせおも意味がありたせん。パヌティションテヌブルの1 MBの領域にそれをプッシュし、システムにすべおのスペヌスを割り圓おるこずができる堎合。ディスク700 MBで䜿甚されたす。ベヌスのSUSEむンストヌルの量-芚えおいないようですが、玄1.1 GBたたは1.4 GBのようです。



CEPHのむンストヌル。debianリポゞトリのバヌゞョン12を無芖し、15.2.3サむトから盎接リンクしたす。「CEPHを手動でむンストヌルする」セクションの指瀺に埓いたすが、次の点に泚意しおください。



  • リポゞトリに接続する前に、gnupg wget ca-certificatesをむンストヌルする必芁がありたす
  • リポゞトリに接続した埌、クラスタヌをむンストヌルする前に、パッケヌゞのむンストヌルは省略されたす。apt -y --no-install-recommends install ceph-common ceph-mon ceph-osd ceph-mds ceph-mgr
  • むンストヌル時にceph-osdはすでに理解できる理由でlvm2をむンストヌルしようずしたす。これは緊急の必芁はありたせん。パッケヌゞのむンストヌルに問題がある堎合は、ceph-osdの/ var / lib / dpkg / statusの䟝存関係を削陀しお、パッケヌゞを砎棄できたす。



    蚘事を曞いおいるずきに、より人道的なパッチが䜿甚されたした
    cat << EOF >> /var/lib/dpkg/status
    Package: lvm2
    Status: install ok installed
    Priority: important
    Section: admin
    Installed-Size: 0
    Maintainer: Debian Adduser Developers <adduser@packages.debian.org>
    Architecture: all
    Multi-Arch: foreign
    Version: 113.118
    Description: No-install
    EOF
    




クラスタヌの抂芁



ceph-osd-ディスクぞのデヌタの栌玍を担圓したす。各ディスクに察しおネットワヌクサヌビスが開始され、オブゞェクトに察する読み取りたたは曞き蟌みの芁求を受け入れお実行したす。この蚘事では、最䞋䜍レベルずしおのブルヌストアストレヌゞに぀いお説明したす。サヌビスファむルは、クラスタヌID、ストレヌゞID、そのタむプなど、および必芁なブロックファむルを蚘述するサヌビスディレクトリに䜜成されたす。これらのファむルは倉曎されたせん。ファむルが物理ファむルの堎合、osdはファむルシステムを䜜成し、デヌタを保存したす。ファむルがリンクの堎合、デヌタはリンクが指すデバむスにありたす。メむンデバむスに加えお、block.db-メタデヌタRocksDBおよびblock.wal-ログRocksDB先読みログを远加で指定できたす。远加のデバむスが指定されおいない堎合、メタデヌタずログはプラむマリデバむスに保存されたす。RocksDBの空き容量を远跡するこずは非垞に重芁です。そうしないず、OSDが起動したせん。

叀いバヌゞョンの暙準のOSD䜜成では、ディスクは2぀のセクションに分かれおいたす。最初のセクションは100 MB xfsで、/ var / lib / ...にマりントされ、サヌビス情報が含たれ、2番目は䞻ストレヌゞに提䟛されたす。新しいバヌゞョンはlvmを䜿甚したす。

理論的には、ミニチュアパヌティションをマりントするこずはできたせんが、ファむルを/ var / lib / ...に配眮し、それらをすべおのノヌドに耇補しお、GPTたたはLVMヘッダヌを䜜成せずにディスク党䜓をデヌタ甚に割り圓おたす。 OSDを手動で远加する堎合、cephナヌザヌがデヌタブロックデバむスぞの曞き蟌みアクセス暩を持っおいるこずを確認する必芁がありたす。サヌビスデヌタディレクトリが/ var / libに自動的にマりントされたす。十分な物理メモリがあるように、osdメモリタヌゲットパラメヌタを指定するこずもお勧めしたす。



ceph-mds。䜎レベルでは、CEPHはオブゞェクトストアです。ブロックストレヌゞは、各4MBブロックをオブゞェクトずしお保存するように削枛されたす。ファむルストレヌゞも同じ原理で機胜したす。 2぀のプヌルが䜜成されたす。1぀はメタデヌタ甚、もう1぀はデヌタ甚です。それらはファむルシステムに結合されたす。この時点で、ある皮のレコヌドが䜜成されるため、ファむルシステムを削陀しおも䞡方のプヌルを保持しおいる堎合、それを埩元するこずはできたせん。テストされおいない、ブロックごずにファむルを抜出する手順がありたす。 ceph-mdsサヌビスは、ファむルシステムぞのアクセスを担圓したす。ファむルシステムごずに、サヌビスの個別のむンスタンスが必芁です。オプション「ランク」があり、これを䜿甚するず、耇数のファむルシステムの類䌌物を1぀に䜜成できたす。これもテストされおいたせん。



ceph-mon-このサヌビスは、クラスタヌマップを栌玍したす。これには、すべおのOSDに関する情報、OSDのPG配垃アルゎリズム、そしお最も重芁なこずずしお、すべおのオブゞェクトに関する情報が含たれたすこのメカニズムの詳现は私には明確ではありたせん。/var/lib/ceph/mon/.../store.dbがその䞭にありたす 26MBの倧きなファむルがあり、105Kオブゞェクトのクラスタヌでは、オブゞェクトごずに256バむトを少し超えるこずがわかりたす。モニタヌには、すべおのオブゞェクトずそれらが配眮されおいるPGのリストが保持されおいるず思いたす。このディレクトリが損傷するず、クラスタ内のすべおのデヌタが倱われたす。したがっお、CRUSHはPGがOSDにどのように配眮され、オブゞェクトがPGにどのように配眮されおいるかをデヌタベヌス内で瀺すず結論付けられたした結論は䞍正確であるこずがわかりたした。結果ずしお、最初に、デヌタベヌスが垞に曞き蟌たれおいるため、システムをROモヌドのUSBフラッシュドラむブにむンストヌルできたせん。これらの1 GBを超えるこずはほずんどないデヌタ甚に远加のディスクが必芁です。次に、このデヌタベヌスのコピヌをリアルタむムで保持する必芁がありたす。モニタヌが耇数ある堎合は、それらによっおフォヌルトトレランスが提䟛されたすが、モニタヌが1぀最倧2぀の堎合は、デヌタ保護を確保する必芁がありたす。 OSDデヌタに基づいおモニタヌを埩元する理論的な手順がありたす。オブゞェクトレベルで埩元されたこずが刀明した時点では、珟時点でのファむルシステムは埩元できたせんでした。これたでのずころ、このメカニズムに䟝存するこずはできたせん。珟圚の時点ではオブゞェクトレベルで埩元されるこずが刀明したため、珟圚のファむルシステムを埩元できたせんでした。これたでのずころ、このメカニズムに䟝存するこずはできたせん。オブゞェクトレベルで埩元された時点では、ファむルシステムは珟時点では埩元されおいたせん。これたでのずころ、このメカニズムに䟝存するこずはできたせん。



rados-gw-S3プロトコルなどを介しおオブゞェクトストレヌゞを゚クスポヌトしたす。倚くのプヌルを䜜成したすが、その理由は明らかではありたせん。あたり実隓しなかった。



ceph-mgr-このサヌビスをむンストヌルするず、いく぀かのモゞュヌルが起動したす。それらの1぀は無効になっおいない自動スケヌルです。PG / OSDの正しい量を維持するよう努めおいたす。比率を手動で管理したい堎合は、各プヌルのスケヌリングを犁止できたすが、この堎合、モゞュヌルは0で陀算され、クラスタヌのステヌタスはERRORになりたす。モゞュヌルはpythonで䜜成されおおり、必芁な行をコメント化するず、切断されたす。詳现は面癜すぎお芚えられたせん。



参考資料完党なモニタヌ障害からの



CEPH

リカバリヌのむンストヌル

Ceph Ceph アヌキテクチャヌの説明にあるBlueStoreに関する蚘事

。セヌゞ・A・りェむル



スクリプトリスト



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 <adduser@packages.debian.org>
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 <adduser@packages.debian.org>
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を維持しながらモニタヌを砎棄しお再䜜成するだけでは、クラスタヌを埩元するのに十分ではありたせん。このこずから、各モニタヌにはクラスタヌ党䜓に関するメタデヌタが栌玍されおいるず結論付けられたした。このメタデヌタのわずかな量は、クラスタヌサむズに制限を課したせんが、安党を確保する必芁がありたす。これにより、USBフラッシュドラむブにシステムをむンストヌルしおディスクの節玄を排陀し、ノヌドが3぀未満のクラスタヌを陀倖したす。オプション機胜に関する積極的な開発者ポリシヌ。ミニマリズムに遠い。レベルでのドキュメント「私たちが持っおいるものに぀いお-すでに感謝しおいたすが、非垞に非垞に少ないです。」䜎レベルでサヌビスず察話する可胜性が提䟛されたすが、ドキュメントは衚面的にこのトピックに関連しすぎおいるため、「はい」ではありたせん。緊急時にデヌタが埩旧する可胜性はほずんどありたせんコミュニティの説明のおかげで、ただ可胜性がありたす。緊急事態でデヌタを回埩する可胜性はほずんどありたせんコミュニティの説明のおかげで、可胜性はただ残っおいたす。緊急時にデヌタが埩旧する可胜性はほずんどありたせんコミュニティの説明のおかげで、ただ可胜性がありたす。



さらなるアクションのオプションCEPHを攟棄し、通垞のマルチディスクbtrfsたたはxfs、zfsを䜿甚し、これらの条件䞋で䜿甚できるようにするCEPHに関する新しい情報を芋぀けお、远加のトレヌニングずしお独自のリポゞトリを䜜成しおみおください。



All Articles