تخزين الكتلة لمجموعات الويب الصغيرة القائمة على drbd + ocfs2

ما سوف نتحدث عنه:
كيفية نشر التخزين المشترك بسرعة لخادمين بناءً على حلول drbd + ocfs2.

لمن ستكون مفيدة:
سيكون البرنامج التعليمي مفيدًا لمسؤولي النظام وأي شخص يختار طريقة تنفيذ للتخزين أو يريد تجربة حل.

ما القرارات التي رفضناها ولماذا


غالبًا ما نواجه موقفًا نحتاج فيه إلى تنفيذ وحدة تخزين مشتركة على مجموعة ويب صغيرة ذات أداء قراءة وكتابة جيد. لقد جربنا العديد من الخيارات لتنفيذ مستودع مشترك لمشاريعنا ، لكن القليل كان قادراً على إرضاءنا على الفور لعدة مؤشرات. الآن دعنا نفسر السبب.

  • لم يكن Glusterfs يناسبنا بأداء القراءة والكتابة ، كانت هناك مشاكل في القراءة المتزامنة لعدد كبير من الملفات ، كان هناك حمل كبير على وحدة المعالجة المركزية. يمكن حل مشكلة قراءة الملفات عن طريق التقدم بطلب للحصول عليها مباشرة من الطوب ، ولكن هذا لا ينطبق دائما وغير صحيح بشكل عام.

  • لم يعجب Ceph التعقيد المفرط ، الذي يمكن أن يكون ضارًا في المشاريع التي تحتوي على 2-4 خوادم ، خاصةً إذا تمت صيانة المشروع لاحقًا. مرة أخرى ، هناك قيود خطيرة على الأداء تُجبرك على إنشاء مجموعات تخزين منفصلة ، كما هو الحال مع glusterfs.

  • يؤدي استخدام خادم nfs واحد لتنفيذ التخزين المشترك إلى زيادة مشكلات تحمل الأخطاء.

  • s3 هو حل شائع ممتاز لمجموعة معينة من المهام ، لكنه ليس نظام ملفات ، يضيق النطاق.

  • lsyncd. إذا بدأنا بالفعل الحديث عن "أنظمة غير ملفات" ، فمن الجدير بنا أن نتجاوز هذا الحل الشائع. لا يقتصر الأمر على أنه ليس مناسبًا للتبادل ثنائي الاتجاه (ولكن إذا كنت ترغب حقًا في ذلك ، يمكنك ذلك) ، كما أنه لا يعمل بثبات على عدد كبير من الملفات. وهناك إضافة لطيفة إلى كل شيء سيكون أنها مترابطة واحدة. السبب هو بنية البرنامج: يستخدم inotify لمراقبة كائنات العمل التي يعلقها عند بدء التشغيل وأثناء إعادة الفحص. يستخدم Rsync كوسيلة انتقال.

البرنامج التعليمي: كيفية نشر التخزين المشترك على أساس drbd + ocfs2


أحد الحلول الأكثر ملاءمة بالنسبة لنا كان مجموعة من ocfs2 + drbd . الآن سنعرض لك كيفية نشر التخزين المشترك بسرعة لخادمين بناءً على قاعدة بيانات للحلول. ولكن أولا ، قليلا عن المكونات:

DRBD هو نظام تخزين Linux القياسي الذي يسمح بنسخ البيانات بين مجموعات الخوادم. التطبيق الرئيسي هو بناء التخزين خطأ التسامح.

OCFS2 هو نظام ملفات يوفر الاستخدام المشترك لنفس التخزين بواسطة أنظمة متعددة. يتم تضمينها في توزيع Linux وهي عبارة عن وحدة kernel وأدوات مساحة المستخدمين للعمل مع FS. يمكن استخدام OCFS2 ليس فقط أعلى DRBD ، ولكن أيضًا أعلى iSCSI مع اتصالات متعددة. في مثالنا ، نستخدم DRBD.

يتم تنفيذ جميع الإجراءات على خادم أوبونتو 18.04 في تكوين الحد الأدنى.

الخطوة 1. تكوين DRBD:

في الملف /etc/drbd.d/drbd0.res ، نصف جهاز الكتلة الظاهرية / dev / drbd0:

resource drbd0 { syncer { rate 1000M; } net { allow-two-primaries; after-sb-0pri discard-zero-changes; after-sb-1pri discard-secondary; after-sb-2pri disconnect; } startup { become-primary-on both; } on drbd1 { meta-disk internal; device /dev/drbd0; disk /dev/vdb1; address 10.10.10.192:7789; } on drbd2 { meta-disk internal; device /dev/drbd0; disk /dev/vdb1; address 10.10.10.193:7789; } } 

قرص تعريف داخلي - استخدم نفس أجهزة الكتلة لتخزين البيانات الوصفية
الجهاز / dev / drbd0 - استخدم / dev / drbd0 كمسار لوحدة التخزين drbd.
disk / dev / vdb1 - استخدم / dev / vdb1
syncer {rate 1000M؛ } - استخدام النطاق الترددي لقناة جيجابت
allow-two-primaries - خيار مهم للسماح بقبول التغييرات على خادمين أساسيين
after-sb-0pri، after-sb-1pri، after-sb-2pri - الخيارات المسؤولة عن تصرفات العقدة عند اكتشاف splitbrain. انظر الوثائق لمزيد من التفاصيل.
أصبح - أساسي - على حد سواء - يضبط كلا العقدتين على الأساسي.

في حالتنا ، لدينا جهازان VM متطابقان تمامًا ، مع نطاق ترددي مخصص للشبكة الافتراضية يبلغ 10 غيغا بايت.

في المثال الخاص بنا ، تكون أسماء الشبكات لعقدتي نظامي drbd1 و drbd2. للتشغيل السليم ، يجب عليك تعيين أسماء وعناوين IP للعُقد في / etc / hosts.

 10.10.10.192 drbd1 10.10.10.193 drbd2 

الخطوة 2. تكوين العقد:

على الخادمين ننفذ:
 drbdadm create-md drbd0 

صورة

 modprobe drbd drbdadm up drbd0 cat /proc/drbd 

نحصل على ما يلي:

صورة

يمكنك بدء التزامن. على العقدة الأولى ما عليك القيام به:
 drbdadm primary --force drbd0 

نحن ننظر إلى الحالة:
 cat /proc/drbd 

صورة

عظيم ، بدأ التزامن. نحن ننتظر النهاية ونرى الصورة:

صورة

الخطوة 3. نبدأ التزامن في الملاحظة الثانية:

 drbdadm primary --force drbd0 

نحصل على ما يلي:

صورة

الآن يمكننا الكتابة إلى drbd من خادمين.

الخطوة 4. تثبيت وتكوين ocfs2.

سوف نستخدم تكوين تافه إلى حد ما:

 cluster: node_count = 2 name = ocfs2cluster node: number = 1 cluster = ocfs2cluster ip_port = 7777 ip_address = 10.10.10.192 name = drbd1 node: number = 2 cluster = ocfs2cluster ip_port = 7777 ip_address = 10.10.10.193 name = drbd2 

يجب أن تكون مكتوبة في /etc/ocfs2/cluster.conf على كلا العقدتين.

إنشاء FS على drbd0 على أي عقدة:
 mkfs.ocfs2 -L "testVol" /dev/drbd0 

هنا أنشأنا نظام الملفات المسمى testVol على drbd0 باستخدام الإعدادات الافتراضية.

صورة

في / etc / default / o2cb يجب تعيين (كما هو الحال في ملف التكوين لدينا)
 O2CB_ENABLED=true O2CB_BOOTCLUSTER=ocfs2cluster 

وتنفيذها على كل عقدة:
 o2cb register-cluster ocfs2cluster 

بعد ذلك ، قم بتشغيل جميع الوحدات التي نحتاجها:
 systemctl enable drbd o2cb ocfs2 systemctl start drbd o2cb ocfs2 

سيتم تشغيل جزء من هذا بالفعل أثناء عملية الإعداد.

الخطوة 5. إضافة نقاط التحميل إلى fstab على كلا العقدتين:

 /dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0 

يجب إنشاء الدليل / media / المشترك مقدمًا.

هنا نستخدم خيارات noauto ، مما يعني أنه لن يتم تثبيت الخدمة الثابتة عند بدء التشغيل (أفضل تثبيت الشبكة FS عبر systemd) و heartbeat = local ، مما يعني استخدام خدمة نبضات القلب على كل عقدة. هناك أيضًا دقات قلب عالمية ، وهو أكثر ملاءمة للمجموعات الكبيرة.

بعد ذلك ، يمكنك تحميل / وسائط / مشترك والتحقق من تزامن المحتوى.

القيام به! نتيجة لذلك ، نحصل على مساحة تخزين أكثر أو أقل تحملاً للأخطاء مع قابلية التوسع والأداء اللائق.

Source: https://habr.com/ru/post/ar445612/


All Articles