1. المقدمة
في المشهد الرقمي الحالي، يعتبر ضمان التوافر العالي والأداء الأمثل لتطبيقات الويب أمرًا بالغ الأهمية. عندما ينمو عدد الزوار إلى موقعك أو تطبيقك، قد لا يكون الخادم الفردي كافيًا للتعامل مع الحمل بكفاءة. هنا يأتي دور التوزيع المتوازن للحمل، ويبرز HAProxy كأحد أقوى وأفضل الحلول المتاحة لهذا الغرض.
ستقوم هذه الدليل الشامل بإرشادك خلال عملية إعداد وتكوين HAProxy على أوبونتو لتوزيع الحركة الواردة عبر عدة خوادم خلفية. بنهاية هذا الدليل، سيكون لديك حل قوي للتوزيع المتوازن يمكن أن يحسن بشكل كبير من أداء التطبيق الخاص بك، وموثوقيته، وقابليته للتوسع.
2. فهم التوزيع المتوازن للحمل
قبل الغوص في التفاصيل التقنية، دعونا نستعرض بإيجاز ما هو التوزيع المتوازن للحمل ولماذا هو مهم.
التوزيع المتوازن للحمل هو عملية توزيع حركة الشبكة الواردة عبر عدة خوادم. هذا النهج يوفر عدة فوائد:
- تحسين الأداء: من خلال توزيع الحمل على عدة خوادم، يمكنك تقليل الضغط على أي خادم فردي، مما يؤدي إلى تحسين وقت الاستجابة.
- التوافر العالي: إذا تعطل أحد الخوادم، يمكن للموازن إعادة توجيه الحركة إلى الخوادم الصحية المتبقية، مما يضمن استمرار توفر التطبيق.
- قابلية التوسع: عندما ينمو عدد الزوار، يمكنك بسهولة إضافة المزيد من الخوادم إلى مجموعة الخوادم الخلفية للتعامل مع الزيادة في الحمل.
- المرونة: يتيح لك الموازن إجراء الصيانة على الخوادم الخلفية دون تعطل عن طريق إزالتها مؤقتًا من المجموعة.
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
: يحدد المستخدم والمجموعة التي يعمل تحتها HAProxydaemon
: يشغل 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
: يمكن تسجيلات HTTPoption dontlognull
: يعطل تسجيل الاتصالات الفارغةtimeout
: يحدد القيم المختلفة للمهلة الزمنية
قسم الواجهة الأمامية
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
هذا القسم يحدد كيفية معالجة الطلبات:
bind *:80
: يستمع على جميع الواجهات على المنفذ 80stats 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، قد تواجه بعض المشكلات الشائعة. إليك كيفية استكشافها وحلها:
- أخطاء التكوين: تحقق دائمًا من تكوينك بحثًا عن أخطاء في بناء الجملة قبل إعادة تشغيل HAProxy:
$ haproxy -c -f /etc/haproxy/haproxy.cfg
- تعطل الخوادم الخلفية: تحقق من صفحة إحصاءات HAProxy لمعرفة ما إذا كانت أي من الخوادم الخلفية محددة على أنها DOWN. تأكد من أن خوادمك الخلفية تعمل ويمكن الوصول إليها.
- مشاكل الاتصال: تأكد من أن HAProxy يمكنه الوصول إلى الخوادم الخلفية الخاصة بك. تحقق من قواعد الجدار الناري وتكوينات الشبكة.
- مشكلات شهادات SSL: إذا كنت تستخدم إنهاء SSL، تأكد من أن شهاداتك صالحة ومعدة بشكل صحيح.
- التسجيلات: قم بتمكين تسجيلات مفصلة لاستكشاف المشكلات:
global
log /dev/log local0 debug
ثم تحقق من التسجيلات:
$ sudo tail -f /var/log/haproxy.log
13. أفضل الممارسات واعتبارات الأمان
لضمان الأداء الأمثل والأمان لإعداد HAProxy الخاص بك، ضع في اعتبارك أفضل الممارسات التالية:
- التحديثات المنتظمة: حافظ على تحديث HAProxy وخوادمك الخلفية بأحدث التصحيحات الأمنية.
- الاتصال الآمن: استخدم SSL/TLS لجميع الاتصالات، بما في ذلك بين HAProxy والخوادم الخلفية.
- التحكم في الوصول: قم بتطبيق القائمة البيضاء لعناوين IP أو المصادقة للمناطق الحساسة مثل صفحة الإحصاءات.
- المراقبة: قم بإعداد المراقبة والتنبيه لـ HAProxy وخوادمك الخلفية.
- نسخ احتياطي للتكوين: قم بعمل نسخ احتياطي منتظم لملف تكوين HAProxy.
- تحديد معدل الطلبات: قم بتطبيق تحديد معدل الطلبات لحماية ضد هجمات DDoS.
- التسجيلات: قم بتكوين التسجيلات الشاملة لاستكشاف الأخطاء وتحليل الأمان.
- تشغيل HAProxy بمستخدم غير الجذر: قم بتشغيل HAProxy تحت مستخدم منفصل وغير الجذر لتحسين الأمان.
- الحفاظ على الاتصال عبر TCP: قم بتمكين الحفاظ على الاتصال عبر TCP لاكتشاف وإزالة الاتصالات الميتة:
option tcpka
- الاختبار المنتظم: قم باختبار إعداد التوزيع المتوازن الخاص بك بشكل دوري، بما في ذلك سيناريوهات الفشل.
14. الخلاصة
في هذا الدليل الشامل، قمنا بتغطية أساسيات إعداد وتكوين HAProxy كموازن حمل على أوبونتو. لقد استعرضنا التكوينات الأساسية والمتقدمة، وتقنيات استكشاف الأخطاء وإصلاحها، وأفضل الممارسات للحفاظ على حل توزيع حمل قوي وآمن.
تجعل مرونة HAProxy وميزاته القوية منه اختيارًا ممتازًا لتحسين أداء التطبيقات الخاصة بك وموثوقيتها وقابليتها للتوسع. كلما أصبحت أكثر إلمامًا بـ HAProxy، ستكتشف المزيد من الطرق لتحسين البنية التحتية الخاصة بك لتلبية احتياجاتك الخاصة.
تذكر أن التوزيع المتوازن هو جزء واحد فقط من بناء تطبيق ويب قابل للتوسع والاعتماد عليه. ضع في اعتبارك دمج HAProxy مع أدوات وممارسات أخرى، مثل الحاويات، والنشر التلقائي، والمراقبة الشاملة، لإنشاء بنية تحتية ويب قوية وفعالة.