اذهب إلى المحتوى
  • 0

كيف نحقق مفهوم Load balancing أي توزيع الحمل على المخدمات باستخدام خادوم nginx

فاديا جميل

السؤال

لدي ضغط عالي على المخدم و اريد استخدام أكثر من مخدم لتخديم الموقع، كيف يمكنني توزيع زيارات المستخدمين على المخدمات المختلفة لدي؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

يمكن إعداد خادم Nginx كموزع حمل Load Balancer بإستخدام أحد الآليات مثل round-robin أو least-connected أو ip-hash وهنا شرح مبسط عن كل آلية منهم:

  • round-robin: في هذه الطريقة يتم تحديد كل خادم بالتتالي وفقًا للترتيب الذي قمت بتعيينه في ملف الإعدادات، أي يتم إرسال الطلب الأول إلى الخادم الأول ثم الطلب الثاني إلى الخادم الثاني وهكذا. هذا يوازن عدد الطلبات بالتساوي للعمليات القصيرة. وهذه هي الطريقة الإفتراضية التي يعمل بها nginx.
  • least-connected: يتم تعيين الطلب التالي للخادم الذي لديه أقل عدد من الاتصالات النشطة active connection.
  • ip-hash: في هذه الطريقة يتم استخدام دالة التجزئة hash-function لتحديد الخادم الذي يجب أن يقوم بمعالجة الطلب (بناءً على عنوان IP الخاص بالعميل).

في الأساس، كل ما عليك فعله هو إعداد nginx مع تعليمات حول نوع الاتصالات التي يجب الاستماع إليها ومكان إعادة توجيهها. وذلك من خلال إنشاء ملف configuration جديد باستخدام أي محرر نصوص. على سبيل المثال:

sudo nano /etc/nginx/conf.d/load-balancer.conf

الآن في هذا الملف يجب تعريف جزئين رئيسيين، وهما upstream و server، على النحو التالي:

http {
   upstream backend {   
      # نضع هنا عناوين الخوادم التي سيتم إستخدامها   
      server 10.1.0.101; 
      server 10.1.0.102;
      server 10.1.0.103;
   }

   # لاحظ أن اسم upstream و proxy_pass يجب أن يكونا متطابقين.
   # في هذه الحالة تم إستعمال كلمة backend كاسم لهما


   server {
      listen 80; 

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

الآن يمكن حفظ الملف (عبر الضغط على Ctrl + O) والخروج من محرر النصوص (عبر الضغط على Ctrl + X).

نحتاج الآن إلى إستبدال ملف الإعدادات السابق بملف الإعدادات الإفتراضي، وذلك عبر الأوامر التالية:

# في Debian و Ubuntu
sudo rm /etc/nginx/sites-enabled/default

# في نظام CentOS
sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled

الآن يجب إعادة تشغيل خادم nginx مرة أخرى وذلك عبر الأمر:

sudo systemctl restart nginx

طريقة round-robin هي المستخدمة بشكل إفتراضي لذلك لا حاجة لتعديل الملف السابق مرة أخرى، بينما يُمكن تغير الآلية المستعملة في الخادم لموازنة الحمل عبر تعديل قسم upstream في ملف الإعدادات السابق، كالتالي:

لإستخدام طريقة least-connected:

upstream backend {
   least_conn;
   server 10.1.0.101; 
   server 10.1.0.102;
   server 10.1.0.103;
}

لإستخدام طريقة ip-hash:

upstream backend {
   ip_hash;
   server 10.1.0.101; 
   server 10.1.0.102;
   server 10.1.0.103;
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...