theme wordpress
آموزشیفناوری

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

HAproxy مخفف High Availability Proxy است، که یکی از محبوب‌ترین نرم‌­افزار­های load balancing است که قابلیت اجرا بر روی سیستم عامل‌های Linux   Solaris و FreeBSD را دارا است.
Load Balancer با پخش کردن load روی سرور­ها باعث افزایش کارایی و در دسترس بودن سرور­های شما می‌شود.

HAproxy  در بسیاری از محیط­های با load بالا نظیر GitHub، Imgur، Instagramو Twitter استفاده می­شود.
در این مقاله با اصول و مفاهیم load balancer  و پیاده سازی load balancer  های Active/Passive  آشنا می شویم.

انواع Load Balancing

بدون Load Balancing

یک نرم افزار ساده تحت وب بدون load balancer  به شکل زیر است.

در این مثال کاربران مستقیما به وب سرور متصل شده و هیچ load balancerایی در کار نیست. اگر وب سرور ما down شود  نرم‌­افزار تحت وب ما دیگر کار نمی­کند و کسی قادر به اتصال به آن نیست.
اگر هم تعداد درخواست‌ها بسیار زیاد بشود وب سرور نمی‌­تواند به خوبی کار کند و مشکل کندی نرم‌­افزار به وجود می‌­آید و یا حتی ممکن است سرور از دسترس خارج شود.

 Load Balancingلایه ۴

ساده‌ترین راه Load Balancing ترافیک سرورها، استفاده از Load Balancing لایه ۴ است. در این روش با توجه با IP range و port ترافیک کاربر ابتدا به load balancer رسیده و پس از آن به وب سرورها انتقال داده می‌شود.

همانطور که در شکل بالا مشاهده می­‌کنید هر دو وب سرور باید به یک database متصل باشند یا آنکه databaseها باهم sync  شده باشند تا تفاوتی نداشته باشد که کاربر به کدام وب سرور متصل می‌گردد، و نکته حائز اهمیت آن است که می‌بایست اطلاعات هر دو وب سرور یکسان باشد.

 Load Balancingلایه ۷

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

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

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

الگوریتم‌های Load Balancing مشخص می­‌کنند که کدام سرور در هنگام Load Balancing انتخاب شود.

HAproxy الگوریتم‌های زیادی را پشتیبانی می‌کند. ما در اینجا به چند مورد متداول از این الگوریتم‌ها می‌پردازیم:

Roundrobin

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

leastconn

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

source

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

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

ممکن است شما این نیاز را داشته باشید که کاربری که به یک سرور متصل شد همواره به آن متصل شود. قابلیت sticky sessions این امکان را برای شما فراهم می‌کند.

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

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

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

High Availability

در تمامی سناریوهایی که بررسی کردیم اگر سرورload balancer  شما از دسترس خارج شود نه تنها عملload balancing  صورت نمی‌گیرد، بلکه دسترسی به وب سرورهای شما نیز قطع می­‌شود، و سرویس به طور کامل از دسترس خارج می‌شود.
مکانیزم 
High Availability(HA) یک زیرساخت بسیار دردسترس و بدون قطع شدن سرور­ها برای ما فراهم می­‌کند.
این مکانیزم با استفاده از ایجاد چندین سرور این امکان را فراهم می­‌کند که اگر یکی از سرور­ها به هر علتی از دسترس خارج شد، سرور دیگر جایگزین شده و تا زمانی که سرور اصلی بازگردد کار را انجام می‌­دهد و شما فرصت دارید که سرور اصلی را با خیال راحت بررسی کنید چون سرور دیگر در حال سرویس دهی است.
یک 
load balancer  این مکانیزم را برای سرور­های پشتش انجام می‌­دهد ولی برای خودload balancer  هم باید این کار صورت بگیرد.

در سناریو بالا با ایجاد کردن چند load balancer (یکی Active و دیگری Passive) پشت سر یک virtual ip (آی­پی مجازی) که امکان این را دارد بین دو سرور تغییر کند، مکانیزم HA  پیاده سازی شده است.
کابران با وارد کردن ip به سمت active load balancer می­‌روند و سپس به یکی از وب سرور­­ها متصل می­‌شوند. حال اگر یکی از load balancerها fail شود، به صورت خودکار با استفاده از مکانیزم HA که پیاده سازی شده است virtual ip به سمت سرور دیگر می‌­رود و سرویس ­دهی ادامه پیدا می‌­کند.

در مقالات بعد نحوه پیاده سازی HAproxy و High Availability را بررسی خواهیم نمود.

با ما در الفبایت همراه باشید!!

نمایش بیشتر

نوشته های مشابه

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

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

بستن