HAProxy چیست؟ آشنایی با انواع متعادلکنندههای بار سرور
در این مقاله میخوانید
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 را روی پورت ۸۰ مدیریت میکند. در تصویر زیر، مثال سادهای از تعادل بار لایه ۴ نشان داده شده است:
تعادل بار لایه ۴ برای بارگذاری ترافیک شبکه تعادلی روی چندین سرور
کاربر به متعادلکننده بار دسترسی دارد که Request را به گروه web-backend از سرور Backend ارسال میکند؛ بنابراین، درصورتیکه هریک از سرورهای Backend انتخاب شده باشند، مستقیماً به Request ارسالشده کاربر پاسخ خواهند داد.
همچنین، فراموش نکنید که تمامی سرورهای web-backend باید محتوای یکسانی ارائه دهند؛ وگرنه این امکان وجود دارد که کاربر محتوای متناقض دریافت کند. ناگفته نماند که هر دو وب سرور به یک سرور پایگاه داده متصل خواهند شد.
۳. تعادل بار لایه ۷
یکی دیگر از راهکارهای نسبتاً پیچیدهتر برای متعادلکردن بار ترافیک شبکه، استفاده از تعادل بار لایه ۷ (Application Layer) است. استفاده از لایه ۷ به متعادلکننده بار امکان خواهد داد تا Requestها را براساس محتوایی که کاربر درخواست کرده است، به سرورهای Backend متفاوتی ارسال کند. این حالت تعادل بار باعث میشود تا بتوانید چندین سرور وباپلیکیشن را با یک دامنه و پورت یکسان اجرا کنید. در تصویر زیر، نموداری ساده از نحوه کار متعادلکننده بار لایه ۷ ارائه شده است:
ارسال 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
در این مثال، چندین متعادلکننده بار دارید که یکی از آنها بهصورت 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 استفاده کرد.