- ما هي اللقطات وأين يمكن العثور عليها
- كيف تتجلى المشكلة
- استراتيجيات التعافي الممكنة وما الذي تعنيه كل منها
لمحة عامة عن لقطات Keeper
ما هي اللقطة؟
أين يمكنني العثور على اللقطات؟
/var/lib/clickhouse/coordination/snapshots/، أو في المسار المخصّص الذي تحدّده snapshot_storage_path في ملف keeper_server.xml. وتُسمّى اللقطات بأرقام متزايدة (على سبيل المثال: snapshot.23)، بحيث تحمل اللقطات الأحدث أرقامًا أكبر.
في المجموعات متعددة العُقد، تكون لكل عقدة Keeper دليل لقطات خاص بها.
يُعدّ اتساق اللقطات بين العُقد أمرًا بالغ الأهمية للتعافي.
الأعراض والمظاهر الرئيسية لتلف لقطات Keeper
مؤشرات السجل:
قبل تشخيص تلف اللقطة، تحقق من سجلات Keeper بحثًا عن أنماط أخطاء محددة:
التعافي من لقطات Keeper التالفة
- أوقف جميع عُقد Keeper لمنع تفاقم التلف
- أنشئ نسخة احتياطية من كل شيء عبر نسخ دليل التنسيق بالكامل إلى موقع آمن
- تحقّق من نصاب العنقود للتأكد من أن عقدة واحدة على الأقل تحتوي على بيانات سليمة
1. الاستعادة من نسخة احتياطية موجودة
- كان تلف البيانات الوصفية أو اللقطات في Keeper يجعل البيانات الحالية غير قابلة للاستعادة.
- كانت هناك نسخة احتياطية تتضمن حالة سليمة ومعروفة لـ Keeper.
- حدِّد أحدث نسخة احتياطية وتحقّق من اتساق البيانات الوصفية فيها.
- أوقف خدمتي ClickHouse وKeeper.
- استبدل اللقطات والسجلات التالفة بتلك الموجودة في دليل النسخة الاحتياطية.
- أعد تشغيل عنقود Keeper وتحقّق من مزامنة البيانات الوصفية.
2. التراجع إلى لقطة أقدم
- تكون اللقطات الحديثة تالفة، بينما تظل اللقطات الأقدم قابلة للاستخدام.
- تكون السجلات التزايدية سليمة، بما يتيح استردادًا متسقًا.
- حدِّد واختر لقطة أقدم صالحة (مثلًا، snapshot.19) من دليل Keeper.
- أزل اللقطات والسجلات الأحدث.
- أعد تشغيل Keeper لكي يعيد تطبيق السجلات ويُعيد بناء حالة البيانات الوصفية.
3. استعادة البيانات الوصفية باستخدام SYSTEM RESTORE REPLICA
- عند فقدان البيانات الوصفية في Keeper أو تلفها، مع بقاء بيانات الجدول موجودة على القرص
- عند انتقال الجداول إلى وضع القراءة فقط بسبب فقدان البيانات الوصفية في ZooKeeper/Keeper
- عندما تحتاج إلى إعادة إنشاء البيانات الوصفية في Keeper استنادًا إلى أجزاء البيانات المتوفرة محليًا
-
تحقّق من وجود بيانات الجدول محليًا في مسار بيانات clickHouse-server، والمحدَّد بواسطة
<path>في config. (المسار الافتراضي هو/var/lib/clickhouse/data/) - لكل جدول متأثر، نفّذ:
- للاسترداد على مستوى قاعدة البيانات (إذا كنت تستخدم محرك قاعدة البيانات Replicated):
- انتظر حتى يكتمل التزامن:
- تحقّق من نجاح الاستعادة عبر فحص
system.replicasللتأكد من أنis_readonly = 0، ومراقبةsystem.detached_parts
كيف يعمليقوم
SYSTEM RESTORE REPLICA بفصل جميع الأجزاء الحالية، وإعادة إنشاء البيانات الوصفية في Keeper (كما لو كان جدولًا فارغًا جديدًا)، ثم يعيد إرفاق جميع الأجزاء. وهذا يجنّب إعادة تنزيل البيانات عبر الشبكة.4. حذف بيانات تعريف النسخة المتماثلة في Keeper وإعادة إنشائها
- إذا كان الخطأ يحدث في نسخة متماثلة واحدة من العنقود وكانت بيانات التعريف الخاصة بها في Keeper تالفة أو غير متسقة
- إذا واجهت أخطاء مثل “Part XXXXX intersects previous part YYYYY”
- إذا كنت بحاجة إلى إعادة تعيين بيانات تعريف النسخة المتماثلة في Keeper بالكامل مع الحفاظ على البيانات المحلية
- على النسخة المتماثلة المتأثرة، افصل الجدول:
- أزل البيانات الوصفية للنسخة المتماثلة من Keeper (نفّذ ذلك على أي نسخة متماثلة):
- أعِد إرفاق الجدول (سيكون في وضع القراءة فقط):
- استعِد البيانات الوصفية للنسخة المتماثلة:
- زامِن مع النسخ المتماثلة الأخرى:
- تحقّق من
system.detached_partsعلى جميع النسخ المتماثلة بعد الاستعادة
- أوقِف خادم ClickHouse
- أنشئ علامة الاستعادة:
- شغّل خادم ClickHouse
- سيحذف الخادم العلامة تلقائيًا ويستعيد جميع الجداول المُكرَّرة
- راقب السجلات لمتابعة تقدّم التعافي
5. إعادة بناء مجموعة Keeper
- عدم توفر أي لقطات أو سجلات أو نسخ احتياطية صالحة للاسترداد.
- الحاجة إلى إعادة إنشاء مجموعة Keeper بالكامل وبياناتها الوصفية.
- أوقف مجموعتَي ClickHouse وKeeper بالكامل.
- أعد ضبط كل عقدة في Keeper بتنظيف أدلة اللقطات والسجلات.
- هيّئ عقدة واحدة في Keeper لتكون leader، ثم أضف العقد الأخرى بالتدريج.
- أعد استيراد البيانات الوصفية إذا كانت متاحة من سجلات خارجية.