ابدأ الآن

كيف تنسخ حاوية Docker لـElasticsearch احتياطيًا (2026)

يحتاج Elasticsearch تفريغًا متسقًا قبل أن يلمس restic. ينفّذ Dockstash الأمر `PUT _snapshot/<repo>/<snap> via the snapshot API (register a repository first)` داخل الحاوية ويلتقط المخرجات ويخزنها مشفّرة خارجيًا — ولا ينسخ /usr/share/elasticsearch/data حيًا أبدًا، لأن تلتقط واجهة اللقطات عرضًا متسقًا وتزايديًا لحظيًا لكل فهرس بينما تواصل شظايا Lucene الاندماج في الأسفل.

الاكتشاف

ما يكتشفه Dockstash

متغيرات البيئة المكتشفةELASTIC_PASSWORD, ELASTICSEARCH_USERNAME, discovery.type
المنفذ الافتراضي9200
مسارات البيانات الحية (لا تُنسخ حية أبدًا)/usr/share/elasticsearch/data
أمثلة الصورelasticsearch:8.13.0, elasticsearch:8, docker.elastic.co/elasticsearch/elasticsearch
خطوة بخطوة

انسخ Elasticsearch مع Dockstash خطوة بخطوة

  1. أنشئ حساب Dockstash وافتح لوحة التحكم

    سجّل مجانًا على app.dockstash.com/register. يسألك معالج الإعداد لمرة واحدة عن خادم التخزين VPS (الجهاز الذي سيحتفظ بالنسخ الاحتياطية المشفّرة) ويولّد كلمة مرور تشفير — احفظها فورًا في مدير كلمات مرور، فهي تُعرض مرة واحدة فقط.

  2. أضف مشروع Docker الذي يشغّل Elasticsearch

    في شاشة Projects يكتشف Dockstash تلقائيًا كل مجلد مشروع Compose على الخادم (افتراضيًا تحت /var/www). اختر المشروع الذي يحتوي خدمة Elasticsearch. لم يُنسخ شيء بعد — أنت فقط تخبر Dockstash أين يقيم المشروع.

  3. تحقق من اكتشاف Elasticsearch

    افتح المشروع وتبويب Plan. يقرأ Dockstash ملف docker-compose.yml ويتعرف على صورة elasticsearch ويضيف طبقة مبنية على واجهة اللقطات — مع اسم الحاوية والمتغيرات المكتشفة (ELASTIC_PASSWORD وELASTICSEARCH_USERNAME وdiscovery.type). فعّل أو عطّل الملفات والقواعد وإعدادات الوكيل قبل الحفظ.

  4. اختياري: تحقق من العنقود يدويًا

    إن أردت دليلًا قبل الأتمتة، استعلم بـcurl عن نقطة _cluster/health داخل الحاوية. حالة green أو yellow تعني الجاهزية للقطة (yellow طبيعية لعقدة واحدة — لا مكان لشظايا الريبليكا). أما red فتعني شظية أساسية واحدة على الأقل معطلة؛ أصلحها قبل النسخ.

    docker exec <es-container> curl -s http://localhost:9200/_cluster/health?pretty
  5. أكّد وجهة التخزين

    تُخزَّن النسخ كلقطات restic مشفّرة على خادمك عبر SSH. بعد المعالج كل شيء مهيأ؛ عدّله من Settings → Storage. يحتاج Elasticsearch نفسه إضافةً إلى ذلك مستودع لقطات مسجلًا — مسار نظام ملفات (أبسطه دليل bind-mount) أو object store — تكتب فيه واجهة اللقطات ويسلّمه Dockstash إلى restic خارجيًا.

  6. اضبط جدول النسخ الاحتياطي

    في تبويب Schedule اختر يوميًا أو أسبوعيًا أو cron مخصصًا (يُتحقق أثناء الكتابة). اليومي هو الافتراضي الصحيح لعناقيد البحث — اللقطات تزايدية داخل المستودع وكل تشغيل يخزن الشظايا الجديدة فقط. أضف prune أسبوعيًا مع سياسة الاحتفاظ.

  7. شغّل أول نسخة احتياطية الآن

    انقر Backup Now. يطلق Dockstash لقطة عبر الواجهة (PUT _snapshot/<repo>/<snap>): يكتب Elasticsearch عرضًا متسقًا لكل فهرس في المستودع ثم يسلّم Dockstash هذا الدليل إلى restic نحو خادم التخزين — تابع المخرجات في لوحة السجلات.

  8. تأكد من وجود اللقطة

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

الأوامر

أمر التفريغ

PUT _snapshot/<repo>/<snap> via the snapshot API (register a repository first)

أمر الاستعادة

POST _snapshot/<repo>/<snap>/_restore via the snapshot API

تلتقط واجهة اللقطات عرضًا متسقًا وتزايديًا لحظيًا لكل فهرس بينما تواصل شظايا Lucene الاندماج في الأسفل.

الاستعادة والتحقق

استعد نسخة Elasticsearch وأثبت أنها تعمل

نسخة Elasticsearch لا تصبح حقيقية إلا بعد استعادتها. استعادات Dockstash لا تكتب فوق العنقود الحي افتراضيًا — إلى موقع جديد أولًا، فحص الفهارس، ثم ترقية واعية.

  1. اختر نقطة استعادة

    افتح Snapshots واختر المشروع وتصفح الخط الزمني. كل صف يحوي مستودع اللقطات بعرض متسق لكل فهرس مع ملفات المشروع من التشغيل نفسه.

  2. استعد إلى موقع جديد

    انقر Restore وأبقِ الوضع الافتراضي «Restore to new location». اكتب اسم المشروع للتأكيد — إجراء متعمّد بتأكيد مكتوب. يهبط التفريغ والملفات في المسار الهدف الذي تختاره دون المساس بالمشروع الحي.

  3. تحقق من البيانات المستعادة

    استعلم _cat/indices?v على العقدة التجريبية واقرأ الجدول: كل فهرس متوقع يجب أن يظهر بصحة green أو yellow وحالة open وdocs.count مطابق للإنتاج. افحص بضع وثائق باستعلام بحث.

    docker exec <es-container> curl -s "http://localhost:9200/_cat/indices?v"
  4. رقِّ النتيجة عند الاقتناع

    بعد التحقق من البيانات المستعادة وجّه تطبيقك إليها (أو أعد الاستعادة بوضع «Overwrite existing» — موافقة صريحة). الأفضل: دع تدريب الاستعادة الأسبوعي ينتج هذا الدليل تلقائيًا كي لا تكون الاستعادة الحقيقية أول بروفة لك.

المطبات

مطبات يجب تجنبها

  • لا تشغّل restic أبدًا على دليل البيانات الحي — شظايا Lucene تُكتب وتُدمج باستمرار ونسخ الملفات غير متسق.
  • يجب تسجيل مستودع لقطات (مسار fs مشترك أو object store) قبل أول لقطة؛ مسار bind-mount مشترك مع الحاوية هو أبسط مستودع fs.
  • استعادة فهرس موجود تستلزم إغلاقه أو حذفه أولًا وإلا رُفضت الاستعادة.
استكشاف الأخطاء

مشكلات شائعة في نسخ Elasticsearch

العرض
تفشل نداءات اللقطة بـrepository_missing_exception أو خطأ تحقق المستودع.
السبب
لا مستودع لقطات مسجل، أو المسار ليس في path.repo / غير قابل للكتابة من داخل الحاوية.
العلاج
ركّب دليلًا bind-mount في الحاوية، أضفه إلى path.repo في elasticsearch.yml، أعد التشغيل، وسجّله بـPUT _snapshot/<repo> كمستودع fs. اللقطات لا تعمل إلا مع مستودع مسجل ومتحقق منه.
العرض
الاستعادة مرفوضة: «cannot restore index ... because an open index with same name already exists».
السبب
ترفض واجهة اللقطات الاستعادة إلى فهرس مفتوح — لا تدمج ولا تكتب فوق بيانات حية بصمت.
العلاج
أغلق أو احذف الفهرس القائم أولًا، أو استعد باسم آخر عبر rename_pattern/rename_replacement. الاستعادة إلى عقدة تجريبية تتفادى التصادم كليًا.
العرض
صحة العنقود red واللقطات تعود partial أو تفشل تمامًا.
السبب
شظية أساسية واحدة على الأقل غير مخصصة؛ اللقطة لا تلتقط شظايا غير متاحة.
العلاج
شخّص عبر _cluster/allocation/explain وأعد الشظايا الأساسية (حد الماء للقرص، عقدة ساقطة، شظية تالفة) قبل النسخ. عنقود عقدة واحدة yellow مقبول؛ red لا.

أنجزه بنقرة واحدة مع Dockstash

ينفّذ Dockstash التفريغ أعلاه بالضبط ويسلّمه إلى restic خارجيًا ويختبر الاستعادة بتدريب تلقائيًا — بلا سكربت تصونه.

آخر تحديث: July 2026

الأسئلة الشائعة

لماذا واجهة اللقطات بدل نسخ مجلد البيانات؟

يكتب Elasticsearch ويُدمج شظايا Lucene باستمرار: نسخة الدليل الحي غير متسقة وقد لا تفتح. تلتقط واجهة اللقطات عرضًا متسقًا وتزايديًا لكل فهرس.

كيف أسجل مستودع لقطات؟

أعدّ مستودع نظام ملفات على مسار يقرأه Elasticsearch وDockstash (أو object store) ثم سجّله بنداء PUT _snapshot. يسلّم Dockstash دليل المستودع هذا إلى restic.

هل لقطات Elasticsearch تزايدية؟

نعم. داخل المستودع تخزن كل لقطة الشظايا غير الموجودة فقط — اللقطات المتكررة رخيصة. وإزالة تكرار restic تضاعف الأثر.

هل يعمل هذا مع OpenSearch أيضًا؟

نعم — تفرّع OpenSearch من Elasticsearch بنموذج واجهة اللقطات نفسه. سجّل مستودعًا والتقط بالطريقة ذاتها.

كم مرة يجب نسخ Elasticsearch؟

يوميًا هو العملي — اللقطات تزايدية داخل المستودع فتبقى التشغيلات اليومية رخيصة حتى مع فهارس كبيرة. في Free النسخ يدوي (Backup Now)؛ Pro حتى الساعي وBusiness أي cron.

أين تعيش النسخ الاحتياطية فعليًا؟

على خادم التخزين VPS الخاص بك، كلقطات restic مشفّرة تُدفع عبر SSH. لا يحتفظ Dockstash ببياناتك أبدًا على سحابة طرف ثالث — أنت توجّهه إلى جهاز تتحكم فيه، والمستودع مشفّر بكلمة مرور لا يملكها سواك.

كيف أعرف أن النسخة قابلة للاستعادة دون استعادة يدوية؟

جدوِل تدريب استعادة. يستعيد Dockstash أحدث لقطة إلى مساحة عمل معزولة، ويقارن كل ملف بايتًا ببايت مع المصدر، ويتحقق من التفريغ المستعاد — ثم يختم المشروع بشارة نجاح/فشل. تدريب أسبوعي يعني دليلًا طازجًا دائمًا.