مقدمة
وكيل عالي الإتاحة (HAProxy)، هو حل وكيل وموازن حمل TCP/HTTP مفتوح المصدر وشائع موازن حمل قادر على العمل على Solaris, FreeBSD، و Linux. ويُستخدم بشكل شائع لتحسين موثوقية وأداء بيئة الخادم من خلال توفير توزيع متوازن لضغط العمل عبر خوادم متعددة. يُستخدم هذا النوع من الأدوات في العديد من البيئات البارزة مثل Instagram وGitHub وTwitter وImgur.
هذا الدليل سيعرفك على HAProxy، ويطلعك على مصطلحات موازنة الحمل، ويقدم أمثلة على كيفية الاستفادة منه لتعزيز أداء وموثوقية بيئات الخادم.
مصطلحات HAProxy الأساسية
قبل الدخول في تفاصيل موازنة الحمل و البروكسي، هناك بعض المصطلحات والمفاهيم الهامة التي يجب التعرف عليها. سنبدأ بمراجعة هذه المفاهيم في الأقسام التالية.
قائمة التحكم في الوصول (ACL)
عندما يتعلق الأمر بموازنة الحمل، قوائم ACL تُستخدم لاختبار حالة معينة واتخاذ إجراء بناءً على النتيجة. يتيح ذلك القدرة على توجيه حركة المرور بشكل مثالي بناءً على عوامل مثل اتصالات الخلفية ومطابقة الأنماط، بالإضافة إلى عوامل أخرى عديدة. إليك مثال على استخدام ACL:
|
1 |
acl url_blog path_beg /blog |
في هذه الحالة، تتطابق قائمة ACL إذا كان المسار المطلوب من المستخدم يبدأ بـ /blog. على سبيل المثال، سيشير طلب المطابقة هذا إلى http://yourdomain.com/blog/blog-entry-1. يحتوي دليل تكوين HAProxy على دليل مفصل لاستخدام ACL.
الخلفية (Backend)
يتم استقبال الطلبات الموجهة بواسطة مجموعة من الخوادم يشار إليها باسم الخلفية (backend). يتم تحديد الطلبات في قسم backend من تكوين HAProxy. بعبارات أبسط، يمكن تعريف الخلفية من خلال خوارزميات موازنة الحمل المستخدمة وقائمة بالمنافذ والخوادم. يمكن أن تتكون الخلفية من خادم واحد أو خوادم متعددة. ومع إضافة المزيد من الخوادم إلى الخلفية، تزداد سعة الحمل المحتملة، مع توزيع المعالجة عبر خوادم متعددة. إذا توقف بعض خوادم الخلفية عن العمل، فستعمل الخوادم الأخرى كنسخ احتياطية للتعامل مع معالجة الطلبات.
دعونا نلقي نظرة على مثال لتكوين خلفيتين. في هذه الحالة، هما blog-backend وweb-backend. يحتوي كل منهما على خادمي ويب، يستمعان على المنفذ 80:
|
1 2 3 4 5 6 7 8 9 10 |
backend web-backend balance roundrobin server web1 web1.yourdomain.com:80 check server web2 web2.yourdomain.com:80 check backend blog-backend balance roundrobin node http server blog1 blog1.yourdomain.com:80 check server blog2 blog2.yourdomain.com:80 check |
يهدف السطر balance roundrobin إلى تحديد خوارزمية موازنة الحمل. يمكن العثور على التفاصيل في قسم خوارزميات موازنة الحمل القادم، بينما يقوم mode http بإعداد استخدام وكالة الطبقة السابعة (layer 7 proxying). سنشرح هذا في قسم أنواع موازنة الحمل . أيضًا، يشير خيار check بعد توجيه الخوادم إلى أنه سيتم تشغيل فحوصات السلامة على خوادم الخلفية المحددة تلك.
الواجهة الأمامية (Frontend)
يُشار إلى تعريف كيفية توجيه الطلبات إلى الخلفية باسم الواجهة الأمامية (frontend). يتم تحديد الطلبات في قسم frontend من تكوين HAProxy. وهي تتكون من قوائم ACL، ومنفذ، ومجموعة من عناوين IP، وقاعدة تحدد الخلفيات التي يجب استخدامها اعتمادًا على شروط ACL التي تم استيفاؤها وتسمى قاعدة use_backend. بالإضافة إلى ذلك، توجد أيضًا قاعدة default_backend للتعامل مع أي حالة أخرى. سيشرح القسم التالي كيفية تكوين الواجهة الأمامية لأنواع مختلفة من حركة مرور الشبكة.
أنواع موازنة الحمل
بعد تحديد المكونات الأساسية المستخدمة لموازنة التحميل، يمكننا الآن الانتقال إلى الأنواع الأساسية لموازنة التحميل.
بدون موازنة تحميل
في أبسط أشكالها، يمكن توضيح غياب موازنة التحميل على النحو التالي:
في هذا السيناريو، يتصل المستخدم مباشرة بخادم الويب على yourdomain.com. لا يوجد موازنة تحميل هنا. وبما أنه لا يوجد سوى خادم قاعدة بيانات واحد، فإذا توقف عن العمل، فسينقطع الوصول إلى المعلومات الموجودة عليه تمامًا. وإذا حاول العديد من المستخدمين الاتصال بخادم ويب واحد في نفس الوقت، ولم يكن قادرًا على تحمل هذا العبء، فستتباطأ جميع الاتصالات أو تفشل تمامًا في الاتصال.
موازنة التحميل (الطبقة 4)
تعد طرق موازنة طبقة النقل أو الطبقة 4 إحدى أبسط الطرق وأكثرها عملية لموازنة حركة مرور الشبكة عبر خوادم متعددة. يوجه هذا الأسلوب من موازنة التحميل أي مستخدم متصل بناءً على نطاق بروتوكول الإنترنت (IP) الذي يقع فيه عنوان IP الخاص به والمنفذ. وبعبارة أخرى، إذا كان http://yourdomain.com/anything هو مصدر الطلب، فإن الخلفية (backend) المحددة لمعالجة هذه الطلبات ستكون هي التي تتعامل معها في النهاية. حيث ستقوم بتوجيه تلك الطلبات الخاصة بـ yourdomain.com على المنفذ 80.
يبدو التكوين الأساسي لموازنة تحميل الطبقة 4 كما يلي:
عندما يصل المستخدم إلى موازن التحميل، يتم توجيه طلباته إلى مجموعة خوادم الويب الخلفية (web-backend). وسيقوم الخادم الخلفي المهيأ بالرد مباشرة على طلب المستخدم. ولتجنب مواجهة المستخدم لبيانات غير متسقة، يجب أن تقدم جميع خوادم الويب الخلفية محتوى متطابقًا. ووفقًا للمخطط أعلاه، يرتبط كلا خادمي الويب في النهاية بنفس خادم قاعدة البيانات.
موازنة التحميل (الطبقة 7)
هناك طريقة أخرى أكثر تعقيدًا لموازنة حركة مرور الشبكة، وهي استخدام موازنة تحميل الطبقة 7، أو طبقة التطبيقات. يتيح هذا النهج توجيه طلبات المستخدمين إلى خوادم خلفية مختلفة اعتمادًا على محتوى طلبات المستخدمين. وتسمح هذه الطريقة بحدوث موازنة التحميل عبر خوادم تطبيقات ويب متعددة من خلال نفس المنفذ والنطاق. لمزيد من التفاصيل حول هذه الطبقة، ألقِ نظرة على القسم الفرعي لـ HTTP في دليلنا تفاصيل الشبكات الدقيقة: تعرف على المصطلحات والواجهات والبروتوكولات التعليمي.
يوضح المخطط التالي موازنة تحميل الطبقة 7:
في هذه الحالة، يطلب المستخدم yourdomain.com/blog، ويتم توجيه طلبه إلى الخلفية الخاصة بالمدونة (blog backend). هذه مجموعة خوادم خلفية مخصصة خصيصًا لتشغيل تطبيق المدونة. وفي الوقت نفسه، سيتم توجيه الطلبات الأخرى إلى الخلفية الخاصة بالويب (web-backend). ومع ذلك، تؤدي كلتا الخلفيتين في النهاية إلى الوصول إلى نفس خادم قاعدة البيانات.
سيبدو مثال على جزء صغير من تهيئة الواجهة الأمامية (frontend) لموازنة تحميل الطبقة 7 شبيهًا بالأوامر التالية. وهي تقوم بتهيئة الواجهة الأمامية لـ http للتعامل مع حركة المرور الواردة عبر المنفذ 80:
|
1 2 3 4 5 6 7 8 |
frontend http bind *:80 node http acl url_blog path_beg /blog use_backend blog.backend if url_blog default_backend web.backend |
إذا كان مسار طلب المستخدم يبدأ بـ /blog، فإن acl url_blog path_beg /blog سيتطابق مع الطلب.
use_backend blog backend if url_blog يقوم بتوجيه حركة المرور إلى blog-backend باستخدام ACL.
defaut_backen web_backend يوجه جميع عمليات توجيه حركة المرور الأخرى إلى web-backend.
خوارزميات موازنة التحميل
عند إجراء موازنة التحميل، فإن خوارزمية موازنة التحميل هي التي تحدد خادم الخلفية الذي سيتم تحديده لهذا الغرض. هناك العديد من خيارات الخوارزميات التي يوفرها HAProxy. بالإضافة إلى ذلك، من الممكن تعيين معلمة وزن (weight) للخوادم من أجل التحكم في عدد مرات اختيار خادم معين مقارنة بالخوادم الأخرى. هناك ببساطة عدد كبير جدًا من الخوارزميات المتاحة بحيث لا يمكن وصفها جميعًا. لذلك، سيركز هذا الدليل فقط على الخوارزميات الأكثر شيوعًا. يمكنك الرجوع إلى HAProxy Documentation Converter للاطلاع على القائمة الكاملة. وتشمل الأكثر استخدامًا ما يلي:
- roundrobin: الخوارزمية الافتراضية التي تختار الخوادم بدورها.
- leastconn: يتم تلقائيًا تحديد الخادم الذي يحتوي على أقل عدد من الاتصالات. ومع ذلك، يجب تدوير هذه الخوادم داخل نفس الخلفية بطريقة round-robin.
- source: تختار الخوارزمية الخادم بناءً على عنوان IP الذي يصدر منه طلب المستخدم. وهي طريقة لضمان اتصال المستخدم دائمًا بنفس الخادم.
Sticky Sessions
بالنسبة لبعض التطبيقات، يلزم أن يتصل المستخدمون دائمًا بنفس الخادم. من خلال 'sticky sessions' واستخدام appsession في الخلفية التي تتطلب ذلك، يمكن تحقيق هذا الاستمرار.
Processing Health Checks
يحتاج HAProxy إلى طريقة يمكنه من خلالها تحديد قدرة خادم الخلفية على معالجة الطلبات. ويحل هذا محل إزالة الخادم من الخلفية إذا توقف عن العمل. هناك 'فحص حالة' افتراضي يتم تشغيله لمحاولة إنشاء اتصال TCP. ويقوم بذلك عن طريق الاستماع إلى عنوان IP والمنفذ اللذين تم تكوينهما.
إذا لم ينجح فحص الحالة الخاص بالخادم، فلن يتمكن الخادم من معالجة الطلبات المرسلة. عند هذه النقطة، يتم تعطيل الخادم تلقائيًا في الخلفية، ولا يتم توجيه حركة المرور إليه بعد الآن حتى يعود إلى العمل بشكل طبيعي (سليم). ومع ذلك، في بعض الحالات، يثبت أن تحديد حالة الخادم عبر فحص الحالة الافتراضي غير كافٍ.
Alternate Solutions
قد يتبين أن HAProxy معقد للغاية بالنسبة لاحتياجاتك الخاصة. في هذه الحالة، هناك بعض البدائل الجيدة التي قد تكون أكثر كفاءة:
- Nginx: هذا خادم ويب سريع وموثوق يمكن الاستفادة منه لأغراض موازنة التحميل والوكيل (proxy). في الواقع، غالبًا ما يُستخدم Nginx جنبًا إلى جنب مع HAProxy الذي يستفيد من قدرات الضغط والتخزين المؤقت لديه.
- Linux Virtual Servers (LVS): هذا موازن تحميل بسيط من الطبقة 4 وهو مضمن في العديد من أنظمة Linux.
High Availability
حتى الآن، تحدثنا عن موازنة التحميل في الطبقة 4 والطبقة 7. كلاهما يستخدم موازن تحميل لتحديد أي من خوادم الخلفية المتعددة سيتم تكليفه بالاستجابة لطلب المستخدم. ولكن من المهم أن نأخذ في الاعتبار قيود موازن التحميل. وتحديدًا، أنه يمثل نقطة فشل واحدة. هذا يعني أنه إذا توقف عن العمل، أو تعرض لضغط زائد بطلبات المستخدمين، فسيؤدي ذلك إلى توقف الخدمة أو تأخر معالجة الطلبات، على التوالي. ومع ذلك، فإن إعداد HA (التوفر العالي) يوفر بنية تحتية تفتقر إلى أي نقطة فشل واحدة. وهذا يمنع حدوث حالات توقف الخدمة بسبب فشل الخادم من خلال إدخال التكرار في كل مستوى من مستويات بنية النظام. في حين أن موازن التحميل سيساعد في تسهيل تكرار الخلفية، فإن موازنات التحميل تحتاج إلى تطبيق التكرار أيضًا.
يوضح المخطط التالي شكلاً أساسيًا لإعداد التوفر العالي:

تحتوي هذه البنية التحتية على العديد من موازنات التحميل (أحدها نشط، والباقي خامل) المرتبطة بعنوان IP ثابت. يمكن إعادة تعيين عنوان IP هذا إلى خادم مختلف إذا تطلب الموقف ذلك. ينتقل طلب المستخدم عبر عنوان IP الخارجي إلى موازن التحميل النشط حاليًا. إذا كان موازن التحميل غير متصل بالإنترنت في ذلك الوقت، فستكتشف آلية الحماية من الفشل حالته، وتُعيد تعيين عنوان IP إلى الخادم (الخوادم) الخاملة.
Conclusion
إن الفهم الأساسي لموازنة التحميل ومعرفة بعض الطرق التي يمكن لـ HAProxy من خلالها تلبية احتياجات موازنة التحميل لنظامك يجب أن يمنحك أساسًا قويًا للبدء في تحسين موثوقية وأداء بيئات الخوادم الحالية لديك. يمكنك أيضًا الاطلاع على البرنامج التعليمي الخاص بنا بروكسي Nginx HTTP، وموازنة التحميل، والتخزين المؤقت، والتخزين المؤقت في الذاكرة المخبئية: نظرة عامة لمعرفة المزيد حول خصائص موازنة التحميل لـ Nginx.
حوسبة سعيدة!



التعليقات
لا توجد تعليقات بعد. كن أول من يعلق.