البرنامج التعليمي HAProxy للمبتدئين

Albrnamj Alt Lymy Haproxy Llmbtdyyn



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

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

لماذا استخدام هابروكسي

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







  1. توزيع الحمل - باستخدام HAProxy، يمكنك توزيع حركة المرور بشكل مريح عبر خوادم مختلفة لتجنب التحميل الزائد على خادم واحد. بهذه الطريقة، لن يواجه تطبيقك أي مشكلات في وقت التوقف عن العمل، وستكون قد حصلت على استجابة وموثوقية وتوافر أسرع.
  2. تسجيل الدخول والرقابة - سوف تحصل على سجلات مراقبة مفصلة لخوادمك للمساعدة في استكشاف المشكلات وإصلاحها. بالإضافة إلى ذلك، يحتوي HAProxy على صفحة إحصائيات حيث يمكنك الحصول على تحليلات الأداء في الوقت الفعلي لموازن التحميل الخاص بك.
  3. فحوصات طبية - حتى خوادمك تتطلب فحصًا صحيًا لتحديد حالتها. يقوم HAProxy بشكل متكرر بإجراء فحوصات السلامة لمعرفة حالة الخادم الخاص بك لتعزيز موثوقيته. إذا تم اكتشاف خادم غير سليم، فإنه يعيد توجيه حركة المرور إلى خادم آخر.
  4. الوكيل العكسي – إحدى طرق تعزيز الأمان هي إخفاء البنية الداخلية. لحسن الحظ، يتيح لك HAProxy تلقي حركة المرور من العملاء وتوجيههم إلى الخوادم المناسبة. بهذه الطريقة، يتم إخفاء بنيتك الداخلية عن أعين المتسللين.
  5. قوائم التحكم بالوصول (قوائم التحكم بالوصول) – باستخدام HAProxy، يمكنك تحديد كيفية حدوث توجيه حركة المرور باستخدام معايير مختلفة مثل المسارات والرؤوس وعناوين IP. وبالتالي، يصبح تحديد منطق توجيه مخصص لحركة المرور الخاصة بك أسهل.
  6. إنهاء طبقة المقابس الآمنة – افتراضيًا، يتم إلغاء تحميل SSL/TLS بواسطة خوادم الواجهة الخلفية مما يؤدي إلى انخفاض الأداء. ومع ذلك، مع HAProxy، يحدث إنهاء SSL/TLS عند موازن التحميل، مما يؤدي إلى إلغاء تحميل المهمة في خوادم الواجهة الخلفية.

تثبيت هابروكسي

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



إذا كنت تقوم بتشغيل أنظمة Ubuntu أو Debian، فيمكن تثبيت HAProxy من مدير حزم APT. قم بتشغيل الأمر التالي:



$ سودو التحديث المناسب
$ sudo مناسب لتثبيت haproxy

وبالمثل، إذا كنت تستخدم الأنظمة المستندة إلى RHEL أو CentOS، فإن HAProxy متاح من مدير الحزم 'yum'. قم بتشغيل الأوامر التالية:





$ سودو يم التحديث
$ سودو يم تثبيت haproxy

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



يمكننا بعد ذلك التحقق من إصداره للتأكد من أننا تمكنا من تثبيت HAProxy بنجاح.

$ haproxy --version

كيفية تكوين HAProxy

بعد تثبيت HAProxy، يمكنك الآن فتح ملف التكوين الخاص به ( / etc/haproxy/haproxy.cfg) وحدد الإعدادات التي ترغب في استخدامها لموازن التحميل الخاص بك.

افتح ملف التكوين باستخدام محرر مثل nano أو vim.

$ سودو نانو /etc/haproxy/haproxy.cfg

تحصل على ملف التكوين مثل الموجود في ما يلي:

من ملف الكونفج ستلاحظ أنه يأتي مع قسمين رئيسيين:

  1. عالمي - إنه القسم الأول في الملف ولا يجب تغيير قيمه. ويحتوي على إعدادات العملية التي تحدد كيفية عمل HAProxy. على سبيل المثال، فهو يحدد تفاصيل التسجيل والمجموعات أو المستخدمين الذين يمكنهم تنفيذ وظائف HAProxy. لاحظ أنه في ملف التكوين هذا، يمكنك الحصول على قسم عام واحد فقط، ويجب أن تظل قيمه دون تغيير.
  1. الافتراضات – يحتوي هذا القسم على القيم الافتراضية للعقد. على سبيل المثال، يمكنك إضافة المهلات أو وضع التشغيل لـ HAProxy الخاص بك في هذا القسم. بالإضافة إلى ذلك، من الممكن أن يكون لديك العديد من أقسام الإعدادات الافتراضية في ملف تكوين HAProxy الخاص بك.

فيما يلي مثال لقسم 'الافتراضيات':

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

هناك ثلاثة أقسام أخرى يجب عليك تحديدها حتى يعمل موازن التحميل الخاص بك كما هو متوقع.

  1. نهاية المقدمة - يحتوي هذا القسم على عناوين IP التي ترغب في أن يستخدمها عملاؤك لتأسيس الاتصال.
  2. الواجهة الخلفية – ويعرض تجمعات الخادم التي تتعامل مع الطلبات كما هو محدد في قسم الواجهة الأمامية.
  3. يستمع - يتم استخدامه بشكل متتابع عندما تريد توجيه مجموعة خوادم معينة. يجمع هذا القسم بين مهام الواجهة الأمامية والخلفية.

دعونا نحصل على مثال

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

الخطوة 1: تكوين قسم الإعدادات الافتراضية

في قسم 'الافتراضيات'، قمنا بتعيين القيم التي سيتم مشاركتها عبر العقد. بالنسبة لحالتنا، قمنا بتعيين الوضع على HTTP وتعيين المهلات للعميل والخادم. يمكنك ضبط الوقت ليناسب احتياجاتك.

تذكر أن كل هذه التعديلات موجودة في تكوين HAProxy الموجود في '/etc/haproxy/haproxy.cfg'. بمجرد تكوين قسم الإعدادات الافتراضية، فلنحدد الواجهة الأمامية.

الخطوة 2: تكوين قسم الواجهة الأمامية

في قسم الواجهة الأمامية، نحدد كيف نريد أن يصل العملاء إلى التطبيق أو موقع الويب عبر الإنترنت. نعطي عناوين IP للتطبيق. لكن في هذه الحالة، نحن نعمل مع المضيف المحلي. ولذلك، فإن عنوان IP الخاص بنا هو العنوان الاحتياطي 127.0.0.1 ونريد قبول الاتصالات عبر المنفذ 80.

يجب عليك إضافة الكلمة الأساسية 'bind' التي تعمل كمستمع لعنوان IP على المنفذ المحدد. عنوان IP والمنفذ الذي تحدده هما ما يستخدمه موازن التحميل لقبول الطلبات الواردة.

بعد إضافة الأسطر السابقة في ملف التكوين الخاص بك، يجب علينا إعادة تشغيل “haproxy.service” بالأمر التالي:

$ sudo systemctl إعادة تشغيل haproxy

في هذه المرحلة، يمكننا محاولة إرسال الطلبات إلى موقعنا باستخدام الأمر 'curl'. قم بتشغيل الأمر وأضف عنوان IP الهدف.

$ حليقة <عنوان IP>

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

الخطوة 3: تكوين الواجهة الخلفية

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

الخطأ 503 الذي حصلنا عليه سابقًا كان بسبب عدم وجود أي واجهة خلفية للتعامل مع الطلبات. لنبدأ بتحديد 'default_backend' للتعامل مع الطلبات. يمكنك تحديده في قسم الواجهة الأمامية. أطلقنا عليه اسم 'linux_backend' لهذه الحالة.

بعد ذلك، قم بإنشاء قسم الواجهة الخلفية الذي يحمل نفس الاسم المحدد في قسم الواجهة الأمامية. يجب عليك بعد ذلك استخدام الكلمة الأساسية 'الخادم' متبوعة باسم الخادم الخاص بك وعنوان IP الخاص به. الصورة التالية توضح أننا قمنا بتعريف خادم “linuxhint1” باستخدام IP 127.0.0.1 والمنفذ 8001:

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

لاختبار موازن تحميل HAProxy الذي تم إنشاؤه، قمنا بإنشاء خادم ويب باستخدام Python3 لربط منافذ الواجهة الخلفية باستخدام عنوان IP الذي حددناه. نقوم بتشغيل الأمر على النحو التالي:

$ python3 -m http.server 8001 --bind 127.0.0.1

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

على محطة أخرى، دعونا نستخدم الأمر 'curl' لإرسال طلب إلى الخادم.

$ حليقة <عنوان IP>

على عكس الطريقة التي حصلنا بها على الخطأ 503 سابقًا والذي يوضح أنه لا يوجد خادم متاح للتعامل مع الطلب، نحصل على نتيجة هذه المرة تؤكد أن موازن التحميل HAProxy الخاص بنا يعمل.

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

هذه هي الطريقة التي يمكنك بها تعيين HAProxy بسيط لموقعك على الويب أو تطبيقك.

العمل مع القواعد

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

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

علاوة على ذلك، لدينا 'default_backend' و'use_backend' آخر وهو عبارة عن مجموعة مختلفة من الخوادم التي سنستخدمها اعتمادًا على المنفذ الذي تأتي منه الطلبات. في التكوين التالي، تتم معالجة جميع الطلبات عبر المنفذ 81 بواسطة الخوادم الموجودة في 'Linux2_backend'. تتم معالجة أي طلبات أخرى من خلال 'default_backend'.

نقوم بعد ذلك بإنشاء أقسام الواجهة الخلفية كما هو محدد في الواجهة الأمامية. لاحظ أنه لكل واجهة خلفية، لدينا خادم مختلف نحدده لاستخدامه في التعامل مع الطلبات.

أعد تشغيل خدمة HAProxy بسرعة.

لنقم بإنشاء خادم الويب باستخدام Python3 وربط الطلبات على المنفذ 8002 وهو خادم الواجهة الخلفية البديل.

عند إرسال الطلبات إليه، نحدد المنفذ على أنه 81 لتشغيل موازن التحميل لإرسال الطلبات إلى الخادم البديل الذي ليس هو الخادم الافتراضي.

عند إعادة فحص خادم الويب الخاص بنا، يمكننا أن نرى أنه قادر على تلقي الطلبات والتعامل معها ويعطي استجابة 200 (نجاح).

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

خاتمة

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