Skip to main content
يمكن أن تتسبب لقطات ClickHouse Keeper التالفة أو غير الصالحة في حدوث قدر كبير من عدم استقرار النظام، مثل عدم اتساق البيانات الوصفية، أو تحول الجداول إلى حالة read-only، أو استنزاف الموارد، أو فشل النسخ الاحتياطية. تتناول هذه المقالة ما يلي:

لمحة عامة عن لقطات Keeper

ما هي اللقطة؟

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

أين يمكنني العثور على اللقطات؟

تُخزَّن اللقطات كملفات على نظام الملفات المحلي لعُقد Keeper. افتراضيًا، تُحفَظ في /var/lib/clickhouse/coordination/snapshots/، أو في المسار المخصّص الذي تحدّده snapshot_storage_path في ملف keeper_server.xml. وتُسمّى اللقطات بأرقام متزايدة (على سبيل المثال: snapshot.23)، بحيث تحمل اللقطات الأحدث أرقامًا أكبر. في المجموعات متعددة العُقد، تكون لكل عقدة Keeper دليل لقطات خاص بها.
يُعدّ اتساق اللقطات بين العُقد أمرًا بالغ الأهمية للتعافي.

الأعراض والمظاهر الرئيسية لتلف لقطات Keeper

يوضح الجدول أدناه بعض الأعراض والمظاهر الشائعة لتلف لقطات Keeper: مؤشرات السجل: قبل تشخيص تلف اللقطة، تحقق من سجلات Keeper بحثًا عن أنماط أخطاء محددة:

التعافي من لقطات Keeper التالفة

قبل التعامل مع أي ملفات، احرص دائمًا على ما يلي:
  1. أوقف جميع عُقد Keeper لمنع تفاقم التلف
  2. أنشئ نسخة احتياطية من كل شيء عبر نسخ دليل التنسيق بالكامل إلى موقع آمن
  3. تحقّق من نصاب العنقود للتأكد من أن عقدة واحدة على الأقل تحتوي على بيانات سليمة

1. الاستعادة من نسخة احتياطية موجودة

ينبغي اتباع هذه العملية إذا:
  • كان تلف البيانات الوصفية أو اللقطات في Keeper يجعل البيانات الحالية غير قابلة للاستعادة.
  • كانت هناك نسخة احتياطية تتضمن حالة سليمة ومعروفة لـ Keeper.
اتبع الخطوات التالية لاستعادة نسخة احتياطية موجودة:
  1. حدِّد أحدث نسخة احتياطية وتحقّق من اتساق البيانات الوصفية فيها.
  2. أوقف خدمتي ClickHouse وKeeper.
  3. استبدل اللقطات والسجلات التالفة بتلك الموجودة في دليل النسخة الاحتياطية.
  4. أعد تشغيل عنقود Keeper وتحقّق من مزامنة البيانات الوصفية.
أنشئ نسخًا احتياطية بانتظامإذا كانت النسخ الاحتياطية قديمة، فقد تفقد بعض التغييرات الأخيرة في البيانات الوصفية. لذلك، نوصي بإنشاء نسخ احتياطية بانتظام.

2. التراجع إلى لقطة أقدم

يجب اتباع هذه العملية في الحالات التالية:
  • تكون اللقطات الحديثة تالفة، بينما تظل اللقطات الأقدم قابلة للاستخدام.
  • تكون السجلات التزايدية سليمة، بما يتيح استردادًا متسقًا.
اتبع الخطوات التالية للتراجع إلى لقطة أقدم:
  1. حدِّد واختر لقطة أقدم صالحة (مثلًا، snapshot.19) من دليل Keeper.
  2. أزل اللقطات والسجلات الأحدث.
  3. أعد تشغيل Keeper لكي يعيد تطبيق السجلات ويُعيد بناء حالة البيانات الوصفية.
خطر عدم تزامن البيانات الوصفيةهناك خطر بحدوث عدم تزامن في البيانات الوصفية إذا كانت اللقطات والسجلات مفقودة أو غير مكتملة.

3. استعادة البيانات الوصفية باستخدام SYSTEM RESTORE REPLICA

يُوصى باتباع هذه العملية في الحالات التالية:
  • عند فقدان البيانات الوصفية في Keeper أو تلفها، مع بقاء بيانات الجدول موجودة على القرص
  • عند انتقال الجداول إلى وضع القراءة فقط بسبب فقدان البيانات الوصفية في ZooKeeper/Keeper
  • عندما تحتاج إلى إعادة إنشاء البيانات الوصفية في Keeper استنادًا إلى أجزاء البيانات المتوفرة محليًا
اتبع الخطوات التالية لاستعادة البيانات الوصفية:
  1. تحقّق من وجود بيانات الجدول محليًا في مسار بيانات clickHouse-server، والمحدَّد بواسطة <path> في config. (المسار الافتراضي هو /var/lib/clickhouse/data/)
  2. لكل جدول متأثر، نفّذ:
  1. للاسترداد على مستوى قاعدة البيانات (إذا كنت تستخدم محرك قاعدة البيانات Replicated):
  1. انتظر حتى يكتمل التزامن:
  1. تحقّق من نجاح الاستعادة عبر فحص system.replicas للتأكد من أن is_readonly = 0، ومراقبة system.detached_parts
كيف يعمليقوم SYSTEM RESTORE REPLICA بفصل جميع الأجزاء الحالية، وإعادة إنشاء البيانات الوصفية في Keeper (كما لو كان جدولًا فارغًا جديدًا)، ثم يعيد إرفاق جميع الأجزاء. وهذا يجنّب إعادة تنزيل البيانات عبر الشبكة.
المتطلبات الأساسيةلا ينجح هذا إلا إذا كانت أجزاء البيانات المحلية سليمة. وإذا كانت البيانات تالفة أيضًا، فاستخدم الاستراتيجية رقم 5 (إعادة بناء العنقود) بدلًا من ذلك.

4. حذف بيانات تعريف النسخة المتماثلة في Keeper وإعادة إنشائها

يجب اتباع هذه العملية في الحالات التالية:
  • إذا كان الخطأ يحدث في نسخة متماثلة واحدة من العنقود وكانت بيانات التعريف الخاصة بها في Keeper تالفة أو غير متسقة
  • إذا واجهت أخطاء مثل “Part XXXXX intersects previous part YYYYY”
  • إذا كنت بحاجة إلى إعادة تعيين بيانات تعريف النسخة المتماثلة في Keeper بالكامل مع الحفاظ على البيانات المحلية
اتبع الخطوات التالية لحذف بيانات التعريف وإعادة إنشائها:
  1. على النسخة المتماثلة المتأثرة، افصل الجدول:
  1. أزل البيانات الوصفية للنسخة المتماثلة من Keeper (نفّذ ذلك على أي نسخة متماثلة):
للعثور على مسار ZooKeeper الصحيح:
  1. أعِد إرفاق الجدول (سيكون في وضع القراءة فقط):
  1. استعِد البيانات الوصفية للنسخة المتماثلة:
  1. زامِن مع النسخ المتماثلة الأخرى:
  1. تحقّق من system.detached_parts على جميع النسخ المتماثلة بعد الاستعادة
نفّذ ذلك على جميع النسخ المتماثلة المتأثرةإذا كان التلف يؤثر في عدة نسخ متماثلة، فكرّر هذه الخطوات على كل واحدة منها بالتتابع.
لقاعدة البيانات بالكاملإذا كنت تستخدم قاعدة بيانات Replicated، فيمكنك استخدام SYSTEM DROP REPLICA ... FROM DATABASE db_name بدلًا من ذلك.
بديل: استخدام علامة force_restore_data للاستعادة التلقائية لجميع الجداول المتماثلة عند بدء تشغيل الخادم:
  1. أوقِف خادم ClickHouse
  2. أنشئ علامة الاستعادة:
  1. شغّل خادم ClickHouse
  2. سيحذف الخادم العلامة تلقائيًا ويستعيد جميع الجداول المُكرَّرة
  3. راقب السجلات لمتابعة تقدّم التعافي
يفيد هذا النهج عندما تحتاج عدة جداول إلى الاستعادة في الوقت نفسه.

5. إعادة بناء مجموعة Keeper

يجب اتباع هذه العملية في الحالات التالية:
  • عدم توفر أي لقطات أو سجلات أو نسخ احتياطية صالحة للاسترداد.
  • الحاجة إلى إعادة إنشاء مجموعة Keeper بالكامل وبياناتها الوصفية.
اتبع الخطوات التالية لإعادة بناء مجموعة Keeper:
  1. أوقف مجموعتَي ClickHouse وKeeper بالكامل.
  2. أعد ضبط كل عقدة في Keeper بتنظيف أدلة اللقطات والسجلات.
  3. هيّئ عقدة واحدة في Keeper لتكون leader، ثم أضف العقد الأخرى بالتدريج.
  4. أعد استيراد البيانات الوصفية إذا كانت متاحة من سجلات خارجية.
عملية تستغرق وقتًا طويلًاهذه العملية تستغرق وقتًا طويلًا وتنطوي على خطر انقطاع ممتد. يلزم إعادة بناء البيانات بالكامل.
آخر تعديل في ٢٣ يوليو ٢٠٢٦