HAProxy یکی از محبوب‌ترین و مؤثرترین برنامه‌های سمت سرور طرف هستیم که می‌تواند کنترل ترافیک سرور را بر عهده گرفته و کار را به صورتی پیش ببرد که درخواست‌های زیاد باعث این نشوند که در کارکرد کلی سرورها و سایت اختلالی ایجاد شود. قبل از اینکه به‌صورت مستقیم  HAProxyرا بررسی کنیم لازم است که کمی در مورد سرورهای اینترنتی و روش‌هایی که برای کارکردن دارند صحبت کنیم.

در تعریف کتابی برای این سؤال که HAProxy چیست باید گفت برنامه‌ای رایگان و Open Source است که از طریق مکانیزم کار تغییر URL می‌تواند امکان تغییر آدرس‌ها را روی سرور انجام داده و وب سرورها به‌صورت بهینه به این درخواست‌های وارده سرویس‌دهی می‌کنند.

در واقع اگر بخواهیم بگوییم که روش بالانس کردن در HAProxy چیست باید گفت که از تکنیکی به نام URL Rewriting برای این کار استفاده می‌کند. وقتی که یک درخواست وارد سرور می‌شود، در واقع نیاز دارد که به یک URL متصل شده و از سایتی که نیاز دارد اطلاعات خود را بردارد. کاری که HAProxy برای متعادلسازی یا load balancing  انجام می‌دهد این است که یک درخواست‌ها را روی چند سرور به‌صورت متعادل توزیع می‌کند.

haproxy

haproxy

 نصب و راه اندزای HAproxy load Balancer

در ابتدا بخش سناریو را بررسی می کنیم و سپس به راه اندازی می پردازیم لازم به ذکر است این سناریو برای لود بالانسر به صورت لایه 4 پیاده سازی شده اسا

load balancing

load balancing

HAProxy سناریو

HAProxy سناریو

در این سناریو ما از توزیع 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 در مرورگر میتوانیم خروجی را مشاهده کنیم.

http://192.168.59.135

http://192.168.59.135

http://192.168.59.135

http://192.168.59.135

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