التوزيع المتوازن للحمل باستخدام HAProxy على أوبونتو

دليل التثبيت تكوين موازنة تحميل HAProxy على أوبونتو دبيان

1. المقدمة

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

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

2. فهم التوزيع المتوازن للحمل

قبل الغوص في التفاصيل التقنية، دعونا نستعرض بإيجاز ما هو التوزيع المتوازن للحمل ولماذا هو مهم.

التوزيع المتوازن للحمل هو عملية توزيع حركة الشبكة الواردة عبر عدة خوادم. هذا النهج يوفر عدة فوائد:

  1. تحسين الأداء: من خلال توزيع الحمل على عدة خوادم، يمكنك تقليل الضغط على أي خادم فردي، مما يؤدي إلى تحسين وقت الاستجابة.
  2. التوافر العالي: إذا تعطل أحد الخوادم، يمكن للموازن إعادة توجيه الحركة إلى الخوادم الصحية المتبقية، مما يضمن استمرار توفر التطبيق.
  3. قابلية التوسع: عندما ينمو عدد الزوار، يمكنك بسهولة إضافة المزيد من الخوادم إلى مجموعة الخوادم الخلفية للتعامل مع الزيادة في الحمل.
  4. المرونة: يتيح لك الموازن إجراء الصيانة على الخوادم الخلفية دون تعطل عن طريق إزالتها مؤقتًا من المجموعة.

3. ما هو HAProxy؟

HAProxy (الوكيل ذو التوافر العالي) هو حل مجاني ومفتوح المصدر للتوزيع المتوازن للحمل والوكالة للتطبيقات القائمة على TCP و HTTP. يشتهر بسرعته وكفاءته، وهو قادر على التعامل مع ملايين الاتصالات في الثانية.

تشمل الميزات الرئيسية لـ HAProxy:

  • التوزيع المتوازن على طبقة 4 (TCP) وطبقة 7 (HTTP)
  • إنهاء SSL/TLS
  • فحص صحة الخوادم الخلفية
  • تسجيلات وإحصاءات متقدمة
  • توجيه قائم على المحتوى
  • تحديد معدلات الحماية وحماية DDoS

الآن بعد أن فهمنا الأساسيات، دعنا ننتقل إلى التنفيذ العملي.

4. إعداد البيئة

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

  • خادم أوبونتو 20.04 مع صلاحيات الجذر أو sudo
  • على الأقل خادمان خلفيان (سنستخدم Apache في هذا الدليل)
  • معرفة أساسية بخط الأوامر في لينكس

تأكد من أن نظامك محدث قبل المتابعة:

$ sudo apt update
$ sudo apt upgrade

5. تثبيت HAProxy

تثبيت HAProxy على أوبونتو بسيط. قم بتشغيل الأمر التالي:

$ sudo apt install haproxy

بعد اكتمال التثبيت، يمكنك التحقق من الإصدار المثبت:

$ haproxy -v

يجب أن ترى ناتجًا مشابهًا لـ:

HAProxy version 2.4.24-0ubuntu0.22.04.1 2023/10/31

6. تكوين HAProxy

ملف التكوين الرئيسي لـ HAProxy موجود في /etc/haproxy/haproxy.cfg. قبل إجراء أي تغييرات، من الجيد أخذ نسخة احتياطية من التكوين الأصلي:

$ sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak

الآن، لنقم بإنشاء تكوين أساسي. افتح الملف بمحرر النصوص المفضل لديك:

$ sudo nano /etc/haproxy/haproxy.cfg

استبدل المحتويات بالتكوين الأساسي التالي:

global
    log /dev/log local0
    log /dev/log local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
    stats timeout 30s
    user haproxy
    group haproxy
    daemon
defaults
    log global
    mode http
    option httplog
    option dontlognull
    timeout connect 5000
    timeout client  50000
    timeout server  50000
frontend http_front
    bind *:80
    stats uri /haproxy?stats
    default_backend http_back
backend http_back
    balance roundrobin
    server web1 10.0.0.1:80 check
    server web2 10.0.0.2:80 check

هذا التكوين يقوم بإعداد موازن حمل HTTP أساسي. سنشرح كل قسم بالتفصيل لاحقًا.

7. إعداد الخوادم الخلفية

في هذا الدليل، سنفترض أن لديك خادمين يعملان على Apache. إذا لم تقم بإعدادهما بعد، يمكنك القيام بذلك بهذه الأوامر على كل خادم:

$ sudo apt install apache2
$ sudo systemctl start apache2
$ sudo systemctl enable apache2

لتفريق الخوادم عن بعضها البعض، قد ترغب في تخصيص الصفحة الافتراضية لـ Apache. على كل خادم، قم بتحرير ملف /var/www/html/index.html:

$ sudo nano /var/www/html/index.html

استبدل المحتوى بمعرف بسيط، مثل:

<h1>مرحبا بكم في الخادم 1</h1>

(قم بتعديل الرقم لكل خادم)

تأكد من تدوين عناوين IP لخوادمك الخلفية وتحديث ملف haproxy.cfg وفقًا لذلك في قسم backend http_back.

8. شرح ملف تكوين HAProxy

لنقم بتحليل ملف تكوين HAProxy الذي أنشأناه سابقًا:

القسم العالمي

global
    log /dev/log local0
    log /dev/log local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

هذا القسم يحدد المعلمات العالمية:

  • log: يحدد مكان إرسال السجلات
  • chroot: يغير الدليل الجذري لتحسين الأمان
  • stats socket: ينشئ مقبس UNIX للأوامر في وقت التشغيل
  • user و group: يحدد المستخدم والمجموعة التي يعمل تحتها HAProxy
  • daemon: يشغل HAProxy في الخلفية

قسم الافتراضات

defaults
    log global
    mode http
    option httplog
    option dontlognull
    timeout connect 5000
    timeout client  50000
    timeout server  50000

هذا القسم يحدد المعلمات الافتراضية لجميع الأقسام الأخرى:

  • mode http: يحدد الوضع الافتراضي ليكون التوزيع المتوازن للحمل على طبقة HTTP (الطبقة 7)
  • option httplog: يمكن تسجيلات HTTP
  • option dontlognull: يعطل تسجيل الاتصالات الفارغة
  • timeout: يحدد القيم المختلفة للمهلة الزمنية

قسم الواجهة الأمامية

frontend http_front
    bind *:80
    stats uri /haproxy?stats
    default_backend http_back

هذا القسم يحدد كيفية معالجة الطلبات:

  • bind *:80: يستمع على جميع الواجهات على المنفذ 80
  • stats uri: يتيح صفحة الإحصاءات في المسار المحدد
  • default_backend: يحدد الخادم الخلفي الافتراضي للاستخدام

قسم الخوادم الخلفية

backend http_back
    balance roundrobin
    server web1 10.0.0.1:80 check
    server web2 10.0.0.2:80 check

هذا القسم يحدد الخوادم الخلفية:

  • balance roundrobin: يستخدم خوارزمية توزيع الحمل بالتناوب
  • server: يحدد كل خادم خلفي مع عنوان IP الخاص به والمنفذ
  • check: يتيح فحص صحة الخوادم

9. اختبار موازن الحمل

بعد تكوين HAProxy، أعد تشغيل الخدمة:

$ sudo systemctl restart haproxy

يمكنك التحقق من الحالة للتأكد من أنها تعمل بدون أخطاء:

$ sudo systemctl status haproxy

الآن، يمكنك اختبار موازن الحمل عن طريق الوصول إليه من خلال متصفح الويب أو استخدام curl:

$ curl http://your_haproxy_ip

كرر هذا الأمر عدة مرات. يجب أن ترى الردود تتناوب بين خوادمك الخلفية، مما يظهر أن موازن الحمل يعمل.

10. المراقبة والإحصاءات

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

stats uri /haproxy?stats

للوصول إلى صفحة الإحصاءات، افتح متصفح ويب وانتقل إلى:

http://your_haproxy_ip/haproxy?stats

توفر هذه الصفحة معلومات في الوقت الفعلي حول الخوادم الأمامية والخلفية الخاصة بك، بما في ذلك:

  • حالة الخادم (UP/DOWN)
  • الجلسات الحالية
  • حجم البيانات الواردة/الصادرة
  • معدلات الطلبات
  • أوقات الاستجابة

يمكنك استخدام هذه المعلومات لمراقبة صحة وأداء إعداد التوزيع المتوازن الخاص بك.

11. ميزات HAProxy المتقدمة

يوفر HAProxy العديد من الميزات المتقدمة لضبط إعداد التوزيع المتوازن الخاص بك. هنا بعض منها قد تجدها مفيدة:

إنهاء SSL

للتعامل مع حركة المرور عبر HTTPS، يمكنك تكوين HAProxy ليقوم بإنهاء SSL. هذا يخفف عبء معالجة SSL عن الخوادم الخلفية. إليك مثال على التكوين:

frontend https_front
    bind *:443 ssl crt /etc/ssl/certs/mycert.pem
    reqadd X-Forwarded-Proto:\ https
    default_backend http_back

الجلسات الثابتة

إذا كان تطبيقك يتطلب استمرارية الجلسات، يمكنك تفعيل الجلسات الثابتة:

backend http_back
    balance roundrobin
    cookie SERVERID insert indirect nocache
    server web1 10.0.0.1:80 check cookie server1
    server web2 10.0.0.2:80 check cookie server2

فحوصات الصحة

يمكن لـ HAProxy إجراء فحوصات صحية أكثر تقدمًا. على سبيل المثال، للتحقق من ما إذا كان URL محدد يعيد حالة 200:

backend http_back
    balance roundrobin
    option httpchk GET /health.php
    http-check expect status 200
    server web1 10.0.0.1:80 check
    server web2 10.0.0.2:80 check

تحديد معدل الطلبات

لحماية خوادمك من الإساءة، يمكنك تنفيذ تحديد لمعدل الطلبات:

frontend http_front
    bind *:80
    stick-table type ip size 100k expire 30s store http_req_rate(10s)
    http-request track-sc0 src
    http-request deny deny_status 429 if { sc_http_req_rate(0) gt 100 }
    default_backend http_back

يقوم هذا التكوين بتحديد كل IP إلى 100 طلب كل 10 ثوانٍ.

12. استكشاف المشكلات الشائعة وحلها

عند العمل مع HAProxy، قد تواجه بعض المشكلات الشائعة. إليك كيفية استكشافها وحلها:

  1. أخطاء التكوين: تحقق دائمًا من تكوينك بحثًا عن أخطاء في بناء الجملة قبل إعادة تشغيل HAProxy:
$ haproxy -c -f /etc/haproxy/haproxy.cfg
  1. تعطل الخوادم الخلفية: تحقق من صفحة إحصاءات HAProxy لمعرفة ما إذا كانت أي من الخوادم الخلفية محددة على أنها DOWN. تأكد من أن خوادمك الخلفية تعمل ويمكن الوصول إليها.
  2. مشاكل الاتصال: تأكد من أن HAProxy يمكنه الوصول إلى الخوادم الخلفية الخاصة بك. تحقق من قواعد الجدار الناري وتكوينات الشبكة.
  3. مشكلات شهادات SSL: إذا كنت تستخدم إنهاء SSL، تأكد من أن شهاداتك صالحة ومعدة بشكل صحيح.
  4. التسجيلات: قم بتمكين تسجيلات مفصلة لاستكشاف المشكلات:
global
    log /dev/log local0 debug

ثم تحقق من التسجيلات:

$ sudo tail -f /var/log/haproxy.log

13. أفضل الممارسات واعتبارات الأمان

لضمان الأداء الأمثل والأمان لإعداد HAProxy الخاص بك، ضع في اعتبارك أفضل الممارسات التالية:

  1. التحديثات المنتظمة: حافظ على تحديث HAProxy وخوادمك الخلفية بأحدث التصحيحات الأمنية.
  2. الاتصال الآمن: استخدم SSL/TLS لجميع الاتصالات، بما في ذلك بين HAProxy والخوادم الخلفية.
  3. التحكم في الوصول: قم بتطبيق القائمة البيضاء لعناوين IP أو المصادقة للمناطق الحساسة مثل صفحة الإحصاءات.
  4. المراقبة: قم بإعداد المراقبة والتنبيه لـ HAProxy وخوادمك الخلفية.
  5. نسخ احتياطي للتكوين: قم بعمل نسخ احتياطي منتظم لملف تكوين HAProxy.
  6. تحديد معدل الطلبات: قم بتطبيق تحديد معدل الطلبات لحماية ضد هجمات DDoS.
  7. التسجيلات: قم بتكوين التسجيلات الشاملة لاستكشاف الأخطاء وتحليل الأمان.
  8. تشغيل HAProxy بمستخدم غير الجذر: قم بتشغيل HAProxy تحت مستخدم منفصل وغير الجذر لتحسين الأمان.
  9. الحفاظ على الاتصال عبر TCP: قم بتمكين الحفاظ على الاتصال عبر TCP لاكتشاف وإزالة الاتصالات الميتة:
option tcpka
  1. الاختبار المنتظم: قم باختبار إعداد التوزيع المتوازن الخاص بك بشكل دوري، بما في ذلك سيناريوهات الفشل.

14. الخلاصة

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

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

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

LEAVE A COMMENT