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 را بررسی خواهیم نمود.
با ما در الفبایت همراه باشید!!