دليل النشر

HAProxy على خادم VPS: موازنة الأحمال والتوافر العالي

انشر على VPS Cloud ←

دليل عملي

النشر

HAProxy على خادم VPS: موازنة الأحمال والتوافر العالي

‏HAProxy هو المعيار الفعلي لموازنة الأحمال (load balancing) والتوافر العالي على خوادم ‏Linux. على خادم VPS من ServOrbit، يُثبَّت في دقائق عبر ‏Marketplace ويُهيَّأ بالكامل من الملف ‏`/etc/haproxy/haproxy.cfg`. يتناول هذا الدليل الشامل الإعداد الكامل — ‏frontend/backend وقوائم ACL وإنهاء ‏SSL/TLS وفحوص الصحة وصفحة الإحصاءات واستكشاف أكثر الأخطاء شيوعًا — ليكون بنيتك التحتية جاهزةً للإنتاج.

8 دقائق للقراءةعدد الخطوات: 8
المحتويات· لماذا تستضيف HAProxy على خادم VPS مخصّص؟1/8
  1. 01لماذا تستضيف HAProxy على خادم VPS مخصّص؟
  2. 02ما يمكنك فعله بـ HAProxy
  3. 03تثبيت HAProxy وتهيئته على خادم VPS من ServOrbit
  4. 04فحوص الصحة المتقدّمة: اكتشاف الخوادم الخلفية المُعطَّلة
  5. 05خوارزميات موازنة الأحمال: أيّها تختار؟
  6. 06استكشاف الأخطاء وإصلاحها: الأخطاء الشائعة والحلول
  7. 07الأخطاء الشائعة وطرق حلّها
  8. 08للتعمّق أكثر

لماذا تستضيف HAProxy على خادم VPS مخصّص؟

‏HAProxy (High Availability Proxy) برنامج مفتوح المصدر لموازنة الأحمال وproxy من نوع TCP/HTTP، معروف بأدائه العالي في الإنتاج. تتيح لك استضافته على خادم VPS مخصّص مركزة توزيع حركة المرور بين خوادمك التطبيقية، وضمان استمرارية الخدمة عند تعطّل إحدى العقد، وإدارة قواعد التوجيه بدقّة دون رسوم ترخيص. على خادم VPS بـ 2 vCPU و2 غيغابايت من RAM، يعالج ‏HAProxy آلاف الاتصالات المتزامنة بيُسر.

ما يمكنك فعله بـ HAProxy

  • توزيع حركة مرور HTTP/HTTPS بين عدة خوادم تطبيقية بخوارزميات قابلة للتهيئة (roundrobin، leastconn، source…)
  • إعداد reverse proxy لعرض عدة خدمات داخلية خلف عنوان IP عام واحد
  • مراقبة صحة الخوادم الخلفية بفحوص صحة تلقائية واستبعاد خادم مُعطَّل دون انقطاع الخدمة
  • إنهاء اتصالات SSL/TLS في الواجهة الأمامية (offloading) لتخفيف عبء التشفير عن خوادمك التطبيقية
  • توجيه حركة المرور حسب النطاق أو المسار بفضل قوائم ACL (host_hdr، path_beg) على المنفذ 443 وحده
  • الاطّلاع على إحصاءات حركة المرور في الوقت الفعلي عبر واجهة الويب المدمجة (stats uri /stats)

تثبيت HAProxy وتهيئته على خادم VPS من ServOrbit

  1. اطلب خادم VPS Cloud من ServOrbit وابدأ التثبيت

    توجّه إلى صفحة /vps-cloud واختر عرضًا بـ 2 vCPU على الأقل و2 غيغابايت من RAM. افتح Marketplace من لوحة معلومات خادم VPS، وابحث عن «HAProxy»، ثم انقر على «تثبيت». يُجهَّز ‏HAProxy تلقائيًا عبر apt — لا يلزم أي اتصال SSH في هذه المرحلة. يمكن التثبيت اليدوي أيضًا: sudo apt update && sudo apt install -y haproxy

  2. فهم بنية ملف haproxy.cfg

    يقع ملف التهيئة الرئيسي في /etc/haproxy/haproxy.cfg. يتألّف من أربعة أقسام: global (العملية والسجلات وحدود النظام)، defaults (المهلات والأوضاع الموروثة)، frontend (منافذ الاستماع وقواعد ACL)، وbackend (الخوادم الهدف والخوارزمية وفحوص الصحة). حرّره بـ: sudo nano /etc/haproxy/haproxy.cfg

  3. تهيئة frontend وbackend كاملَين لـ HTTP/HTTPS

    إليك تهيئة كاملة لخادمَين تطبيقيَّين مع إنهاء SSL:

    global
        log /dev/log local0
        maxconn 50000
        user haproxy
        group haproxy
    
    defaults
        log     global
        mode    http
        option  httplog
        timeout connect 5s
        timeout client  30s
        timeout server  30s
    
    frontend http_front
        bind *:80
        redirect scheme https code 301
    
    frontend https_front
        bind *:443 ssl crt /etc/haproxy/certs/bundle.pem
        default_backend app_servers
    
    backend app_servers
        balance roundrobin
        option httpchk GET /health
        server app1 192.168.1.10:3000 check weight 1 inter 2s fall 3 rise 2
        server app2 192.168.1.11:3000 check weight 2 inter 2s fall 3 rise 2

    يُوجِّه المعامل weight نسبةً أكبر من حركة المرور إلى app2. يُرسل option httpchk GET /health طلب HTTP إلى المسار /health للتحقّق من استجابة كل backend.

  4. تهيئة قوائم ACL للتوجيه حسب النطاق والمسار

    تتيح قوائم ACL توجيه حركة المرور إلى backends مختلفة حسب اسم النطاق أو مسار الطلب. أضف في frontend:

    frontend https_front
        bind *:443 ssl crt /etc/haproxy/certs/bundle.pem
    
        acl host_api   hdr(host) -i api.monsite.com
        acl host_app   hdr(host) -i app.monsite.com
        acl path_admin path_beg  /admin
    
        use_backend api_servers   if host_api
        use_backend admin_servers if path_admin
        use_backend app_servers   if host_app
        default_backend app_servers

    تفحص hdr(host) رأسية HTTP Host لتحديد النطاق. تُوجِّه path_beg /admin كل الطلبات التي يبدأ مسارها بـ /admin إلى backend مخصّص.

  5. إنهاء SSL/TLS مع Let's Encrypt وإنشاء bundle PEM

    يتوقّع ‏HAProxy ملفًا .pem يحتوي على الشهادة والسلسلة الوسيطة والمفتاح الخاص بهذا الترتيب. بعد الحصول على شهادتك مع Certbot، أنشئ الحزمة:

    sudo mkdir -p /etc/haproxy/certs
    sudo cat /etc/letsencrypt/live/monsite.com/fullchain.pem \
             /etc/letsencrypt/live/monsite.com/privkey.pem \
      | sudo tee /etc/haproxy/certs/bundle.pem
    sudo chmod 600 /etc/haproxy/certs/bundle.pem

    لأتمتة التجديد، أضف سكريبت post-hook في /etc/letsencrypt/renewal-hooks/post/haproxy.sh يُعيد بناء الحزمة ويُشغّل systemctl reload haproxy.

  6. تفعيل صفحة إحصاءات HAProxy

    تعرض صفحة الإحصاءات المدمجة حالة كل frontend وbackend وخادم في الوقت الفعلي. أضف كتلة frontend مخصّصة:

    frontend stats
        bind *:8404
        stats enable
        stats uri /stats
        stats refresh 10s
        stats auth admin:MotDePasseSecret
        stats hide-version

    ادخل إليها على http://your-ip:8404/stats. يحمي stats auth الصفحة بمصادقة HTTP Basic. يُخفي stats hide-version إصدار ‏HAProxy للحدّ من التعرّض للثغرات المنشورة.

  7. التحقّق من التهيئة وإعادة التحميل دون انقطاع

    قبل أي إعادة تحميل، تحقّق من صحة بناء ملف التهيئة:

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

    إن عرضت الأمرُ Configuration file is valid، أعِد تحميل ‏HAProxy دون قطع الاتصالات النشطة:

    sudo systemctl reload haproxy

    تأكّد من أن الخدمة نشطة: sudo systemctl status haproxy. يضمن reload (وليس restart) إعادةَ تحميل آمنة: تنتهي الاتصالات القائمة بصورة طبيعية قبل توقّف العمّال القدامى.

  8. فحص السجلات والمراقبة المستمرة

    يُرسل ‏HAProxy سجلاته إلى syslog. اعرضها في الوقت الفعلي:

    sudo journalctl -u haproxy -f

    تُظهر كل سطر الـ frontend والـ backend والخادم المختار ورمز HTTP وأوقات الاتصال — ضروريٌّ لتشخيص مشكلة توجيه أو backend بطيء.

فحوص الصحة المتقدّمة: اكتشاف الخوادم الخلفية المُعطَّلة

يُفعِّل توجيه check على كل سطر server فحوصَ الصحة. يفتح ‏HAProxy اتصال TCP افتراضيًا للتحقّق من استجابة المنفذ. للتعمّق أكثر، يُرسل option httpchk GET /health طلبًا HTTP حقيقيًا وينتظر رمز 2xx. تعني معاملات inter 2s fall 3 rise 2: الفحص كل ثانيتين، إزالة الخادم بعد 3 حالات فشل متتالية، إعادة إدماجه بعد نجاحين. تضمن هذه التهيئة إقصاء backend مُعطَّل من المجمّع في 6 ثوانٍ بالحد الأقصى. أضف option redispatch ليُعيد ‏HAProxy محاولة الطلبات الفاشلة على خادم آخر في المجمّع.

خوارزميات موازنة الأحمال: أيّها تختار؟

مرّر الجدول أفقيًا

الخوارزميةالسلوكالأنسب لـ
roundrobinيوزّع الطلبات دوريًا بين الخوادم. يدعم المعامل weight لضبط التوزيع.الـ backends ذات القدرات المتكافئة
leastconnيُرسل كل طلب جديد إلى الخادم ذي أقل عدد من الاتصالات النشطة.الاتصالات الطويلة (WebSocket، قاعدة البيانات)
sourceيُجزِّئ عنوان IP المصدر لثبات الجلسة دون cookie.الجلسات التي لا يمكن مشاركتها بين الـ backends
uriيُجزِّئ URI الطلب للتوجيه دائمًا إلى الـ backend ذاته.ذاكرات التخزين المؤقت حيث تُهمّ موضعية البيانات

استكشاف الأخطاء وإصلاحها: الأخطاء الشائعة والحلول

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

الأخطاء الشائعة وطرق حلّها

  • [ALERT] Starting frontend http_front: cannot bind socket [0.0.0.0:80] — المنفذ 80 يستخدمه عملية أخرى (nginx، apache2). حدّدها بـ sudo ss -tlnp | grep ':80'، وأوقف الخدمة المنافسة (sudo systemctl stop nginx)، ثم أعِد تحميل HAProxy.
  • [WARNING] Server app_servers/app1 is DOWN, reason: Layer4 connection problem — لا يستطيع HAProxy الوصول إلى عنوان IP أو منفذ الـ backend. تحقّق من أن الخادم التطبيقي يعمل، وأن جداره الناري يسمح بالاتصالات من IP خادم VPS لـ HAProxy، وأن العنوان في haproxy.cfg صحيح.
  • [ALERT] parsing [/etc/haproxy/haproxy.cfg:42] : unknown keyword 'serveur' — خطأ في بناء جملة ملف التهيئة. يُشير الأمر haproxy -c -f /etc/haproxy/haproxy.cfg إلى رقم السطر بالضبط. كلمات HAProxy المفتاحية بالإنجليزية: server، frontend، backend. تحقّق أيضًا من المسافات البادئة (HAProxy يقبل المسافات فقط).
  • [ALERT] ssl library has no cert for frontend https_front أو certificate expired — ملف bundle.pem غائب أو فارغ أو يحتوي شهادة منتهية. أعِد بناء الحزمة من ملفات Let's Encrypt المحدَّثة (fullchain.pem + privkey.pem) ثم أعِد التحميل.
  • صفحة الإحصاءات تُعيد HTTP 403 — تهيئة stats auth موجودة لكن بيانات الاعتماد لم تُرسَل، أو عنوان IP المصدر ليس في قائمة stats allow-from. تحقّق من العنوان (/stats افتراضيًا) وبيانات الاعتماد، وأضف مؤقتًا stats allow-from 0.0.0.0/0 للتشخيص.

نصيحة: بعد كل تعديل على haproxy.cfg، شغّل دائمًا sudo haproxy -c -f /etc/haproxy/haproxy.cfg قبل systemctl reload. يستغرق هذا التحقّق من الصحة أقل من ثانية ويمنع أي انقطاع في الخدمة إن كان الملف يحتوي خطأً.

للتعمّق أكثر

تُفصِّل الوثائق الرسمية لـ HAProxy جميع التوجيهات وخيارات TCP المتقدّمة ودعم QUIC/HTTP3 (HAProxy 2.6+) وتهيئة التوافر العالي مع Keepalived لتبادل الملكية على IP افتراضي بين نسختَي HAProxy. يغطّي هذا الدليل النشر على خادم VPS من ServOrbit؛ وتبقى وثائق الناشر المرجع للضبط الدقيق.

انشر HAProxy في دقائق على خادم VPS Cloud من ServOrbit

أطلق خادم VPS Cloud من ServOrbit الآن وثبّت HAProxy بنقرة واحدة عبر Marketplace — بنية تحتية احترافية دون تعقيد.