مقدمة في HAProxy ومفاهيم التوازن التحميل

مقدمة

HAProxy، والتي تعني High Availability Proxy، هي برنامج مفتوح المصدر شهير لتحميل الحمولة وحلول الوكيل TCP/HTTP يمكن تشغيله على أنظمة Linux وmacOS وFreeBSD. استخدامه الأكثر شيوعًا هو تحسين أداء وموثوقية بيئة الخادم عن طريق توزيع العبء على عدة خوادم (مثل الخوادم الويب والتطبيقات وقواعد البيانات). يتم استخدامه في العديد من البيئات الرفيعة الملفات، بما في ذلك: GitHub و Imgur و Instagram و Twitter.

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

مصطلحات HAProxy

هناك العديد من المصطلحات والمفاهيم الهامة عند مناقشة توزيع الحمولة والوكالة. ستتناول المصطلحات المستخدمة بشكل شائع في الأقسام التالية.

قبل أن تبدأ في أنواع التوازن الأساسية للحمولة، يجب أن تبدأ بمراجعة ACLs والخوادم الخلفية والواجهات الأمامية.

قائمة التحكم في الوصول (ACL)

فيما يتعلق بتوازن الحمل، تُستخدم ACLs لاختبار شرط ما وتنفيذ إجراء معين (مثل اختيار خادم أو حظر طلب) استنادًا إلى نتيجة الاختبار. استخدام ACLs يتيح توجيه مرور الشبكة بمرونة بناءً على مجموعة متنوعة من العوامل مثل تطابق الأنماط وعدد الاتصالات إلى الخلفية، على سبيل المثال.

مثال على ACL:

acl url_blog path_beg /blog

يتم تطابق هذا ال ACL إذا بدأ مسار طلب المستخدم بـ /blog. سيتم هذا التطابق مع طلب مثل http://yourdomain.com/blog/blog-entry-1، على سبيل المثال.

للحصول على دليل مفصل حول استخدام ACL، تفضل بزيارة دليل تكوين HAProxy.

الخلفية

A backend is a set of servers that receives forwarded requests. Backends are defined in the backend section of the HAProxy configuration. In its most basic form, a backend can be defined by:

  • أي خوارزمية لتوازن الحمل لاستخدامها
  • a list of servers and ports

A backend can contain one or many servers in it. Generally speaking, adding more servers to your backend will increase your potential load capacity by spreading the load over multiple servers. Increased reliability is also achieved through this manner, in case some of your backend servers become unavailable.

فيما يلي مثال على تكوين خلفية مكونة من خادمي ويب في كل منهما، web-backend و blog-backend واللذان يستمعان على المنفذ 80:

backend web-backend
   balance roundrobin
   server web1 web1.yourdomain.com:80 check
   server web2 web2.yourdomain.com:80 check
   
backend blog-backend
   balance roundrobin
   mode http
   server blog1 blog1.yourdomain.com:80 check
   server blog1 blog1.yourdomain.com:80 check

تحدد السطر balance roundrobin خوارزمية توازن الحمل، والتي يتم تفصيلها في القسم خوارزميات توازن الحمل.

الوضع http يُحدد أن الوساطة على الطبقة 7 ستستخدم، والتي يتم شرحها في أنواع توازن الحمولة.

الخيار check في نهاية التوجيهات server يُحدد أن يتم إجراء فحوصات الصحة على تلك الخوادم الخلفية.

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

A frontend defines how requests should be forwarded to backends. Frontends are defined in the frontend section of the HAProxy configuration. Their definitions are composed of the following components:

  • a set of IP addresses and a port (e.g. 10.1.1.7:80, *:443, etc.)
  • قواعد الـ ACL
  • قواعد use_backend، التي تحدد أي الخوادم الخلفية يتم استخدامها اعتمادًا على الشروط التي تتطابق معها ACL، و/أو قاعدة default_backend التي تعالج جميع الحالات الأخرى

A frontend can be configured to various types of network traffic, as explained in the next section.

أنواع توازن الحمولة

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

عدم توازن الحمولة

A simple web application environment with no load balancing might look like the following:

No Load Balancing

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

توازن الحمل على مستوى الطبقة 4

أبسط طريقة لتوازن حمل حركة المرور عبر الشبكة على عدة خوادم هي استخدام توازن الحمل على مستوى الطبقة 4 (طبقة النقل). سيقوم توازن الحمل بهذه الطريقة بتوجيه حركة المرور للمستخدمين بناءً على نطاق العناوين الآي بي والمنفذ (أي إذا تمت إحالة طلب إلى http://yourdomain.com/anything، فسيتم توجيه المرور إلى الخادم الخلفي الذي يتعامل مع جميع الطلبات لـ yourdomain.com على port 80). لمزيد من التفاصيل حول الطبقة 4، تحقق من القسم الفرعي TCP من مقدمة إلى الشبكات.

إليك رسم توضيحي لمثال بسيط على توازن الحمل على مستوى الطبقة 4:

Layer 4 Load Balancing

يصل المستخدم إلى جهاز التوازن الحمل، الذي يحول طلب المستخدم إلى مجموعة الخوادم الخلفية web-backend. أي خادم خلفي يتم اختياره سيستجيب مباشرة لطلب المستخدم. بشكل عام، يجب أن تكون جميع الخوادم في web-backend تخدم محتوى متطابقًا – وإلا فقد يتلقى المستخدم محتوى غير متسق. يرجى ملاحظة أن كلا من خوادم الويب تتصل بنفس خادم قاعدة البيانات.

توازن الحمل على مستوى الطبقة 7

طريقة أخرى، أكثر تعقيدًا، لتوازن حركة المرور عبر الشبكة هي استخدام توازن الحمل على مستوى الطبقة 7 (طبقة التطبيق). باستخدام الطبقة 7، يمكن لجهاز التوازن الحمل تحويل الطلبات إلى خوادم خلفية مختلفة استنادًا إلى محتوى طلب المستخدم. يتيح هذا النوع من توازن الحمل تشغيل عدة خوادم تطبيق ويب تحت نفس النطاق والمنفذ. لمزيد من التفاصيل حول الطبقة 7، يرجى التحقق من الفرع الفرعي HTTP في دليلنا مقدمة للشبكات.

فيما يلي مخطط لمثال بسيط عن توازن حمل على مستوى الطبقة 7:

Layer 7 Load Balancing

في هذا المثال، إذا طلب المستخدم yourdomain.com/blog، يتم توجيهه إلى الخلفية blog، وهي مجموعة من الخوادم التي تشغل تطبيق مدونة. يتم توجيه الطلبات الأخرى إلى web-backend، والتي قد تكون تشغيل تطبيق آخر. كلا الخلفيات تستخدم نفس خادم قاعدة البيانات، في هذا المثال.

A snippet of the example frontend configuration would look like this:

frontend http
  bind *:80
  mode http

  acl url_blog path_beg /blog
  use_backend blog-backend if url_blog
 
  default_backend web-backend

يُكوِّن هذا واجهةً أماميةً بالاسم http، التي تُعالج كل حركة مرور واردة على المنفذ 80.

acl url_blog path_beg /blog يُطابق الطلب إذا كان مسار طلب المستخدم يبدأ بـ /blog.

use_backend blog-backend if url_blog يستخدم ACL لتوجيه حركة المرور إلى blog-backend.

default_backend web-backend يُحدد أن جميع حركة المرور الأخرى سيتم توجيهها إلى web-backend.

خوارزميات توازن الحمل

الخوارزمية التي يتم استخدامها لتوازن الحمل تحدد أي خادم، في الخلفية، سيتم اختياره عند توازن الحمل. يقدم HAProxy عدة خيارات للخوارزميات. بالإضافة إلى خوارزمية توازن الحمل، يمكن تعيين معلمات الوزن للخوادم لتلاعب بكيفية تكرار اختيار الخادم، مقارنة بالخوادم الأخرى.

A few of the commonly used algorithms are as follows:

التجوال الدائري

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

أقل اتصال

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

مصدر

يختار هذا الأسلوب الخادم الذي يتم استخدامه استنادًا إلى تجزئة لعنوان IP المصدر الذي يقوم المستخدمون بتقديم الطلبات منه. يضمن هذا الأسلوب أن يتصل المستخدمون نفسهم بالخوادم نفسها.

جلسات لزجة

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

فحص الصحة

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

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

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

يمكن استخدام خادم الويب Nginx أيضًا كخادم بروكسي مستقل أو موازن حمل، وغالبًا ما يُستخدم بالتزامن مع HAProxy لقدرته على التخزين المؤقت والضغط.

توافر عالي

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

A high availability (HA) setup is broadly defined as infrastructure without a single point of failure. It prevents a single server failure from being a downtime event by adding redundancy to every layer of your architecture. A load balancer facilitates redundancy for the backend layer (web/app servers), but for a true high availability setup, you need to have redundant load balancers as well.

فيما يلي مخطط لإعداد التوافر العالي:

في هذا المثال، لديك عدة موازنين حمولة (واحد نشط وواحد أو أكثر غير نشطين) خلف عنوان IP ثابت يمكن إعادة تعيينه من خادم إلى آخر. عندما يصل المستخدم إلى موقع الويب الخاص بك، يمر الطلب عبر عنوان IP الخارجي إلى الموازن النشط للحمولة. إذا فشل ذلك الموازن، ستكتشف آلية الفشل التلقائي ذلك وستقوم تلقائيًا بإعادة تعيين عنوان IP إلى أحد الخوادم الغير نشطة. هناك عدة طرق مختلفة لتنفيذ إعداد HA النشط/غير النشط. لمعرفة المزيد، اقرأ كيفية استخدام عناوين IP محفوظة.

الاستنتاج

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

إذا كنت مهتمًا بتخزين إخراج HAProxy لعرضه لاحقًا، تحقق من كيفية تكوين تسجيل HAProxy مع Rsyslog على CentOS 8 [Quickstart]

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

Source:
https://www.digitalocean.com/community/tutorials/an-introduction-to-haproxy-and-load-balancing-concepts