HAProxy چیست؟ آشنایی با انواع متعادل‌کننده‌های بار سرور

HAProxy چیست؟
Avatar
نویسنده: سانیا عبدی‌پور
شنبه 23 اردیبهشت 1402
مطالعه: ۱۰ دقیقه ۰ نظر ۸۹۵ بازدید

HAProxy چیست؟ HAProxy (مخفف High Availability Proxy) نرم‌افزاری منبع‌باز و بسیار محبوب درزمینه Load Balancing محسوب می‌شود. این نرم‌افزار را می‌توان روی سیستم‌عامل‌های لینوکس و macOS و FreeBSD اجرا کرد. رایج‌ترین کاربرد HAProxy بهبود عملکرد در محیط سرور با استفاده از پخش بار روی سرورهای مختلف است. این نرم‌افزار محبوب در سرویس‌های بسیار پرمخاطبی مانند Instagram ،‌Twitter ،‌GitHub و Imgur استفاده شده است. در این مطلب از بلاگ پارس پک، قصد داریم درباره نرم‌افزار HAProxy به‌طورمفصل صحبت کنیم‌؛ پس تا پایان با ما همراه باشید.

اصطلاحات HAProxy

قبل از معرفی HAProxy، باید با اصطلاحات مهم آن آشنا شوید. این موضوع سبب خواهد شد تا بتوانید مفاهیم Load Balancing و Proxying را بهتر درک کنید.

۱. Access Control List (ACL)

ACL در‌زمینه تعادل بار وظیفه دارد تا ابتدا برخی از شرایط را آزمایش کند و سپس تصمیم بگیرد که بر‌اساس نتیجه آن آزمایش، چه کاری باید انجام شود. برای مثال، ممکن است نتیجه این فرایند انتخاب سرور یا مسدودسازی Request باشد. 

به‌عنوان نمونه، ACL‌ها امکان انتقال ترافیک انعطاف‌پذیر شبکه را بر‌اساس عوامل مختلفی مانند تطبیق الگو و تعداد اتصالات به قسمت بک‌اِند فراهم می‌کند. درادامه، نمونه‌ای از ACL نشان داده شده است:

acl url_blog path_beg /blog

این ACL در‌صورتی‌که مسیر Request کاربر با /blog شروع شود، با آن هماهنگ است. به‌عنوان مثال، این ACL را می‌توان با مسیر http://yourdomain.com/blog/blog-entry-1 هماهنگ دانست.

۲. Backend

Backend در‌واقع مجموعه‌ای از سرورهاست که Request‌های ارسال‌شده را دریافت می‌کند. Backend‌ها در بخشی با همین نام (Backend) در پیکربندی HAProxy تعریف می‌شوند. هر Backend در ابتدایی‌ترین شکل خود دو معیار اساسی دارد:

  • از کدام الگوریتم تعادل بار استفاده شود
  • فهرست مربوط به سرورها و پورت‌ها

این امکان وجود دارد که در یک Backend از یک یا چند سرور مختلف استفاده کنید. به‌طور‌کلی، استفاده از سرورهای بیشتر باعث خواهد شد که بار روی سرورهای بیشتری توزیع شود و بدین‌ترتیب، حتی اگر برخی از سرورها به هر دلیل در‌دسترس نباشند، همچنان سیستم به کار خود ادامه دهد. این امر سبب خواهد شد تا اعتماد بیشتری به فعال‌بودن همیشگی سیستم خود داشته باشید.

در این‌جا، نمونه‌ای از پیکربندی دو Backend، یعنی web-Backend و blog-backend، با دو سرور در هر‌یک از آن‌ها نشان داده شده است. این سرورها به‌گونه‌ای تنظیم شده‌اند که به پورت ۸۰ گوش می‌کنند:

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 مشخص می‌کند که از پروکسی لایه ۷ استفاده خواهد شد. 
  • گزینه‌های check که در انتهای دستورالعمل سرور قرار گرفته شده‌اند، مشخص خواهند کرد که در سرورهای بک‌اِند باید بررسی Health انجام شود.

۳. Frontend

نحوه ارسال Request‌ها به Backend در Frontend مشخص می‌شود. Frontendها نیز در بخشی به همین نام (Frontend) در پیکربندی HAProxy تعریف می‌شوند. دو جزء اساسی زیر در تعریف Frontendها وجود دارد:

  • مجموعه‌ای از آدرس IP و پورت ACL‌ها؛ مثلاً:

10.1.1.7:80, *:443

  • قوانین use_backend که بر‌اساس اینکه کدام‌یک از شروط ACL سازگار است، تعیین می‌کنند که از کدام‌یک از Backend‌ها استفاده شود یا تعیین‌کننده قانون default_backend است که هر مورد دیگری را مدیریت خواهد کرد.

درادامه، توضیح داده‌ایم که چطور می‌توان Frontend را برای انواع مختلفی از ترافیک شبکه پیکربندی کرد.

انواع Load Balancing

حالا که توانسته‌ایم درک مناسبی از اجزای اساسی تعادل بار پیدا کنیم، می‌توانیم به‌سراغ قسمت اصلی موضوع برویم. در گام اول، باید انواع Load Balancing را بشناسیم.

۱. No Load Balancing

اولین حالت قاعدتاً زمانی است که هیچ تعادل باری روی سیستم انجام نمی‌شود. محیط برنامه وب ساده‌ای که از متعادل‌کننده بار استفاده نمی‌کند، احتمالاً چیزی شبیه به این تصویر است:

نرم افزار لود بالانسر

نبود تعادل بار روی سرور

همان‌طور‌که در تصویر نیز مشخص است، در این سیستم کاربر مستقیماً به وب سرور شما در yourdomain.com متصل شده است و تعادل باری در این فرایند رخ نمی‌دهد. در چنین وضعیتی، اگر وب سرور شما به هر دلیل از کار بیفتد، ارتباط کاربر و وب سرور نیز از دست خواهد رفت. علاوه‌براین، اگر تعداد زیادی از کاربران هم‌زمان به وب‌سایت شما مراجعه کنند، احتمالاً یا با کُندشدن وب‌سایت مواجه می‌شوند یا اصولاً نمی‌توانند به وب‌سایت دسترسی پیدا کنند.

۲. تعادل بار لایه ۴

ساده‌ترین راه برای بارگذاری ترافیک شبکه تعادلی روی چندین سرور، استفاده از تعادل بار لایه ۴ است که به آن Transport Layer نیز گفته می‌شود. در این روش، ترافیک کاربر بر‌اساس محدوده IP و پورت هدایت می‌شود. به‌عنوان مثال، اگر Request برای http://yourdomain.com/anything ارسال شود، ترافیک به‌سمت Backend فرستاده خواهد شد که تمامی Requestهای yourdomain.com را روی پورت ۸۰ مدیریت می‌کند. در تصویر زیر، مثال ساده‌ای از تعادل بار لایه ۴ نشان داده شده است:

 آموزش haproxy

 تعادل بار لایه ۴ برای بارگذاری ترافیک شبکه تعادلی روی چندین سرور

کاربر به متعادل‌کننده بار دسترسی دارد که Request را به گروه web-backend از سرور Backend ارسال می‌کند؛ بنابراین، در‌صورتی‌که هر‌یک از سرورهای Backend انتخاب شده باشند، مستقیماً به Request ارسال‌شده کاربر پاسخ خواهند داد.

همچنین، فراموش نکنید که تمامی سرورهای web-backend باید محتوای یکسانی ارائه دهند؛ وگرنه این امکان وجود دارد که کاربر محتوای متناقض دریافت کند. ناگفته نماند که هر دو وب سرور به یک سرور پایگاه داده متصل خواهند شد.

۳. تعادل بار لایه ۷

یکی دیگر از راهکارهای نسبتاً پیچیده‌تر برای متعادل‌کردن بار ترافیک شبکه، استفاده از تعادل بار لایه ۷ (Application Layer) است. استفاده از لایه ۷ به متعادل‌کننده بار امکان خواهد داد تا Request‌ها را بر‌اساس محتوایی که کاربر درخواست کرده است، به سرورهای Backend متفاوتی ارسال کند. این حالت تعادل بار باعث می‌شود تا بتوانید چندین سرور وب‌اپلیکیشن را با یک دامنه و پورت یکسان اجرا کنید. در تصویر زیر، نموداری ساده از نحوه کار متعادل‌کننده بار لایه ۷ ارائه شده است:

تعادل بار لایه ۷ و کانفیگ haproxy

ارسال Request‌ها به سرورهای Backend بر‌اساس محتوایی که کاربر درخواست کرده است

در این مثال، در‌صورتی‌که کاربری از قسمت yourdomain.com/blog وب‌سایت شما بازدید کند، Request مدنظر به Blog-backend فرستاده می‌شود. Blog-backend مجموعه‌ای از سرورهاست که یک برنامه Blog را اجرا می‌کنند. این در حالی است که Request‌های دیگر به‌سمت Web-backend ارسال می‌شوند که آن هم ممکن است مسئول اجرای برنامه دیگری باشد. 

همچنین، همان‌طور‌که در تصویر مشخص است، هر دو Backend در این مثال از یک سرور پایگاه داده استفاده می‌کنند. برای مثال، در‌ادامه قطعه‌کدی از پیکربندی Frontend ارائه شده است:

frontend http
  bind *:80
  mode http

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

در این کدها، به نکات زیر توجه کنید:

  • این قطعه‌کد وظیفه پیکربندی Frontend به نام http را بر‌عهده دارد که تمامی ترافیک ورودی در پورت ۸۰ را مدیریت می‌کند. 
  • اگر Request ارسال‌شده از سمت کاربر با /blog شروع شود، ACL عنوان‌شده در این کدها (url_blog path_beg /blog) با آن مطابقت دارد.
  • خط default_backend web-backend نیز مشخص می‌کند که تمامی ترافیک‌های دیگر به web-backend ارسال شود.

الگوریتم‌های متعادل‌کننده بار

الگوریتم‌هایی که برای ایجاد تعادل در بار استفاده می‌شوند، تعیین می‌کنند که هنگام نیاز به متعادل‌کردن بار کدام سرور در Backend انتخاب شود. HAProxy چندین گزینه برای الگوریتم‌های متعادل‌کننده بار ارائه می‌دهد که در‌ادامه به برخی از رایج‌ترین آن‌ها اشاره کرده‌ایم:

۱. الگوریتم Roundrobin

الگوریتم Roundrobin که الگوریتم پیش‌فرض در HAProxy است، سرورها را به نوبت و یکی پس از دیگری انتخاب می‌کند. 

۲. الگوریتم leastconn

این الگوریتم سروری با کمترین تعداد Connection را انتخاب می‌کند. استفاده از الگوریتم مذکور برای Session‌های طولانی کاربردی‌تر است. همچنین، سرورهای قرار‌گرفته در همان Backend با استفاده از الگوریتم Round-Robin انتخاب می‌شوند.

۳. الگوریتم Source

این الگوریتم بر‌اساس هَش آدرس IP که کاربران به آن Request ارسال می‌کنند، انتخاب می‌کند که از کدام سرور استفاده شود. این سرور تضمین می‌کند که کاربران به همان سروری که باید، متصل می‌شوند.

آزمایش سلامت سرورها در HAProxy

HAProxy برای اینکه مطمئن شود تمامی سرورهای به‌کارگرفته‌شده فعال و سالم هستند، آزمایش سلامتی را برای همه آن‌ها اجرا می‌کند و اگر سروری غیرفعال شده باشد، تا فعال‌شدن مجدد Request دیگری را به آن ارسال نخواهد کرد. همچنین، در‌صورتی‌که تمامی سرورها غیرفعال شوند، تا زمانی‌که حداقل یکی از آن‌ها مجدداً فعال نشود، سرویس از دسترس خارج خواهد شد.

انجام آزمایش سلامت سرور باعث می‌شود تا در‌صورت غیرفعال‌شدن یکی از سرورها، دیگر مجبور نباشید به‌صورت دستی آن را حذف کنید. برای انجام این آزمایش، HAProxy کانکشن TCP را به‌سمت سرور ارسال می‌کند. همچنین، باید بدانید که برای انواع خاصی از Backend‌ها مانند سرورهای پایگاه داده، بررسی سلامت پیش‌فرض سرور لزوماً به‌معنای تعیین سلامت کامل سرور نیست.

مکانیزم HA (High Availability)

هر دو روش تعادل بار لایه ۴ و ۷ توضیح‌داده‌شده از یک Load Balancer یا متعادل‌کننده‌ برای هدایت بار ترافیک به‌سمت سرورهای Backend استفاده می‌کردند. با‌این‌حال، سؤال اساسی این است که اگر خودِ Load Balancer از دسترس خارج شود، چه اتفاقی خواهد افتاد؟ پاسخ ساده است: در این صورت نه‌تنها هیچ‌گونه تعادلی در بارها ایجاد نخواهد شد؛ بلکه خودِ سرورها و درنتیجه کل سیستم از دسترس خارج خواهد شد.

برای جلوگیری از این اتفاق، می‌توان از مکانیزم HA استفاده کرد. این مکانیزم را می‌توان زیرساختی بدون نقطه شکست معرفی کرد. د‌رواقع، کاری که مکانیزم مذکور انجام می‌دهد، این است که با اضافه‌کردن یک Redundancy به هر لایه از معماری شما، از تبدیل‌ Fail سرور به Downtime کلی جلوگیری می‌کند. اگرچه ممکن است این توضیحات قدری گیج‌کننده به‌نظر برسند، با کمک تصویر زیر می‌توانید به درک مناسبی از اتفاقات رخ‌داده در پَس مکانیزم HA برسید:

مکانیزم High Availability چیست؟

 بررسی مکانیزم High Availability

در این مثال، چندین متعادل‌کننده بار دارید که یکی از آن‌ها به‌صورت Active است و یک یا چند تای آن‌ها به‌صورت Passive در سیستم قرار گرفته‌اند. تمامی این Load Balancer‌ها در پشت یک آدرس IP قرار دارند که می‌تواند از سروری به سروری دیگر نگاشت شود.

هنگامی‌که کاربر به وب‌سایت شما دسترسی پیدا می‌کند، Request از‌طریق آدرس IP خارجی به‌سمت Load Balancer فعال می‌رود. حالا در‌صورتی‌که حتی آن Load Balancer غیرفعال شود، مکانیسم Failover آن را شناسایی می‌کند و به‌طورخودکار آدرس IP را به یکی از سرورهای غیرفعال اختصاص می‌دهد و بدین‌ترتیب، سرویس‌دهی ادامه پیدا خواهد کرد.

جمع‌بندی

HAProxy چیست؟ درواقع، HAProxy یکی از نرم‌افزارهای بسیار محبوب در‌زمینه Load Balancing یا متعادل‌سازی بار در محیط سرور است. با استفاده از این نرم‌افزار متن‌باز و رایگان، می‌توانید بار ترافیک ایجاد‌شده روی وب‌سایت خود را به سرورهای مختلفی ارسال و از ایجاد بار سنگین روی یک سرور و در‌نتیجه از دسترس خارج‌شدن آن جلوگیری کنید. در این مقاله از بلاگ پارس پک، HAProxy را به‌طورکامل معرفی کردیم. با مطالعه این مطلب علاوه‌بر آشنایی با نرم‌افزار یادشده، اطلاعات کاملی درباره الگوریتم‌های متعادل‌کننده بار و انواع روش‌های Load Balancing و اصطلاحات مهم مرتبط با آن به‌دست خواهید آورد.

برای آشنایی با انواع سرور و نکات مهم قبل از خرید سرور مقاله زیر را بخوانید.

سرور چیست؟

سؤالات متداول

۱. HAProxy چیست؟

HAProxy نرم‌افزاری متن‌باز و رایگان در‌زمینه متعادل‌کردن بارهای ایجاد‌شده روی سرورهاست. 

۲. آیا استفاده از HAProxy رایگان است؟

بله، این نرم‌افزار به‌صورت متن‌باز و رایگان منتشر شده است. 

۳. در HAProxy از چه الگوریتم‌هایی برای متعادل‌سازی بار استفاده می‌شود؟

در نرم‌افزار HAProxy، از الگوریتم‌های RoundRobin و LeastConn و Source در متعادل‌سازی بارها استفاده می‌شود.

۴. نرم‌افزار HAProxy را روی چه سیستم‌عاملی می‌توان نصب کرد؟

از نرم‌افزار HAProxy می‌توان روی سیستم‌عامل‌های Linux و macOS و FreeBSD استفاده کرد. 

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


ارسال دیدگاه در وبلاگ پارس‌پک را مطالعه کرده و آن‌ها را می‌پذیرم.

مقالات مرتبط این مطلب را از دست ندهید

با خدمات ابری پارس پک آشنا شوید

اولین ارائه‌دهنده خدمات رایانش ابری در ایران هستیم