سلام, امروز می خوام یادتون بدم چجوری از HAProxy به عنوان یه Load Balancer استفاده کنید.البته مثل همیشه سعی می کنم خیلی ساده و مبانی اصلی رو توضیح بدم که ساده باشه و گیج کننده نشه.
اما HAProxy چی هست کلا ؟ جواب خیلی ساده هست, HAProxy درخواست های ورودی رو می گیره و می فرسته اونجا که باید. در واقع یه واسط یا همون Proxy Server هست.
خوب, HAProxy دو قسمت اصلی داره Backend و Frontend.
فرانت اند: این بخش درخواست های ورودی رو دریافت می کنه.
بک اند: این قسمت درخواست هایی که از فرانت اند دریافت می کنه رو می فرسته به سرویس مربوطه.
برای درک بهتر مثال زیر رو نگاه کنید:
frontend local_http # نام دلخواه برای این فرانت اند mode http # نوع درخواست bind *:80 # به کدوم پورت گوش داده بشه ؟ acl api_domain hdr(host) -i api.site.com # کدوم دامین یا ساب دامین ؟ use_backend api_stack if api_domain # به کدوم بک اند منتقل بشه درخواست ؟
خوب! چه اتفاقی داره میفته ؟ خیلی ساده... ما یه قسمت فرانت اند تعریف کردیم به اسم local_http که این اسم کاملا دلخواهه... نوع درخواست رو HTTP تعریف کردیم و به HAProxy گفتیم تمام درخواست هایی که به پورت ۸۰ میاد رو باید هندل کنی. بعد اومدیم یه ACL تعریف کردیم به اسم api_domain ( نام دلخواه ) که در واقع چیزی نیست به جز یه شرط ساده که در صورتی برقرار هست که دامین درخواستی api.site.com باشه . در واقع وظیفه ACL این هست که با توجه به درخواست, تشخیص بده از کدوم بک اند باید استفاده کنه. در ادامه با استفاده از کلمه کلیدی use_backend مشخص کردیم که باید از بک اند api_stack استفاده بشه و درخواست به این بک اند ارجاع داده بشه. ( به قسمت if دقت کنید, اینجا چک کردیم شرط ACL بقرار هست یا نه ).
حالا قسمت بک اند:
backend api_stack # اسم بک اند balance roundrobin # نوع لود بالانس server api1 127.0.0.1:6560 check # سرویس یا سرور ۱ server api2 127.0.0.1:6561 check # سرویس یا سرور ۲ server api3 127.0.0.1:6562 check # سرویس یا سرور ۳
خوب این قسمت هم مشخصه... این قسمت بک اند ماست که یه Load Balancer ساده داخل خودش داره
درخواست رو از فرانت اند می گیره و بین این ۳ تا سرویسی که ما تعریف کردیم به صورت راند رابین پخش می کنه.
به همین سادگی! تمام...