5.2 · سرب (Swarm) السريع : العنقود والحزمة والنسخ المكررة

المستوى 5 · التنسيق والإنتاج (Orchestration & production)

5.2سرب (Swarm) السريع : العنقود والحزمة والنسخ المكررة

الهدف: بناء عنقود (cluster) سرب (Swarm) مصغر ونشر حزمة (stack) مكررة عليه.
الوقت المقدّر: 13 دقيقة · قراءة ذاتية · إذا كان لديك 5 دقائق فقط: اقرأ «الأساسي في 30 ثانية» + المخطط.

الأساسي في 30 ثانية

  • التهيئة بأمر واحد : تصير الآلة المحلية مديرا، وتنضم إليها الأخريات عمالا — فحتى في أحادي العقدة، يجلب سرب (Swarm) النسخ المكررة والتحديثات دون توقف.
  • نشر الحزمة : ملف Compose المُغنَى (deploy : النسخ، وإعداد التحديث، وسياسة إعادة التشغيل) يُنشَر على العنقود — فتتوزع النسخ المكررة، ويمر التحديث واحدا واحدا.
  • المعاينة والتحجيم : سرد الخدمات والنسخ، وضبط العدد، وترك سرب (Swarm) يستبدل نسخ عقدة ميتة — مع فحص صحة إجباري لتحديث نظيف.

حالة مصغرة متسلسلة — إدير يبني عنقوده الأول

ينتقل إدير، مهندس العمليات المبتدئ في الجزائر، إلى الممارسة : فسيتعين على تطبيقه قريبا أن يعمل على آلتين. فيتدرب أولا أحادي العقدة : يهيئ سرب (Swarm) على آلته، ويضيف deploy (3 نسخ مكررة، وتحديث واحدا واحدا) إلى خدمته الويب، وينشر الحزمة ويسرد النسخ. ثم يحجّم إلى 5 ثم إلى 2 ويراقب التوزيع. تتمة الحالة 5.1 — ينتقل إدير من تدقيق الحاجة إلى أول عنقود مكرر.

تتمة الحالة 5.1 — يتدرب إدير أحادي العقدة قبل أي تعدد آلات حقيقي.

1. التهيئة بأمر واحد

يجعل docker swarm init الآلة المحلية مديرا (القائد) ؛ ويلحق به docker swarm join العمال (المنفذين) بالرمز المقدَّم. ويبدأ إدير وحده : فحتى على آلة واحدة، يجلب سرب (Swarm) أصلا النسخ المكررة والتحديثات المتداولة — ميدان التدريب المثالي قبل تعدد الآلات.

وفي تطوير أحادي العقدة، نفكر في المغادرة النظيفة (docker swarm leave) لاستعادة دوكر (Docker) بسيط. وقاعدة إدير : إتقان أحادي العقدة قبل إضافة آلات.

2. نشر الحزمة : Compose المُغنَى

ينشر docker stack deploy -c compose.yml monapp ملف Compose على العنقود، مع قسم deploy : replicas: 3، وupdate_config (تحديث واحدا واحدا مع مهلة)، وrestart_policy. فتتوزع النسخ المكررة على العقد، ويستبدل التحديث النسخ واحدا واحدا : انعدام توقف إذا كان فحص الصحة جيدا. ويضيف إدير هذه المفاتيح الثلاثة إلى خدمته الويب.

فـ فحص الصحة هو شرط التحديث النظيف : فلا يرقّي سرب (Swarm) نسخة جديدة إلا إذا ثبتت جاهزيتها. ودون فحص صحة، نحجّم ونحدّث على العمى — وتوقفات مضمونة.

3. المعاينة والتحجيم

يسرد docker service ls الخدمات، ويعرض docker service ps حالة كل نسخة مكررة (أين، وماذا، ومنذ متى)، ويضبط docker service scale العدد. ويحجّم إدير إلى 5 ثم إلى 2 ويراقب التوزيع. وعند موت عقدة، يستبدل سرب (Swarm) النسخ في مكان آخر : وهو الإصلاح الذاتي الموعود.

الفخ رقم 1 في تعدد العقد : المجلدات المحلية لا تسافر — فالمجلد المحلي يبقى على عقدته. ويلزم تخزين مشترك أو قواعد خارجية، وإلا غابت البيانات حسب العقدة المجيبة.

خطأ شائع في الفهم: « سرب (Swarm) هو مجرد إعادة إطلاق نفس Compose برياضة أكثر — وستتبع البيانات وحدها ». لا. فدون قسم deploy (النسخ المكررة، والتحديث واحدا واحدا، وسياسة إعادة التشغيل) ودون فحص صحة، لا توزيع ولا تحديث دون توقف ؛ ودون تخزين مشترك، تبقى المجلدات المحلية عالقة على عقدتها — فتغيب البيانات متقطعة. والمنعكس الجيد : التدرب أحادي العقدة (التهيئة، والنشر بـ 3 نسخ، والتحجيم)، واشتراط فحص الصحة على كل خدمة دائمة، ومعالجة المجلدات المشتركة قبل أي تعدد عقد حقيقي.
حزمة مكررة التهيئة، والنشر بنسخ مكررة، والتحديث دون توقف التهيئة مدير + عمالالنشر حزمة بـ 3نسخ مكررةالتحديث واحدا واحدا،دون توقف
التهيئة، والنشر بنسخ مكررة، والتحديث دون توقف
نص المخطط (SEO / قارئات الشاشة / الترجمة): 1) التهيئة : يحوّل إدير آلته في الجزائر إلى مدير سرب (Swarm)، ميدان تدريب أحادي العقدة. 2) النشر : تنطلق حزمته بـ 3 نسخ مكررة موزعة، مع تحديث واحدا واحدا. 3) التحديث : تجيب الخدمة دائما أثناء رفع الإصدار، إذ تُصادَق كل نسخة جديدة بفحص الصحة. الدرس : هيّئ، وكرر، وحدّث دون توقف — مع مراقبة المجلدات.

🔎 مثال ملموس — ويب إدير بـ 3 نسخ مكررة دون توقف

هيّئ، وانشر، وراقب، وحجّم.

docker swarm init
docker stack deploy -c compose.yml monapp
docker service ls
docker service ps monapp_web
docker service scale monapp_web=5

القراءة : 3 نسخ في البداية، وتحديث واحدا واحدا، ثم الانتقال إلى 5.

الدرس : أثناء التحديث، تجيب الخدمة دائما بفضل النسخ.

مفردات القسم

المدير / العامل
المدير يقود العنقود، والعمال ينفذون النسخ المكررة.

مثال بسيط: يهيئ إدير آلته مديرا قبل إلحاق العمال بها.

ما ليس كذلك: آلات معزولة دون قائد مشترك.

رد فعل: من يقود ومن ينفذ في عنقودي ؟

الحزمة
ملف Compose منشور على العنقود مع قسم deploy خاصته.

مثال بسيط: ينشر إدير monapp مع النسخ وإعداد التحديث.

ما ليس كذلك: مجرد compose دون deploy يُطلَق على آلة واحدة.

رد فعل: هل قسم deploy خاصتي مكتوب ؟

النسخة المكررة
نسخة من خدمة ما، موزعة على العقد.

مثال بسيط: يشغّل إدير 3 نسخ مكررة من ويبه.

ما ليس كذلك: حاوية وحيدة دون مثيل.

رد فعل: كم نسخة تعمل حاليا ؟

التحجيم
ضبط عدد النسخ المكررة لخدمة ما عند الطلب.

مثال بسيط: ينتقل إدير من 3 إلى 5 نسخ ثم ينزل إلى 2.

ما ليس كذلك: إعادة إطلاق التطبيق كله لتغيير السعة.

رد فعل: هل أستطيع ضبط الشراع دون توقف ؟

فحص الصحة
المسبار الذي يثبت جاهزية النسخة قبل ترقيتها.

مثال بسيط: لا يأذن إدير بالتحديث إلا على نسخة ثبتت جاهزيتها.

ما ليس كذلك: تحديث على العمى دون مسبار.

رد فعل: هل لكل خدمة دائمة مسبارها ؟

في التطبيق — عنقودكم الأول

  1. هيّئوا سرب (Swarm) على آلتكم (التهيئة).
  2. أضيفوا deploy (3 نسخ مكررة + تحديث واحدا واحدا) إلى خدمتكم الويب.
  3. انشروا الحزمة واسردوا الخدمات والنسخ.
  4. حجّموا إلى 5 ثم إلى 2 : وراقبوا التوزيع.
تنشرون حزمة مكررة وتحجّمونها دون توقف.

نص جاهز للقول — إعلان العنقود الأول للفريق

« أبني عنقود سرب (Swarm) الأول في الجزائر : أولا أحادي العقدة للتدرب — 3 نسخ مكررة، وتحديث واحدا واحدا، وفحص صحة إجباري — ثم نضيف الآلات. سأريكم توزيع النسخ والتحديث دون توقف قبل أي تعدد عقد حقيقي. »

يُقال للفريق لتأطير التدرب أحادي العقدة قبل تعدد الآلات.

نموذج للنسخ واللصق — حزمة سرب (Swarm) عامة

حزمة سرب عامة — ملف compose.yml
services:
  web:
    image: mon-registre/mon-app:stable
    ports:
      - "8080:80"
    healthcheck:
      test: ["CMD", "wget", "--spider", "-q", "http://localhost/"]
      interval: 30s
      timeout: 5s
      retries: 3
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
      restart_policy:
        condition: on-failure
الأوامر : docker swarm init · docker stack deploy -c compose.yml monapp · docker service ls · docker service ps monapp_web · docker service scale monapp_web=5

فردي / ميزانية صغيرة

إدير وحده : يكفي عنقود أحادي العقدة لتعلم النسخ والتحديثات.

شركة صغيرة جدا / فريق مصغر

عرض لاثنين : أحدهما ينشر، والآخر يراقب النسخ أثناء التحديث.

شركة صغيرة ومتوسطة في الجزائر

يضبط إدير في الجزائر حصة مختبر : التهيئة والنشر والتحجيم دون مس الإنتاج.

فريق يبدأ

ثنائي : أحدهما يكتب قسم deploy، والآخر يتحقق من فحص الصحة والتوزيع.

✓ ممارسات جيدة

  • اختبروا أحادي العقدة قبل أي تعدد آلات.
  • فحص صحة إجباري على كل خدمة دائمة.
  • تحديثات واحدا واحدا (التوازي على 1).

✗ أخطاء شائعة

  • مجلدات محلية غير مشتركة بين العقد (بيانات غائبة).
  • التحجيم دون فحص صحة (توقفات أثناء التحديث).
  • نسيان مغادرة سرب (Swarm) في التطوير بعد التدرب.

النقاط الأساسية

  • التهيئة = مدير، والانضمام = عمال — حتى أحادي العقدة للتدرب.
  • يضيف النشر النسخ والتحديث واحدا واحدا وسياسة إعادة التشغيل.
  • يضبط التحجيم العدد، ويستبدل سرب (Swarm) نسخ عقدة ميتة.
  • فحص الصحة = تحديث دون توقف ؛ والمجلدات المحلية = الفخ رقم 1.

تحدي 48 ساعة — طبّق غدا

انشروا أحادي العقدة حزمة بـ 3 نسخ مكررة + فحص صحة : اسردوا النسخ، وحجّموا إلى 5 ثم 2، ودوّنوا التوزيع المراقَب.

قائمة الخروج من القسم
  • أستطيع تهيئة سرب (Swarm) ونشر حزمة مكررة.
  • خدماتي فيها deploy + فحص صحة.
  • أعرف لماذا تحجب المجلدات المحلية تعدد العقد.
تقييم ذاتي 1-5 : هل أستطيع النشر والتحجيم دون توقف ؟هل لكل خدمة دائمة فحص صحتها ؟

أسئلة شائعة

هل تتبع المجلدات في سرب (Swarm) ؟

لا افتراضيا : فالمجلد المحلي يبقى على عقدته، ولا يسافر مع النسخ المكررة. وفي تعدد العقد، توقعوا تخزينا مشتركا أو قواعد خارجية — وهو الفخ رقم 1 في الانتقال إلى العنقود. اختبروا دائما أين تعيش بياناتكم قبل التحجيم.

كيف نغادر سرب (Swarm) بعد التدرب ؟

بأمر المغادرة على العقدة (المغادرة، وبالقوة عند الحاجة على مدير). وفي تطوير أحادي العقدة، فكروا في المغادرة لاستعادة دوكر (Docker) بسيط متى انتهى التمرين.

تحقّق من فهمك

لتحديث سرب (Swarm) دون توقف، ماذا يلزم ؟

موارد إضافية (اختياري، للتعمّق أكثر)

اختبار المستوى 5أسئلة جديدة وأصعب للتحقق من مكتسباتك