الخبرة التشغيلية 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_counting ، والذي يتناقض مع المفاهيم المبكرة للمطورين ، وبالتالي لا يعتبر. تفترض RAID 5 وجود عدد صغير من الأقراص ، وكلها في حالة جيدة. إذا فشل أحدهم ، فيجب أن يبقى الباقي حتى يتم استبدال القرص واستعادة البيانات إليه. يشجع CEPH ، لـ N> = 3 ، على استخدام محركات الأقراص القديمة ، على وجه الخصوص ،إذا احتفظت بعدة أقراص جيدة لتخزين نسخة واحدة من البيانات ، وتم تخزين النسختين المتبقيتين أو الثلاث على عدد كبير من الأقراص القديمة ، فإن المعلومات ستكون آمنة ، طالما أن الأقراص الجديدة على قيد الحياة - لا توجد مشاكل ، وإذا انكسر أحدها ، فإن الفشل المتزامن ثلاثة أقراص ذات عمر خدمة يزيد عن خمس سنوات ، ويفضل أن يكون ذلك من خوادم مختلفة - وهو حدث غير مرجح للغاية.



هناك دقة في توزيع النسخ. بشكل افتراضي ، من المفترض أن البيانات مقسمة إلى مجموعات توزيع PG أكثر (100 ~ لكل قرص) ، كل منها مكرر على بعض الأقراص. لنفترض أن K = 6 ، N = 2 ، ثم إذا فشل أي قرصين ، فإن البيانات مضمونة لفقدانها ، لأنه ، وفقًا لنظرية الاحتمالات ، هناك PG واحد على الأقل سيتم وضعه على هذين القرصين. وفقدان مجموعة واحدة يجعل جميع البيانات الموجودة في التجمع غير قابلة للوصول. إذا تم تقسيم الأقراص إلى ثلاثة أزواج وتسمح فقط بتخزين البيانات على أقراص داخل زوج واحد ، فإن هذا التوزيع يقاوم أيضًا فشل أي قرص واحد ، ولكن إذا فشل قرصان ، فإن احتمال فقدان البيانات ليس 100 ٪ ، ولكن فقط 3/15 ، وحتى في حالة الفشل ثلاثة أقراص - فقط 12/20. وبالتالي ، لا يساهم الانتروبيا في توزيع البيانات في تحمل الخطأ. لاحظ أيضًاأنه بالنسبة لخادم الملفات ، تزيد ذاكرة الوصول العشوائي المجانية بشكل كبير من سرعة الاستجابة. لمزيد من الذاكرة في كل عقدة ، والمزيد من الذاكرة في جميع العقد ، سيكون أسرع. هذه هي بلا شك ميزة الكتلة على خادم واحد ، علاوة على ذلك ، جهاز NAS ، حيث يتم تضمين كمية صغيرة جدًا من الذاكرة.



ويترتب على ذلك أن CEPH هي طريقة جيدة مع الحد الأدنى من الاستثمار من المعدات القديمة لإنشاء نظام تخزين موثوق به لعشرات السل مع القدرة على التوسع (هنا ، بالطبع ، سيتطلب تكاليف ، ولكنها صغيرة مقارنة بأنظمة التخزين التجارية).



تنفيذ المجموعة



للتجربة ، لنأخذ كمبيوتر Intel DQ57TM + Intel Core i3 540 الذي تم إيقاف تشغيله + 16 غيغابايت من ذاكرة الوصول العشوائي. سننظم أربعة أقراص 2 تيرابايت في نوع RAID10 ، وبعد اختبار ناجح سنضيف عقدة ثانية ونفس عدد الأقراص.



قم بتثبيت Linux. يتطلب التوزيع التخصيص والاستقرار. تناسب دبيان وسوز المتطلبات. لدى Suse مثبت أكثر مرونة لتعطيل أي حزمة ؛ لسوء الحظ ، لم أستطع معرفة أي منها يمكن التخلص منه دون الإضرار بالنظام. نقوم بتثبيت دبيان عبر debootstrap buster. يقوم خيار min-base بتثبيت نظام لا يعمل حيث لا توجد برامج تشغيل كافية. الفرق في الحجم مقارنة بالإصدار الكامل ليس كبيرًا بقدر الإزعاج. نظرًا لأن العمل يتم على جهاز مادي ، فأنا أرغب في عمل لقطات ، كما هو الحال في الأجهزة الافتراضية. يتم توفير هذا الخيار إما LVM أو btrfs (إما xfs أو zfs - الفرق ليس كبيرًا). لقطات LVM ليست نقطة قوية. نضع btrfs. ومحمل الإقلاع في MBR. لا معنى لسد قرص 50 ميجا بايت بقسم FAT ،عندما يمكنك دفعه إلى منطقة 1 ميجا بايت من جدول الأقسام وتخصيص كل المساحة للنظام. استهلكت 700 ميغا بايت من مساحة القرص. كم يحتوي التثبيت الأساسي SUSE - لا أتذكر ، على ما يبدو ، حوالي 1.1 أو 1.4 جيجابايت.



تثبيت CEPH. تجاهل الإصدار 12 في مستودع دبيان وقم بالاتصال مباشرة من الموقع 15.2.3. نتبع الإرشادات الواردة في قسم "تثبيت CEPH يدويًا" مع التحذيرات التالية:



  • قبل توصيل المستودع ، يجب عليك تثبيت شهادات ca gnupg wget ca
  • بعد توصيل المستودع ، ولكن قبل تثبيت المجموعة ، يتم حذف تثبيت الحزمة: apt -y - no-install-توصي بتثبيت ceph-mon ceph-mon ceph-osd ceph-mds ceph-mgr
  • في وقت التثبيت ، سيحاول ceph-osd تثبيت lvm2 لأسباب (مفهومة بالفعل). ليست هناك حاجة ملحة لذلك. إذا واجهتك مشاكل في تثبيت الحزمة ، يمكنك رفضها بإزالة التبعية في / var / lib / dpkg / status لـ ceph-osd.



    تم استخدام تصحيح أقل إنسانية عند كتابة المقالة:
    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 - مسؤول عن تخزين البيانات على القرص. بالنسبة لكل قرص ، يتم تشغيل خدمة الشبكة ، التي تتلقى طلبات القراءة أو الكتابة إلى الكائنات وتنفيذها. تتناول هذه المقالة تخزين بلوستور كأدنى مستوى. يتم إنشاء ملفات الخدمة في دليل الخدمة الذي يصف معرف الكتلة ، والتخزين ، ونوعه ، وما إلى ذلك ، بالإضافة إلى ملف الكتلة المطلوب - لا يتم تغيير هذه الملفات. إذا كان الملف ماديًا ، فسيقوم osd بإنشاء نظام ملفات فيه وسيجمع البيانات. إذا كان الملف رابطًا ، فستكون البيانات في الجهاز الذي يشير إليه الرابط. بالإضافة إلى الجهاز الرئيسي ، يمكن تحديد block.db - بيانات التعريف (RocksDB) و block.wal - السجل (سجل RocksDB المسبق للكتابة) بشكل إضافي. إذا لم يتم تحديد أجهزة إضافية ، فسيتم تخزين البيانات الوصفية والسجل في الجهاز الأساسي.من المهم جدًا مراقبة توفر مساحة خالية لـ RocksDB ، وإلا فلن يبدأ تشغيل OSD!

في إنشاء OSD القياسي في الإصدارات القديمة ، ينقسم القرص إلى قسمين: الأول هو 100 ميجابايت xfs ، مركب في / var / lib / ... ويحتوي على معلومات الخدمة ، والثاني يُعطى للتخزين الرئيسي. يستخدم الإصدار الجديد lvm.

نظريًا ، لا يمكنك تحميل قسم مصغر ، ولكن ضع الملفات في / var / lib / ... ، وتكرارها على جميع العقد ، وحدد القرص بأكمله للبيانات دون إنشاء رأس GPT أو LVM. عند إضافة OSD يدويًا ، تحتاج إلى التأكد من أن مستخدم ceph لديه حق الوصول للكتابة إلى أجهزة حظر البيانات ، ويتم تحميل دليل بيانات الخدمة تلقائيًا في / var / lib ... إذا قررت وضعهم هناك. من المستحسن أيضًا تحديد معلمة هدف ذاكرة osd بحيث يكون هناك ذاكرة فعلية كافية.



كمس. على مستوى منخفض ، CEPH هو تخزين الكائن. يتم تقليل إمكانية تخزين الكتلة لتوفير كل كتلة 4 ميجا بايت ككائن. يعمل تخزين الملفات بنفس المبدأ. يتم إنشاء مجموعتين: واحدة للبيانات الوصفية والأخرى للبيانات. يتم دمجها في نظام ملفات. في هذه اللحظة ، يتم إنشاء نوع من التسجيل ، لذلك إذا قمت بحذف نظام الملفات ، ولكن احتفظت بكلا المجمعين ، فلن تتمكن من استعادته. هناك إجراء لاستخراج الملفات في الكتل ، لم أختبرها. خدمة ceph-mds مسؤولة عن الوصول إلى نظام الملفات. مطلوب نسخة منفصلة من الخدمة لكل نظام ملفات. هناك خيار "رتبة" ، والذي يسمح لك بإنشاء ما يشبه العديد من أنظمة الملفات في نظام واحد - لم يتم اختباره أيضًا.



ceph-mon - تقوم هذه الخدمة بتخزين خريطة العنقود. يتضمن معلومات حول جميع OSDs ، وخوارزمية توزيع PG في OSD ، والأهم من ذلك ، معلومات حول جميع الكائنات (تفاصيل هذه الآلية ليست واضحة بالنسبة لي: هناك دليل /var/lib/ceph/mon/.../store.db ، فيه يوجد ملف كبير - 26 ميجابايت ، وفي مجموعة من 105 ألف كائن ، يتبين أنه يزيد قليلاً عن 256 بايت لكل كائن - أعتقد أن الشاشة تخزن قائمة بجميع الكائنات و PG التي توجد فيها). تلف هذا الدليل يؤدي إلى فقدان كافة البيانات في الكتلة. ومن ثم ، تم الاستنتاج أن CRUSH يوضح كيفية وجود PGs على OSD ، وكيف يتم وضع الكائنات على PG - في قاعدة البيانات (تبين أن الاستنتاج غير صحيح ، ما يحتويه بالضبط ، يتطلب توضيحًا). ونتيجة لذلك ، أولاً ، لا يمكننا تثبيت النظام على محرك أقراص USB محمول في وضع RO ، حيث يتم كتابة قاعدة البيانات باستمرار ،هناك حاجة إلى قرص إضافي لهذه البيانات (بالكاد يزيد عن 1 غيغابايت) ، وثانيًا ، تحتاج إلى الحصول على نسخة من قاعدة البيانات هذه في الوقت الفعلي. إذا كان هناك العديد من الشاشات ، يتم توفير التسامح مع الخطأ على حسابها ، ولكن إذا كان هناك جهاز عرض واحد فقط ، كحد أقصى ، فمن الضروري ضمان حماية البيانات. هناك إجراء نظري لاستعادة الشاشة استنادًا إلى بيانات OSD ، في الوقت الذي تمت استعادته فيه على مستوى الكائن ، لم يتم استعادة نظام الملفات في الوقت الحالي. حتى الآن ، لا يمكنك الاعتماد على هذه الآلية.في الوقت الحالي ، تبين أنه تمت استعادته على مستوى الكائن ، ولم يكن نظام الملفات في الوقت الحالي قادرًا على الاستعادة. حتى الآن ، لا يمكنك الاعتماد على هذه الآلية.في الوقت الحالي ، تبين أنه تمت استعادته على مستوى الكائن ، ولم يكن نظام الملفات في الوقت الحالي قادرًا على الاستعادة. حتى الآن ، لا يمكنك الاعتماد على هذه الآلية.



rados-gw - تصدير تخزين الكائن عبر S3 وما شابه. يخلق العديد من التجمعات ، ليس من الواضح لماذا. لم تجرب كثيرا.



ceph-mgr - عند تثبيت هذه الخدمة ، يتم بدء تشغيل عدة وحدات. واحد منهم هو مقياس تلقائي غير معطل. تسعى جاهدة للحفاظ على الكمية الصحيحة من PG / OSD. إذا كنت تريد التحكم في النسبة يدويًا ، يمكنك تعطيل القياس لكل تجمع ، ولكن في هذه الحالة ، تقع الوحدة مع قسمة على 0 ، وتصبح حالة الكتلة خطأ. تم كتابة الوحدة بلغة python ، وإذا قمت بتعليق السطر الضروري فيها ، فهذا يؤدي إلى تعطيلها. التفاصيل كسولة للغاية بحيث لا يمكن تذكرها.



المراجع:



تثبيت CEPH

الاسترداد من فشل مراقبة كامل

مقال عن

BlueStore في Ceph وصف هندسة 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 <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 محمول ويستبعد المجموعات التي تحتوي على أقل من ثلاث عقد.سياسة المطورين العدوانية فيما يتعلق بالميزات الاختيارية. بعيد عن البساطة. التوثيق على المستوى: "على ما لدينا - شكرًا بالفعل ، ولكن نادرًا جدًا." يتم توفير القدرة على التفاعل مع الخدمات على مستوى منخفض ، ولكن الوثائق سطحية للغاية في هذا الموضوع ، لذلك على الأرجح لا من نعم. عمليا لا توجد فرصة لاستعادة البيانات في حالة الطوارئ (بفضل تفسيرات المجتمع ، لا تزال الفرصة قائمة).لا توجد فرصة تقريبًا لاستعادة البيانات في حالة الطوارئ (بفضل تفسيرات المجتمع ، لا تزال هناك فرصة).عمليا لا توجد فرصة لاستعادة البيانات في حالة الطوارئ (بفضل تفسيرات المجتمع ، لا تزال الفرصة قائمة).



خيارات لمزيد من الإجراءات: التخلي عن CEPH واستخدام btrfs العادي متعدد الأقراص (أو xfs ، zfs) ، وتعلم معلومات جديدة حول CEPH ، والتي ستسمح لك بتشغيله في ظل الظروف المحددة ، حاول كتابة التخزين الخاص بك كترقية.



All Articles