كيفية إعداد موازنة الحمل (Load Balancing) على Nginx


محمد هاني صباغ

ما هي موازنة الحمل (Load Balancing)

موازنة الحمل هي عبارة عن آلية لتوزيع التدفّق (traffic) على عدّة خواديم افتراضية خاصّة عبرَ تقسيم آلية المعالجة إلى عدّة أجهزة مما يضمن استقرارًا أفضل وتعاملًا أكثر سلاسة مع الأخطاء. خوارزمية Round Robin لموازنة الحمل ترسل الزوار إلى واحدٍ من مجموعة عناوين الـIP. تقوم خوارزمية Round Robin بشكلٍ أساسي بتوزيع حملِ الخادوم دون الحاجة إلى تضمين أي أمورٍ إضافية أخرى، آخذةً بعينِ الاعتبار بعض العوامل المهمة مثل سرعة استجابة الخادوم والمنطقة الجغرافية الخاصة بالزوار.

الإعداد

تتطلب الخطوات في هذا الدّرس وجود مستخدمٍ يمتلك صلاحيات الجذر على خادومك الافتراضي الخاص (VPS). يمكنك تعلم كيفية تثبيت واحد في دليل إدارة المستخدمين.

لكي تقوم بتثبيت موازنة الحمل الخاصة بـnginx فيجب بالطبع أن يكون nginx مثبتًا على خادومك الشخصي. يمكنك فعل ذلك بسرعة مع apt-get:

sudo apt-get install nginx

وحدة المنبع Upstream Module

بهدف تثبيت موازنة الحمل الخاصة بخوارزمية round robin, فإنّه يجب علينا استخدام وحدة المنبع (upstream module) الخاصة بـnginx. سنقوم بإدراج بعض التضبيطات في إعدادات nginx.

اذهب وافتح إعدادات موقعك (في مثالنا سنستخدم فقط إعدادات المضيف الوهمي الافتراضي):

sudo nano /etc/nginx/sites-available/default

سنحتاج إلى إضافة إعدادات موازنة الحمل إلى الملف. أولًا، سنحتاج إلى تضمين وحدة المنبع داخل الملف والتي تبدو هكذا:

upstream backend  {
  server backend1.example.com;
  server backend2.example.com;
  server backend3.example.com;
}

بعدها، يجب علينا الإشارة إلى الوحدة داخل الإعدادات بشكلٍ أوضح:

 server {
  location / {
    proxy_pass  http://backend;
  }
}

ثم لإعادة تشغيل nginx:

sudo service nginx restart

طالما أن جميع الخواديم الافتراضية الخاصة بك في مكانها الصحيح فإنه يجب عليك أن تجد أنّ عملية موازنة الحمل ستبدأ بتوزيع الزوار إلى الخواديم المربوطة بشكلٍ متساوي تلقائيًا.

التوجيهات Directives

القسم السابق غطّى كيفية توزيع الحمل بشكلٍ متساوٍ عبر عدّة خواديم افتراضية خاصة. على كل حال، هناك عدة أسباب تجعل هذه الطريقة ليست الطريقة الأكثر فعالية للعمل مع البيانات. هناك عدّة توجيهات يمكننا استخدامها لتوجيه زوار الموقع بطريقة أكثر فعالية.

الوزن

من الطرق المستخدمة لبدء تخصيص المستخدمين إلى الخواديم بطريقة أكثر دقّةً هي تخصيص وزنٍ محدد لأجهزة محددة. Nginx يسمح لنا بإسناد رقمٍ يُحدد حجم التدفّق الذي يجب توجيهه إلى كلِّ خادوم.

يمكن لتثبيت حملٍ مُوازَن يتضمن وزن الخادوم أن يبدو هكذا:

upstream backend  {
  server backend1.example.com weight=1;
  server backend2.example.com weight=2;
  server backend3.example.com weight=4;
}

الوزن الافتراضي هو 1. مع وزنٍ بـ2 فإنَّ backend2.example سيتلقّى تدفّقًا أكبر بمرتين من backend1. بينما backend3 مع وزن 4 سيتعامل مع تدفّق أكبر بمرتين من التدفّق الذي يستقبله backend2 وأكبر بأربع مرات من التدفّق الذي يستقبله backend1.

التلّبيد (Hash)

تلّبيد عنوان الـIP يسمح للخواديم أن تستجيب للعملاء (clients) استنادًا إلى عناوين الـIP الخاصة بهم، حيث يتم إرسال الزوار مجددًا إلى نفس الخادوم الافتراضي الخاص في كلّ مرةٍ يزورون الموقع (باستثناء في حال كان الخادوم معطّلًا). إذا تم اكتشاف خادومٍ غير نشيط، فإنّه يتم تعليمه كخادومٍ معطّل. جميع عناوين الـIP التي كان من المفترض أن تقوم بالتوجيه إلى الخادوم المعطل ستقوم حينها تلقائيًا بالتوجيه إلى واحدٍ بديل.

الإعدادات التالية هي مثال على ذلك:

upstream backend {
  ip_hash;
  server   backend1.example.com;
  server   backend2.example.com;
  server   backend3.example.com  down;
 }

أقصى عدد لمرّات الفشل (Max Fails)

وفقَ إعدادات round robin الافتراضية، فإنّ nginx سيظلّ يرسل البيانات إلى الخواديم الوهمية الخاصّة، حتى لو كانت هذه الخواديم لا تستجيب. “العدد الأقصى لمرّات الفشل" يمكنه تلقائيًا أن يمنع حصولَ هذا عبر تعليم الخواديم التي لا تستجيب تلقائيًا بعد مرور وقتٍ معيّن.

هناك عاملان مرتبطان بالعدد الأقصى لمرّات الفشل: max_fails و fall_timeout. يشيرُ الأول إلى العدد الأقصى للمحاولات الفاشلة للاتصال بالخادوم التي يمكن عدّها قبل أن يتم تعليم الخادوم بأنّه غير نشيط. Fall_timeout يحدد طول المدة التي يتم اعتبار الخادوم فيها خارج العمل. بمجرد نفاذ الوقت، ستبدأ محاولات جديدة لإعادة الاتصال بالخادوم. القيمة الافتراضية لهذا المتغير هي 10 ثواني.

إعدادٌ بسيط سيبدو هكذا:

upstream backend  {
  server backend1.example.com max_fails=3  fail_timeout=15s;
  server backend2.example.com weight=2;
  server backend3.example.com weight=4;
}

كان هذا استعراضًا سريعًا لـ Round Robin load balancing. هناك عدّة طرق أخرى قد نتطرّق إليها لاحقًا في مقالات أخرى

 

ترجمة -وبتصرّف- للمقال: How To Set Up Nginx Load Balancing



1 شخص أعجب بهذا


تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن