HAProxy یکی از محبوبترین و مؤثرترین برنامههای سمت سرور طرف هستیم که میتواند کنترل ترافیک سرور را بر عهده گرفته و کار را به صورتی پیش ببرد که درخواستهای زیاد باعث این نشوند که در کارکرد کلی سرورها و سایت اختلالی ایجاد شود. قبل از اینکه بهصورت مستقیم HAProxyرا بررسی کنیم لازم است که کمی در مورد سرورهای اینترنتی و روشهایی که برای کارکردن دارند صحبت کنیم.
در تعریف کتابی برای این سؤال که HAProxy چیست باید گفت برنامهای رایگان و Open Source است که از طریق مکانیزم کار تغییر URL میتواند امکان تغییر آدرسها را روی سرور انجام داده و وب سرورها بهصورت بهینه به این درخواستهای وارده سرویسدهی میکنند.
در واقع اگر بخواهیم بگوییم که روش بالانس کردن در HAProxy چیست باید گفت که از تکنیکی به نام URL Rewriting برای این کار استفاده میکند. وقتی که یک درخواست وارد سرور میشود، در واقع نیاز دارد که به یک URL متصل شده و از سایتی که نیاز دارد اطلاعات خود را بردارد. کاری که HAProxy برای متعادلسازی یا load balancing انجام میدهد این است که یک درخواستها را روی چند سرور بهصورت متعادل توزیع میکند.
نصب و راه اندزای HAproxy load Balancer
در ابتدا بخش سناریو را بررسی می کنیم و سپس به راه اندازی می پردازیم لازم به ذکر است این سناریو برای لود بالانسر به صورت لایه 4 پیاده سازی شده اسا
در این سناریو ما از توزیع CentOs استفاده کرده ایم.
در مرحله اول بروی سرور HAproxy آپاچی نصب می کنیم
sudo yum install httpd
در مرحله بعدی سرویس HAproxy را با دستور زیر نصب می کنیم:
sudo yum install haproxy
سپس با استفاده از دستورات زیر سرور HAproxy را کانفیگ می کنیم:
[root@rezaalie ~]# nano /etc/haproxy/haproxy.cfg
defaults
log global
mode tcp
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main
bind *:80
mode tcp
default_backend app
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#------------------------------------------------------------------
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
balance roundrobin
server app1 192.168.59.129:80 check
server app2 192.168.59.130:80 check
server app3 192.168.59.131:80 check
بعد از ذخیره دستورات فوق بایستی سرویس را فعال کنیم
[root@rezaalie~]# haproxy -c -f /etc/haproxy/haproxy.cfg
[root@rezaalie~]# systemctl enable --now haproxy
[root@rezaalie~]# firewall-cmd --add-service=http
success
[root@rezaalie~]# firewall-cmd --runtime-to-permanent
success
در نهایت با وارد کردن IP HAproxy در مرورگر میتوانیم خروجی را مشاهده کنیم.
تفاوت لودبالانسر L4 با L7
لودبالانسر L4 مدیریت ترافیک تراکنش ها را در لایه پروتکل شبکه (TCP/UDP) ارائه می دهد. لودبالانسر L4 ترافیکی را با اطلاعات شبکه محدود با الگوریتم لودبالانسر (به عنوان مثال RR) و با محاسبه بهترین سرور بر اساس کمترین اتصالات و سریعترین زمان پاسخ سرور ارائه می دهد.
لودبالانسر L7 در بالاترین سطح مدل OSI کار می کند. L7 تصمیمات مسیریابی خود را بر اساس ویژگی های مختلف هدر HTTP/HTTPS، محتوای پیام، نوع URL و اطلاعات موجود در کوکی ها قرار می دهد.
اجرای لودبالانسر در لایه 7
در صورتی که بخواهیم از لایه 4 به لایه 7 تغییر بدهم کانفیگ زیر را اعمال می کنیم:
[root@rezaalie ~]# nano /etc/haproxy/haproxy.cfg
defaults
log global
mode http
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main
bind *:80
mode http
default_backend app
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#------------------------------------------------------------------
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
balance roundrobin
server app1 192.168.59.129:80 check
server app2 192.168.59.130:80 check
server app3 192.168.59.131:80 check
[root@rezaalie~]# systemctl enable --now haproxy
نکته:
در صورتی که منابع سخت افزاری سرور های ما یکسان نباشد میتوانیم برای آن ها وزن Weight تعریف کنیم و ترافیک را براساس Weight آن ها تقسیم کنیم:
backend app
balance roundrobin
server app1 192.168.59.129:80 check weight 10
server app2 192.168.59.130:80 check weight 5
server app3 192.168.59.131:80 check weight 0
در این حالت به سمت app1 ترافیک بیشتری ارسال می شود و به سمت app3 هیچ ترافیکی ارسال نمی شود