موازنة الأحمال (Load Balancing) باستخدام HAProxy

دقائق القراءة: 5

مقدمة

تُعد موازنة الأحمال باستخدام HAProxy من أهم التقنيات التي تُستخدم لرفع الاعتمادية وتحسين الأداء عند تشغيل التطبيقات والخدمات على أكثر من خادم. الفكرة الأساسية تقوم على توزيع الطلبات الواردة على مجموعة من الخوادم الخلفية بدل تركيز الحمل على خادم واحد فقط، ما يقلل احتمالية التوقف ويحسن تجربة المستخدم.

هذه التقنية ترتبط مباشرة بمفاهيم الشبكات والخوادم، لذلك من المفيد الإلمام بأساسيات مثل أساسيات شبكات لينكس: العناوين، المنافذ، والبروتوكولات (IP, SSH, DNS)، وكذلك فهم دور الخادم العكسي Reverse Proxy كما في مقال إعداد وتكوين خوادم الويب (Nginx/Apache) وتحسين أدائها (Reverse Proxy). وعند استخدام HAProxy بشكل صحيح، يصبح من الممكن إدارة المرور بكفاءة عالية حتى مع ازدياد عدد الزوار.

ما هو HAProxy ولماذا يُستخدم؟

HAProxy هو اختصار لـ High Availability Proxy، وهو برنامج مفتوح المصدر متخصص في موازنة الأحمال والعمل كوسيط أمامي للتطبيقات والخدمات، خصوصاً تطبيقات الويب. يشتهر بثباته العالي، وأدائه الممتاز، وقدرته على التعامل مع أعداد كبيرة من الاتصالات المتزامنة.

من أبرز استخداماته:

  • توزيع الطلبات بين عدة خوادم Backend.
  • رفع التوافرية عبر استبعاد الخوادم المتعطلة تلقائياً.
  • العمل كـ Reverse Proxy أمام التطبيقات.
  • تنفيذ فحوصات صحية Health Checks للخوادم.
  • التحكم في الجلسات، والرؤوس Headers، وسياسات التوجيه.

كيف تعمل موازنة الأحمال؟

عند وصول طلب من المستخدم إلى عنوان الموقع، يصل أولاً إلى خادم HAProxy. بعد ذلك يقرر البرنامج أي خادم خلفي سيتولى معالجة هذا الطلب اعتماداً على خوارزمية توزيع محددة. يمكن أن تكون هذه الخوارزمية بسيطة مثل roundrobin أو أكثر دقة مثل leastconn.

إذا تعطل أحد الخوادم الخلفية، يكتشف HAProxy ذلك عبر الفحص الصحي، ثم يتوقف عن إرسال الطلبات إليه حتى يعود للعمل. هذه الآلية تجعل البنية أكثر مرونة واستقراراً في بيئات الإنتاج.

أشهر خوارزميات التوزيع

  • roundrobin: يوزع الطلبات بالتناوب على الخوادم.
  • leastconn: يرسل الطلب إلى الخادم الأقل في عدد الاتصالات الحالية.
  • source: يربط العميل بنفس الخادم اعتماداً على عنوان IP.

تثبيت HAProxy على لينكس

قبل البدء، تأكد من تحديث النظام ومعرفة أساسيات إدارة الحزم من خلال إدارة الحزم البرمجية وتحديث النظام (APT, YUM/DNF, Pacman). كما ستحتاج أحياناً إلى تحرير ملفات الإعداد عبر أدوات مثل nano أو vim كما في أدوات عرض ومعالجة النصوص (cat, nano, vim, less, tail).

على توزيعات Debian وUbuntu يمكن التثبيت بالأمر التالي:

sudo apt update
sudo apt install haproxy -y

أما على توزيعات RHEL أو Rocky Linux أو AlmaLinux:

sudo dnf install haproxy -y

ملف الإعداد الأساسي

غالباً يوجد ملف الإعداد الرئيسي في المسار /etc/haproxy/haproxy.cfg. وهذا يرتبط بمفاهيم هيكلية ملفات لينكس (Filesystem Hierarchy Standard – FHS) لأن فهم أماكن ملفات الخدمة يسهل إدارتها وصيانتها.

فيما يلي مثال بسيط لإعداد موازنة أحمال لخادمين ويب:

global
    log /dev/log local0
    log /dev/log local1 notice
    daemon

defaults
    mode http
    log global
    option httplog
    timeout connect 5s
    timeout client  30s
    timeout server  30s

frontend http_front
    bind *:80
    default_backend web_servers

backend web_servers
    balance roundrobin
    option httpchk GET /
    server web1 192.168.1.10:80 check
    server web2 192.168.1.11:80 check

شرح الإعداد السابق

  • قسم global يحتوي الإعدادات العامة مثل التسجيل والتشغيل كخدمة.
  • قسم defaults يحدد القيم الافتراضية للمهلات والسجلات.
  • قسم frontend يستقبل الطلبات من العملاء على المنفذ 80.
  • قسم backend يضم الخوادم الفعلية التي ستخدم الطلبات.
  • الكلمة check تفعّل الفحص الصحي لكل خادم.

التحقق من الإعداد وتشغيل الخدمة

بعد تعديل الملف، من الضروري اختبار الصياغة قبل إعادة التشغيل حتى لا تتسبب أخطاء بسيطة في توقف الخدمة. يمكنك التحقق بالأمر التالي:

sudo haproxy -c -f /etc/haproxy/haproxy.cfg

إذا كانت النتيجة سليمة، فعّل الخدمة وأعد تشغيلها باستخدام systemctl، ويمكنك الرجوع إلى إدارة الخدمات باستخدام (systemd) و (systemctl) لفهم التعامل مع الخدمات بشكل أوسع:

sudo systemctl enable haproxy
sudo systemctl restart haproxy
sudo systemctl status haproxy

احرص على فتح المنفذ المناسب في الجدار الناري قبل اختبار الخدمة من خارج الخادم، وإلا قد يبدو لك أن الإعداد معطل بينما المشكلة الحقيقية في قواعد الوصول.

الجدار الناري والسجلات واستكشاف الأخطاء

في البيئات الحقيقية، لا يكفي أن تعمل الخدمة داخلياً فقط، بل يجب ضبط الجدار الناري والسجلات بشكل صحيح. لهذا يفيد الرجوع إلى جدار الحماية (Firewall) وتأمين النظام (UFW, Firewalld, Iptables)، وكذلك مراقبة السجلات (Logs) وتحليل الأخطاء (journalctl, /var/log).

مثال على فتح خدمة الويب باستخدام UFW:

sudo ufw allow 80/tcp
sudo ufw reload

ولعرض آخر سجلات الخدمة:

sudo journalctl -u haproxy -n 50 --no-pager

أفضل الممارسات عند استخدام HAProxy

  • استخدم أكثر من خادم خلفي حقيقي لتجنب نقطة الفشل الواحدة Single Point of Failure.
  • فعّل الفحوصات الصحية دائماً ولا تعتمد على التوزيع دون مراقبة.
  • اختر خوارزمية التوزيع بحسب طبيعة التطبيق وعدد الجلسات.
  • راقب استهلاك الموارد والأداء بالاستفادة من فهم العمليات (Processes) ومراقبة استهلاك الموارد (top, htop, ps, kill).
  • اختبر الإعدادات الجديدة في بيئة تجريبية قبل تطبيقها على الإنتاج.

إذا كان تطبيقك يعتمد على الجلسات المحلية داخل الخادم نفسه، فقد تحتاج إلى إعداد session persistence أو نقل الجلسات إلى مخزن مركزي مثل Redis لتفادي سلوك غير متوقع عند تنقل المستخدم بين الخوادم.

خاتمة

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

كلما كان فهمك أقوى للشبكات، السجلات، إدارة الخدمات، وتأمين الخوادم، أصبحت قدرتك أكبر على تشغيل HAProxy بصورة مستقرة وآمنة. لذلك فإن دمج هذه الأداة ضمن بنية لينكس مدروسة يمثل خطوة مهمة نحو بناء منصات أكثر تحملاً واحترافية.

4 comments

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *