إدارة عنقود O2CB
نظام الملفات المجمع من أوراكل الإصدار 2 (OCFS2) هو نظام ملفات مجمع للأقراص المشتركة متعدد الأغراض مصمم لعمليات القراءة والكتابة المتزامنة النشطة/النشطة (Active/Active) عبر عدة مضيفي افتراضية. في Vapor، يتم التعامل مع البنية التحتية للعنقود وإدارة القفل الموزع من خلال حزمة O2CB (OCFS2 Cluster Base).
يتيح O2CB لعدة عقد Vapor إمكانية تثبيت (Mount) نفس SAN LUN أو هدف iSCSI أو جهاز Multipath NVMe-oF بشكل متزامن، مما يسمح للآلات الافتراضية ومجمعات التخزين المجمعة بالعمل في وقت واحد عبر بنيتك التحتية دون حدوث تلف للبيانات.
أوضاع نبضات القلب (Heartbeat Modes)
يراقب O2CB صحة المضيف ونصاب العنقود من خلال آليتين لنبضات القلب:
| وضع نبضات القلب | الوصف | موصى به لـ |
|---|---|---|
| Local Heartbeat (الافتراضي) | تُكتب بيانات نبضات القلب الوصفية مباشرة إلى كتلة مخصصة في كل نظام ملفات OCFS2 مثبت. إعداد أبسط دون الحاجة لأجهزة مخصصة. | عمليات النشر البسيطة أو ذات التخزين الفردي مع عدد قليل من مخازن البيانات المشتركة. |
| Global Heartbeat | تعمل نبضات القلب على أجهزة كتل منطقة نبضات القلب (Heartbeat region) المستقلة والمخصصة كخدمة خلفية دائمة قبل تثبيت مخازن البيانات. | العناقيد المتسامحة مع الأخطاء ومتعددة العقد، أو بيئات SAN/iSCSI للمؤسسات، أو عمليات الإعداد ذات مخازن البيانات المشتركة المتعددة. |
الترحيل من نبضات القلب المحلية إلى العامة (Global Heartbeat)
تفصل نبضات القلب العامة مراقبة صحة العنقود عن عمليات الإدخال/الإخراج (I/O) لمخازن البيانات الفردية. إذا واجه مخزن بيانات فردي بطئاً مؤقتاً في الإدخال/الإخراج أو توقفات عابرة، فلن يؤدي ذلك إلى تشغيل حدث عزل وحماية للعقدة (Node fencing / هلع النواة kernel panic أو إعادة التشغيل) طالما بقي نصاب نبضات القلب المخصصة سليماً.
المتطلبات الأساسية والبنية المعمارية
لجعل نبضات القلب العامة متسامحة مع الأخطاء حقاً، يجب عليك تكوين 3 أجهزة كتل مشتركة لمناطق نبضات القلب ومُعينة لجميع عقد العنقود، ومن الأفضل أن تكون مدعومة بمزودي تخزين مستقلين أو مجمع تخزين موزع (على سبيل المثال، المنطقة 1 على هدف التخزين A، والمنطقة 2 على هدف التخزين B، والمنطقة 3 على هدف التخزين C):
- تعيين التخزين المشترك (Shared Storage Mapping): يجب على كل مضيف في العنقود إرفاق وتعيين جميع أجهزة كتل نبضات القلب الثلاثة. تقوم كل عقدة بكتابة نبضات قلبها في الخانة المخصصة لها عبر جميع المناطق الثلاث وقراءة نبضات قلب العقد الأخرى منها.
- النصاب والتسامح مع الأخطاء (Quorum & Fault-Tolerance): يستخدم O2CB قاعدة نصاب الأغلبية. ومع وجود 3 مناطق نبضات قلب عبر أهداف تخزين مستقلة، فإن فشل أي خادم تخزين فردي أو مسار شبكة يظل يحافظ على نصاب نشط بنسبة 2/3، مما يمنع عزل العنقود (Cluster fencing).
- تحجيم الأجهزة (Device Sizing): تحتاج أجهزة نبضات القلب المخصصة فقط إلى 500 ميجابايت إلى 1 جيجابايت (GiB) لكل منها. الأقراص الكبيرة غير ضرورية.
- المسارات المتعددة / النقل (Multipath / Transport): قم بتعيين أجهزة كتل نبضات القلب الثلاثة لجميع عقد العنقود عبر واجهات شبكة متكررة وفائضة (مثل multipath iSCSI، أو بنية SAN، أو NVMe-oF).
- توفر الأجهزة (Device Availability): تأكد من اكتشاف أجهزة الكتل وتعيينها بشكل دائم على كل مضيف عند الإقلاع.
دليل الترحيل خطوة بخطوة
اتبع هذه الخطوات بالتسلسل لتحويل عنقود نشط من وضع نبضات القلب المحلي (Local) إلى العام (Global):
[الخطوة 1: تهدئة أجهزة VM] ──► [الخطوة 2: الدخول في الصيانة] ──► [الخطوة 3: تعيين الوضع العام]
│
[الخطوة 6: الخروج من الصيانة] ◄── [الخطوة 5: تحديث Superblocks] ◄── [الخطوة 4: إضافة 3 مناطق نبضات قلب]الخطوة 1: تهدئة أحمال العمل / الآلات الافتراضية (VMs)
قبل تعديل معلمات نبضات القلب على مستوى العنقود، يجب إيقاف جميع عمليات الإدخال/الإخراج (I/O) النشطة على مخازن البيانات المشتركة:
- قم بترحيل الآلات الافتراضية قيد التشغيل ترحيلاً حياً (Live-migrate) إلى مجمعات تخزين خارج العنقود المستهدف، أو قم بإيقاف تشغيل الآلات الافتراضية بشكل نظيف.
- تأكد من عدم وجود أي عمليات أو حاويات تحتفظ بمقابض ملفات مفتوحة لنقاط تثبيت OCFS2.
الخطوة 2: الدخول في وضع الصيانة على جميع العقد
يجب على جميع العقد في العنقود إلغاء تثبيت مخازن البيانات المشتركة وإلغاء التسجيل من حزمة نواة O2CB قبل التمكن من تغيير وضع نبضات القلب:
- في لوحة تحكم Vapor على الويب، انتقل إلى Storage > O2CB Cluster.
- انقر فوق Enter Maintenance في كل عقدة.
- يتحقق Vapor من الأقفال النشطة، ويلغي تثبيت جميع أنظمة ملفات OCFS2 النشطة بأمان، ويوقف نبضات القلب المحلية، ويلغي تسجيل العنقود من ذاكرة النواة الحية.
الخطوة 3: تبديل وضع نبضات القلب إلى عام (Global)
- في أي عقدة من عقد العنقود، افتح قائمة إجراءات العنقود (⋮) في الشريط العلوي وانقر فوق Set Heartbeat Mode (global).
- في مربع حوار التأكيد، أكد تغيير الوضع من
localإلىglobal. - يقوم Vapor بتحديث
/etc/ocfs2/cluster.confبالقيمةheartbeat_mode = globalومزامنة التغيير عبر أعضاء العنقود.
الخطوة 4: إضافة 3 أجهزة لمناطق نبضات القلب
- في بطاقة Heartbeat Regions، انقر فوق Add Heartbeat.
- أدخل مسار جهاز الكتلة لأول LUN لنبضات القلب المشتركة (مثل
/dev/mapper/mpath-hb1أو/dev/sdb). - انقر فوق Create.
- إذا كان جهاز الكتلة خامًا وغير مهيأ ($\le 1\text{ GiB}$)، يقوم Vapor بتهيئته تلقائيًا باستخدام
mkfs.ocfs2 --global-heartbeatويستخرج المعرف الفريد UUID للمنطقة.
- إذا كان جهاز الكتلة خامًا وغير مهيأ ($\le 1\text{ GiB}$)، يقوم Vapor بتهيئته تلقائيًا باستخدام
- كرر هذه الخطوة للمنطقة 2 والمنطقة 3.
الخطوة 5: تحديث البيانات الوصفية لحزمة العنقود على القرص في مخازن البيانات الحالية
عندما تتم تهيئة وحدة تخزين OCFS2 في الأصل تحت وضع نبضات القلب المحلي، يتم ختم superblock الخاص بها على القرص بـ local. إذا حاولت تثبيت وحدة تخزين بوضع محلي بينما تعمل حزمة نواة O2CB في الوضع العام، فسيفشل التثبيت مع الخطأ التالي: mount.ocfs2: Heartbeat mode is invalid while trying to join the group
لتحديث مخازن البيانات الحالية لتتوافق مع حزمة نبضات القلب العامة الجديدة:
- حدد جهاز الكتلة أو مسار WWN لمخزن البيانات المشترك الخاص بك (مثل
/dev/disk/by-id/wwn-0x60000...). - افحص حزمة العنقود الحالية على القرص مقابل الحزمة قيد التشغيل:bash
sudo o2cluster -o /dev/disk/by-id/<wwn-id> # المخرجات: o2cb,<cluster-name>,local - قم بتحديث superblock على القرص أثناء إلغاء تثبيت نظام الملفات:bash(أكد بـ
sudo tunefs.ocfs2 --update-cluster-stack /dev/disk/by-id/<wwn-id>yعند المطالبة). - تحقق من مطابقة الحزمة على القرص الآن:bash(ملاحظة: نظرًا لأن هذا يحدث superblock للقرص المشترك، فإن تنفيذ هذا الأمر على عقدة واحدة يحدثه تلقائيًا لجميع أعضاء العنقود).
sudo o2cluster -o /dev/disk/by-id/<wwn-id> # المخرجات: o2cb,<cluster-name>,global
الخطوة 6: بدء نبضات القلب والخروج من وضع الصيانة
- في لوحة تحكم Vapor على الويب، انقر فوق Sync to Kernel لتسجيل تكوين العنقود والعقد الجديدة.
- حدد Actions (⋮) > Start Heartbeat لبدء مناطق نبضات القلب العامة الثلاث في النواة.
- انقر فوق Exit Maintenance في كل عقدة.
- يبدأ Vapor مجمعات التخزين، ويعيد تثبيت أنظمة ملفات OCFS2 المشتركة، ويعيد جميع مجمعات تخزين الافتراضية للعمل عبر الإنترنت.
- قم بتشغيل الآلات الافتراضية أو ترحيلها مرة أخرى إلى مجمعات التخزين المشتركة.
إدارة O2CB في لوحة تحكم Vapor على الويب
في وحدة تحكم Vapor على الويب، انتقل إلى Storage > O2CB Cluster لإدارة ومراقبة حالة عنقود O2CB.
1. حالة العنقود والإجراءات
توفر البطاقة العلوية حالة في الوقت الفعلي وأدوات تحكم تشغيلية:
- هوية العنقود: يعرض اسم العنقود الفعلي، ووضع نبضات القلب، وإجمالي عدد العقد المهيأة، ومناطق نبضات القلب النشطة.
- شارات الحالة:
Online(أخضر): العنقود مسجل ونشط في ذاكرة النواة.Offline(رمادي): العنقود متوقف أو غير مسجل.Not in Kernel(أصفر): العنقود موجود في ملف التكوين ولكن لم يتم تسجيله في النواة.
- الإجراءات الأساسية:
- Register Cluster / Sync to Kernel: يحلل
cluster.confتلقائيًا ويزامن جميع العقد في ذاكرة النواة الحية. - Enter Maintenance / Exit Maintenance: يلغي تثبيت أنظمة الملفات النشطة بنظافة ويلغي تسجيل العقدة من العنقود قبل صيانة المضيف.
- Register Cluster / Sync to Kernel: يحلل
- قائمة الإجراءات (
⋮):- Start Heartbeat / Stop Heartbeat: التحكم في تشغيل نبضات القلب العامة (الوضع العالمي فقط).
- Set Heartbeat Mode: التبديل بين وضعي نبضات القلب
localوglobal. - Unregister Cluster: إلغاء تحميل كائنات العنقود من ذاكرة النواة.
- Delete Cluster: حذف تعريف العنقود من
/etc/ocfs2/cluster.conf.
2. إدارة العقد (Nodes Management)
يتيح قسم Nodes للمسؤولين عرض أعضاء العنقود وإضافتهم وإزالتهم:
+---------------------------------------------------------------------------------------------------+
| Node Name Number IP Address Port Status Actions |
+---------------------------------------------------------------------------------------------------+
| reg2-1 1 10.99.16.20 7777 [Local] [✓ In Kernel] — |
| reg2-2 2 10.99.16.21 7777 [✓ In Kernel] [Remove] |
| reg2-3 3 10.99.16.22 7777 [✓ In Kernel] [Remove] |
| reg2-4 4 10.99.16.250 7777 [⚠ Not in Kernel] [Remove] |
+---------------------------------------------------------------------------------------------------+مؤشرات حالة العقدة:
- شارة
Local: تشير إلى أن هذه العقدة تتوافق مع مضيف Vapor المحلي الحالي. ✓ In Kernel(شارة خضراء): تؤكد التعرف على العقدة بشكل نشط في ذاكرة نواة Linux الحية.⚠ Not in Kernel(شارة صفراء): تشير إلى وجود العقدة في/etc/ocfs2/cluster.confولكنها مفقودة من ذاكرة النواة الحية. استخدم Sync to Kernel لتسجيلها مباشرة.
إضافة عقدة:
- أسفل قسم Nodes، افتح نموذج Add Node.
- أدخل Node Name (مثل
n04أوhost-4)، ورقم العقدة Node Number (فهرس الخانة)، وعنوان IP Address، والمنفذ Port (الافتراضي7777). - انقر فوق Add Node.
- يقوم Vapor تلقائيًا بحفظ العقدة في
/etc/ocfs2/cluster.confوينفذ التسجيل المباشر فورًا لمزامنة العقدة في ذاكرة النواة دون أي فترة توقف.
إزالة عقدة:
- انقر فوق Remove بجانب العقدة لحذف إدخالها من ملف التكوين.
3. مناطق نبضات القلب (الوضع العالمي)
عند تمكين وضع نبضات القلب العالمي، يتيح قسم Heartbeat Regions للمسؤولين:
- إضافة مسارات أجهزة الكتل (مثل
/dev/mapper/mpathaأو/dev/sdb) للمشاركة في نبضات قلب العنقود. - إزالة أجهزة نبضات القلب غير المستخدمة أو التي تم إيقاف تشغيلها.
سير عمل وضع الصيانة (Maintenance Mode)
قبل إجراء صيانة لشبكة التخزين قد تؤدي إلى انقطاع (مثل ترقيات البرامج الثابتة للمحولات، أو إعادة تكوين المسارات المتعددة، أو استبدال محولات HBA/NIC)، ضع المضيف في وضع الصيانة:
- انقر فوق Enter Maintenance في رأس العنقود.
- يجري Vapor فحص أمان أولي:
- يحدد جميع أنظمة ملفات OCFS2 المثبتة.
- يتحقق مما إذا كانت الأقراص الافتراضية للآلات الافتراضية أو أحمال العمل النشطة تستخدم التخزين.
- يلغي تثبيت جميع مجمعات تخزين OCFS2 النشطة بنظافة.
- يوقف خدمات نبضات القلب ويلغي تسجيل العقدة من حزمة O2CB.
- بمجرد اكتمال العمل الفعلي، انقر فوق Exit Maintenance لإعادة تسجيل العنقود وبدء نبضات القلب وإعادة تثبيت مخازن البيانات المشتركة.
لا تقم أبدًا بإلغاء التثبيت القسري أثناء تشغيل الآلات الافتراضية
سيؤدي إيقاف تشغيل المضيف فجأة دون إلغاء تثبيت أنظمة ملفات OCFS2 النشطة إلى تفعيل الحماية الذاتية (Self-fencing / هلع النواة أو إعادة التشغيل الفوري) لـ O2CB لمنع تلف البيانات الناتج عن انقسام الدماغ (Split-brain).
مرجع REST API
يوفر Vapor واجهة برمجة تطبيقات REST كاملة لإدارة عنقود O2CB:
| الطريقة | نقطة النهاية | الوصف |
|---|---|---|
GET | /storage/o2cb/clusters | سرد جميع عناقيد O2CB المهيأة. |
POST | /storage/o2cb/clusters | إنشاء تعريف عنقود O2CB جديد. |
GET | /storage/o2cb/clusters/{name} | الحصول على تفاصيل تكوين العنقود والعقد. |
DELETE | /storage/o2cb/clusters/{name} | حذف تكوين عنقود O2CB. |
GET | /storage/o2cb/clusters/{name}/status | الاستعلام عن حالة النواة الحية للعنقود. |
POST | /storage/o2cb/clusters/{name}/register | تسجيل العنقود ديناميكيًا ومزامنة العقد مع النواة. |
POST | /storage/o2cb/clusters/{name}/unregister | إلغاء تسجيل العنقود من ذاكرة النواة الحية. |
GET | /storage/o2cb/clusters/{name}/nodes | سرد جميع العقد الأعضاء مع حالة النواة. |
POST | /storage/o2cb/clusters/{name}/nodes | إضافة عقدة عضو جديدة وتسجيلها تلقائيًا مباشرة. |
DELETE | /storage/o2cb/clusters/{name}/nodes/{node} | إزالة عقدة عضو. |
GET | /storage/o2cb/clusters/{name}/heartbeats | سرد جميع مناطق نبضات القلب المهيأة. |
POST | /storage/o2cb/clusters/{name}/heartbeats | إضافة جهاز منطقة نبضات قلب. |
DELETE | /storage/o2cb/clusters/{name}/heartbeats/{device} | إزالة جهاز منطقة نبضات قلب. |
PUT | /storage/o2cb/clusters/{name}/heartbeat-mode | تعيين وضع نبضات القلب (local أو global). |
GET | /storage/o2cb/clusters/{name}/maintenance/preflight | إجراء فحص أولي قبل الدخول في وضع الصيانة. |
POST | /storage/o2cb/clusters/{name}/maintenance/enter | الدخول بأمان في وضع صيانة O2CB. |
POST | /storage/o2cb/clusters/{name}/maintenance/exit | الخروج من وضع الصيانة وإعادة تثبيت مخازن البيانات. |
مرجع CLI
يمكن للمسؤولين الذين لديهم وصول عبر SSH أو وحدة التحكم فحص حالة O2CB باستخدام أدوات CLI القياسية:
# التحقق من حالة العنقود في ذاكرة النواة
sudo o2cb cluster-status <اسم-العنقود>
# تسجيل التكوين في النواة قيد التشغيل
sudo o2cb register-cluster <اسم-العنقود>
# إلغاء تسجيل العنقود من النواة
sudo o2cb unregister-cluster <اسم-العنقود>
# فحص العقد النشطة في configfs للنواة
ls -la /sys/kernel/config/cluster/<اسم-العنقود>/node/
# بدء وإيقاف خدمة نبضات القلب العامة
sudo o2cb start-heartbeat <اسم-العنقود>
sudo o2cb stop-heartbeat <اسم-العنقود>
# فحص حزمة العنقود على القرص مقابل الحزمة قيد التشغيل
sudo o2cluster -o /dev/disk/by-id/<device>
sudo o2cluster -r
# تحديث حزمة عنقود نظام الملفات على القرص لتطابق العنقود قيد التشغيل
sudo tunefs.ocfs2 --update-cluster-stack /dev/disk/by-id/<device>استكشاف الأخطاء وإصلاحها وأفضل الممارسات
1. حل تعارض حالة العقدة "Not in Kernel"
- السبب: تمت إضافة العقدة إلى
/etc/ocfs2/cluster.confمباشرة أو أثناء عدم اتصال حزمة العنقود. - الحل: انقر فوق زر Sync to Kernel في واجهة مستخدم Vapor أو نفذ
sudo o2cb register-cluster <اسم-العنقود>عبر CLI.
2. متطلبات الجدار الناري للشبكة
- يجب أن تكون جميع عقد العنقود المشاركة قادرة على الاتصال ثنائي الاتجاه عبر منفذ TCP
7777. تأكد من أن قواعد الجدار الناري تسمح بحركة المرور بين واجهات شبكة التخزين:bashsudo ufw allow 7777/tcp # أو باستخدام firewalld: sudo firewall-cmd --permanent --add-port=7777/tcp && sudo firewall-cmd --reload
3. عدم تطابق وضع نبضات القلب عند التثبيت (Mount)
- العَرَض:
mount.ocfs2: Heartbeat mode is invalid while trying to join the group - السبب: العنقود قيد التشغيل في وضع نبضات القلب العام
global، ولكن نظام الملفات على القرص مختوم بالوضع المحليlocal. - الحل: نفّذ
sudo tunefs.ocfs2 --update-cluster-stack /dev/disk/by-id/<device>أثناء إلغاء تثبيت وحدة التخزين.
4. قواعد الحماية (Fencing) والنصاب القانوني (Quorum)
- يستخدم OCFS2 خوارزمية نصاب الأغلبية. في حال انقطاع الاتصال بين العقد، ستعزل الأجزاء الأقلية نفسها تلقائيًا (إعادة تشغيل فورية) لحماية سلامة البيانات. تأكد من تكوين روابط شبكة مكررة (Bonds / Multipath) على واجهات التخزين.