آشنایی با HAproxy و مفاهیم Load...

آشنایی با رایانش ابری
آشنایی با HAproxy و مفاهیم Load Balancing

HAproxy مخفف High Availability Proxy است که یکی از محبوب ترین نرم ­افزار­های Load Balancing است.در این مقاله قصد داریم این مطلب رو بیشتر باز کنیم.

HAproxy

HAproxy مخفف High Availability Proxy است که یکی از محبوب ترین نرم ­افزار­های Load Balancing است که می تواند روی سیستم عامل‌­های Linux  ،Solaris  و FreeBSD اجرا شود. Load Balancer با پخش کردن load روی سرور­ها باعث افزایش کارایی و دردسترس بودن سرور­های شما می‌شود.HAproxy در بسیاری از محیط‌­هایی با درخواست بالا نظیر GitHub ، Imgur، Instagramو Twitter استفاده می‌­شود. در این مقاله با اصول و مفاهیم Load Balancer و پیاده‌سازی Load Balancer های Active/Passive آشنا می‌شویم.

 

انواع Load Balancing

 

  •   No Load Balancing

یک نرم افزار ساده تحت وب بدون Load Balancer به شکل زیر عمل می‌کند است.

لود بالانسینگ

در این مثال کاربران مستقیما به وب سرور متصل می­شوند و هیچ نوع Load Balancer وجود ندارد. اگر وب سرور ما متوقف شود، نرم­ افزار تحت وب ما دیگر کار نخواهد کرد و کاربر نمی ­تواند به آن متصل شود. اگر هم تعداد درخواست‌ها بسیار بالا برود وب سرور نمی‌­تواند به خوبی پاسخگو باشد و مشکل کندی سرویس به وجود می‌­آید و یا ممکن است سرور Crash کند و از دسترس خارج شود.

 

 

  • Load Balancing  لایه 4

ساده ترین راه Load Balancing  ترافیک سرورها، استفاده از Load Balancing لایه 4 است. در این روش با توجه با IP Range و Port ترافیک کاربر ابتدا به Load Balancer می­رسد و سپس به وب سرورها تحویل داده می‌شود. همانطور که در شکل مشاهده می­کنید هر دو وب سرور باید به یک Database متصل باشند یا Database ها باهم sync باشند تا از نگاه کاربر تفاوتی نداشته باشد که به کدام وب سرور متصل می‌شود و باید اطلاعات هر دو وب سرور یکسان باشد.

 

  • Load Balancing  لایه 7

راه پیچیده تری برای Load Balancing استفاده از Load Balancing  لایه 7 می‌باشد. با استفاده از این نوع Load Balancing  می توانید بر اساس محتوای درخواستی کاربران، آن­ها را به سرور­های مختلف ارجاع دهید.

در این مثال اگر کاربر شما دامنه XaaS.ir/blog را وارد کند توسط Load Balancer  به سرور blog-backend فرستاده می­شود و بقیه درخواست ها به سرور web-backend فرستاده می‌‌شوند که سرویس دیگری روی آن درحال اجرا است. در این سناریو ما هر دو وب سرور را به یک Database متصل کرده ­ایم.

 

 

الگوریتم ­های Load Balancing

الگوریتم‌های Load Balancing مشخص می­‌کنند که کدام سرور در هنگام Load Balancing انتخاب شود. HAproxy الگوریتم های زیادی را پشتیبانی می‌کند. ما در اینجا به چند مورد متداول از الگوریتم ها می‌پردازیم:

 

Roundrobin

در این روش به نوبت درخواست‌ها به سرورها هدایت می‌شوند. مثلا درخواست 1 به سرور 1 و درخواست 2 به سرور 2 و به همیت ترتیب به صورت نوبتی درخواست‌ها بین سرور­ها تقسیم می­‌شوند.

 

Least connection

وقتی این حالت روی Load Balancer تنظیم شده باشد، درخواست به سروری ارجاع داده می­شود که کمترین connection را از سمت کاربر دارد. این روش برای سرویس‌هایی که نیاز به ارتباط طولانی دارند توصیه می‌شود.

 

source

 این الگوریتم بر اساس hash IP مبدا انتخاب می‌کند که کاربر به کدام سرور متصل شود. این روش تضمین می‌کند که کاربر با IP یکسان همواره به یک سرور متصل شود.

 

ارتباط چسبناک (Sticky Sessions)

ممکن است این نیاز را داشته باشید کاربری که به یک سرور متصل شد همواره به آن وصل باشد. با استفاده از قابلیت Sticky Session این امکان فراهم می‌شود. شاید فکر کنید که قابلیت Sticky Sessions چه تفاوتی با الگوریتم Source دارد؟ در اینجا باید به این نکته توجه داشته­ باشیم که الگوریتم Source بر اساس IP کار می­کند و IP کاربران تغییر می­کند در صورتی که با Sticky Sessions همواره یک کاربر درخواستش به یک سرور مشخص می­رسد.

 

تست سلامت (Health Check)

HAproxy برای اینکه بداند کدام یک از سرورها سالم هستند و آیا می‌تواند درخواست‌ها را به آن‌ها بفرستد یک Health Check با تمام سرورها انجام می‌دهد که اگر آن­ها در دسترس نباشند دیگر به آن­ سرورها درخواست نمی‌فرستد تا زمانی که دوباره در دسترس قرار بگیرند و این کار را به صورت خودکار انجام می‌دهد. مسلما اگر تمام سرور ها از دسترس خارج شوند، دیگر سرویس کار نخواهد کرد تا حداقل یکی از سرورها به مدار بازگشت داده شود.

 

High Availability

در تمامی سناریو‌هایی که بررسی کردیم اگر سرورLoad Balancer شما از دسترس خارج شود نه تنها عملLoad Balancing  صورت نمی‌گیرد بلکه دسترسی به وب سرور های شما نیز قطع شده و سرویس به طور کامل از دسترس خارج می­شود.
مکانیزم High Availability) HA) یک زیرساخت بسیار دردسترس و بدون قطع شدن سرور­ها را برای ما فراهم می­کند. این مکانیزم با استفاده از ایجاد چندین سرور این امکان را فراهم می­کند که اگر یکی از سرور­ها به هر علتی از دسترس خارج شد، سرور دیگر جایگزین شده و تا زمانی که سرور اصلی بازگردد کار را انجام می­‌دهد و شما فرصت دارید که سرور اصلی را بررسی کنید و سرور دیگر در حال سرویس دهی است.
یک Load Balancer این مکانیزم را برای سرور­های Backend انجام می‌­دهد ولی برای خود Load Balancer هم باید این کار انجام شود.

 

در سناریو بالا با ایجاد کردن چند Load Balancer (یکی Active و دیگری Passive) پشت سر یک Virtual IP) IP مجازی) - که امکان این را دارد بین دو سرور تغییر کند - ، مکانیزم HA  پیاده سازی شده است.
کاربران با وارد کردن IP به سمت Active Load Balancer می­روند و سپس به یکی از وب سرور­­ها متصل می­شوند. حال اگر یکی از Load Balancerها fail شود، به صورت خودکار با استفاده از مکانیزم HA که پیاده سازی شده است Virtual IP به سمت سرور دیگر می­رود و سرویس‌دهی ادامه پیدا می­کند.

...
...