HAproxy چیست؟ چه کمکی به بهبود عملکرد وب‌سایت شما می‌کند؟

دسته بندی: آموزش, خدمات میزبانی وب, نکات فنی
haproxy چیست؟

 سریع، هوشمند و پراستفاده! این‌ها خصوصیات HAproxy هستند.  نرم‌افزاری که قرار است در این مقاله راجع به آن صحبت کنیم. می‌خواهیم ببینیم HAproxy چیست.نقش مهم HAproxy در دنیای اینترنت

HAproxy از آن دسته نرم‌افزارهایی است که شاید نامش کم‌تر شنیده باشد، اما نقش بسیار مهمی در دنیای اینترنت ایفا می‌کند. بدون اغراق! مثلاً سایت‌های پرترافیکی مثل گیت‌هاب، توییتر و اینستاگرام، بدون این نرم‌افزار – یا حداقل نرم‌افزاری مشابه – شاید حتی وجود هم نداشتند!!

در ادامه راجع به قابلیت‌های این نرم‌افزار، الگوریتم‌ها و چگونگی نصب آن صحبت خواهیم کرد. ابتدا بیایید کمی بیشتر با این نرم‌افزار آشنا شویم.

HAproxy چیست؟

HAproxy مخفف High Availability Proxy است. این نرم‌افزار نقش Load Balancing و Reverse Proxy در پروتکل‌های HTTP و TCP را برای سایت‌ها و اپلیکیشن‌ها ایفا می‌کند. در ضمن زبانی که برنامه با آن ساخته شده، C است!

⚠ اجازه دهید کاربرد HAproxy را با مثال برای‌تان توضیح دهیم:

فرض کنید قصد تمدید معاینه فنی ماشین‌تان را دارید و به یکی از مراکز مشخص‌شده برای این امر می‌روید. صفی بی‌انتها می‌بینید و متاسفانه ساعت‌های زیادی را در انتظار از دست خواهید داد. اوضاع زمانی بدتر می‌شود که فقط یک خط برای بررسی خودروها وجود داشته باشد و قرار باشد همه آن صف وارد همان خط شوند!

اما اگر مرکزی که به آن مراجعه کرده باشید، بزرگ و دارای چندین خط معاینه باشد، مسلماً کار سریع‌تر پیش می‌رود. در چنین حالتی، فردی در نزدیکی مرکز می‌ایستد و ماشین‌ها را به خط‌های خلوت‌تر هدایت می‌کند. اگر صف خطی طولانی شد، بقیه ماشین‌ها به خطوط دیگر فرستاده می‌شوند. این روند به‌منظور تقسیم بار و تسریع امور دائماً ادامه خواهد داشت.

کمک مرتبط با HAproxy

HAproxy، همین کار را برای سرورهای سایت‌ها و اپلیکیشن‌ها انجام می‌دهد؛ به این صورت که  ترافیک ورودی، به جای اینکه مستقیماً به سرور متصل شود، به HAproxy می‌رسد و سپس توسط این نرم‌افزار، به سمت سروری که خلوت‌تر است فرستاده می‌شود. 

با این تقسیم ترافیک، عملکرد سایت‌ها و اپلیکیشن‌ها بهبود پیدا می‌کند و کاربران تجربه بهتری خواهند داشت.

البته که HAproxy قابلیت‌های زیادی دارد.

HAproxy چه قابلیت‌هایی دارد؟

در کنار سرعت، پراستفاده بودن و هوشمندی، مهم‌ترین خصوصیت HAproxy متن‌باز بودن آن است. در ضمن این نرم‌افزار در بسیاری از توزیع‌های مختلف لینوکس هم وجود دارد.

البته نسخه شرکتی این نرم‌افزار هم وجود دارد که سرویس حرفه‌ای‌تری را در کنار پشتیبانی کامل ارائه می‌کند.

خب برویم سراغ قابلیت‌ها:

Transparent Proxy

 پراکسی شفاف که به آن Inline Proxy, Intercepting Proxy و Forced Proxy هم می‌گویند،  امکان اتصال مستقیم کاربر به سرور را فراهم می‌کند.  بگذارید این‌طور بگوییم: پراکسی هست، اما انگار نیست!! از آن جمله‌های قصار.

Content Inspections

این  قابلیت، بلاک کردن پروتکل‌های ناخواسته را برای کاربران ممکن می‌کند.

CLI For Server Management

اگر قصد ایجاد تغییرات در محیط سرور را دارید، CLI کمک‌تان خواهد کرد. تغییراتی مثل خاموش و روشن کردن سرور، به‌وسیله این قابلیت انجام می‌شوند.

حتما بخوانید:  پرستاشاپ (PrestaShop) چیست؟ چه وِیژگی‌های مهمی دارد؟

** منظور از خاموش و روشن کردن سرور، همان فعال و غیرفعال کردن سرور داخل haproxy است.

پشتیبانی از پروتکل‌های مختلف

HAproxy با پروتکل‌های گوناگونی مثل HTTP, HTTP/2, gPRC و FastCGI سازگار است.

HTTP Authenticator

فرایند احراز هویت در پروتکل HTTP بسیار ساده و ابتدایی است. HAproxy اینکار را انجام می‌دهد. به این صورت که سرور از کاربر Username و Password می‌خواهد تا اجازه ورود او را صادر کند.

Multithreading

مولتی‌تردینگ، مدلی از اجرای برنامه است که امکان ساخت چندین Thread در یک پروسه را فراهم می‌کند. با کمک HAproxy، می‌توان از این مدل استفاده کرد.

در این مدل، Threadها به‌صورت مستقل ولی هم‌زمان، از منابع پروسه استفاده می‌کنند.

Load Balancing لایه 4 و لایه 7

 مهم‌ترین قابلیت HAproxy، همین Load Balancing است.  همین قابلیت است که ترافیک ورودی را بین سرورهای مختلف تقسیم می‌کند و در نهایت، عملکرد سایت یا اپلیکیشن را بهبود می‌بخشد.

همچنین HAproxy به‌خوبی مقیاس‌پذیر است؛ یعنی حتی می‌توان آن را برای اتصال به هزاران سرور Back-end هم آماده کرد.

قابلیت های HAproxy

اما بیایید کمی بیشتر راجع به Load Balancing صحبت کنیم.

Load Balancing چیست و چند نوع از آن وجود دارد؟

آیکون Load Balancingمثال معاینه فنی را خاطرتان هست؟ در آن مثال، فرستادن ماشین‌ها به خطوط مختلف، دقیقاً همین فرایند لود بلنسینگ است. برای اینکه یک خط خیلی شلوغ نباشد و خط دیگر خالی، بار ورودی بین آن‌ها تقسیم می‌شود.

همان‌طور که گفتیم،  HAProxy ابتدا یک نرم‌افزار مخصوص Load Balancing است  و در مراحل بعدی قابلیت‌های دیگری هم دارد (همان‌هایی که درموردشان صحب کردیم)؛ یعنی این HAproxy است که وظیفه دارد تا فرایند Load Balancing را برای تقسیم ترافیک ورودی به سایت یا اپلیکیشن انجام دهد.

در مجموع 2 نوع لود بلنسینگ داریم: لایه 4 و لایه 7. در ادامه راجع به این دو نوع صحبت خواهیم کرد و البته حالتی که استفاده‌ای از لود بلنسینگ نمی‌شود.

 بدون لود بلنسینگ

در این حالت، کاربر بدون هیچ واسطه‌ای و به‌صورت مستقیم به وب‌سرور متصل می‌شود. تصویر زیر را ببینید:

بدون Load Balancing

از آنجایی که لود بلنسری در کار نیست، اگر وب سرور از دسترس خارج شود، به دنبال آن، سایت هم از دسترس خارج می‌شود. یا اگر بار ترافیکی زیادی روی یک وب سرور باشد، تجربه کاربری ناخوشایندی برای بازدیدکنندگان رقم می‌زند. حتی ممکن است مانع اتصال آن‌ها شود!

لود بلنسینگ لایه 4

ساده‌ترین راه تقسیم ترافیک بین چند سرور، استفاده از لود بلنسر لایه 4 است. تصویر زیر این نوع را نشان می‌دهد:

لود بلنسینگ لایه 4

در این حالت،  درخواست کاربر به لود بلنسر می‌رسد و نرم‌افزار (مثلاً HAproxy) درخواست را برای گروهی از سرورهای Backend می‌فرستد. هر سروری که آزادتر باشد، پاسخ درخواست را مستقیماً برای کاربر ارسال می‌کند . (پاسخ همان صفحه‌ای است که کاربر قصد بازدید از آن را دارد.) اگر به تصویر بالا دقت کنید، متوجه خواهید شد که هر دو وب سرور به یک دیتابیس متصل هستند. به همین خاطر، محتوای یکسانی از جانب هر دو به دست مخاطب خواهد رسید.

لود بلنسینگ لایه 7

این نوع از Load Balancing، طرز کار پیچیده‌تری نسبت به لایه 4 دارد. ماهیت کلی این نوع را در تصویر زیر می‌بینید:

حتما بخوانید:  ‫‫نصب و راه اندازی Docker در CentOS 6 x64

لود بلنسینگ لایه 7

مثلاً درخواست‌هایی که برای بازدید وبلاگ هستند، به blog backend می‌روند و دیگر درخواست‌ها به web backend! در ضمن هردو مجموعه سرورها، در نهایت به یک دیتابیس مشترک متصل هستند.

خب از Load Balancing هم گفتیم و حالا می‌خواهیم در مورد امنیت HAproxy بگوویم.

آیا HAproxy امنیت بالایی دارد؟

از آنجایی که این نرم‌افزار متن‌باز است، امنیتش هم توسط کاربران تامین می‌شود! اما فکر نکنید که HAproxy ناامن است. اتفاقاً  طی سال‌های اخیر، موارد بسیار نادری از آسیب‌پذیری در این نرم‌افزار مشاهده شده است. 

همچنین HAproxy این قابلیت را دارد که هنگام شناسایی نقص امنیتی، سطح حمله رخ داده را به‌شدت محدود و کنترل می‌کند.

ویژگی دیگر این نرم‌افزار در موضوع امنیت، رصد کردن رفتار کاربران برای شناسایی موارد مشکوک است. اگر حرکت نامتعارفی از جانب کاربری سر بزند، اقدامات لازم به‌سرعت انجام می‌شوند و کاربر از دسترسی به سایت یا اپلیکیشن محروم می‌شود.

حتی HAproxy امکان Rate Limiting و استفاده از Black List و White List را هم برای کاربرانش فراهم می‌کند.

haproxy امن است

اما یک سوال: Load Balancer چگونه تصمیم می‌گیرد که درخواست را برای کدام سرور بفرستند؟ این انتخاب بر اساس الگوریتم‌های این نرم‌افزار انتخاب می‌شود.

HAproxy بر اساس چه الگوریتم‌هایی عمل می‌کند؟

 HAproxy برای انجام لود بلنسینگ، از الگوریتم‌های مختلف استفاده می‌کند.  حتی پارامتری وجود دارد که میزان تناوب استفاده از هر سرور را هم مشخص می‌کند. الگوریتم‌های زیادی در این نرم‌افزار وجود دارند، اما ما در این مقاله فقط 3 الگوریتم را بررسی خواهیم کرد.

roundrobin

الگوریم پیش‌فرض HAproxy همین roundrobin است. الگوریتمی ساده که در انتخاب سرورها نوبت را در نظر می‌گیرد!

leastconn

در این الگوریتم، سروری انتخاب می‌شود که کم‌ترین اتصال را دارد. به بیان دیگر، آن سروری که سرش از باقی همکارانش خلوت‌تر است، پذیرای درخواست کاربران است. اپلیکیشن‌ها و سایت‌هایی که در آن‌ها اتصال کاربران طولانی‌تر است، بیشتر از این الگوریتم استفاده می‌کنند.

Source

در الگوریتم Source، سرور بر اساس هش IP درخواست‌کننده انتخاب می‌شود. به این ترتیب، تضمین می‌شود که یک کاربر، همیشه به یک سرور مشخص متصل می‌شود.

تقریباً در مورد همه جوانب HAproxy صحبت کردیم؛ اما این نرم‌افزار دو ویژگی دیگر هم در زمینه Load Balancing دارد.

منظور از Sticky Sessions و Health Check چیست؟

همان‌طور که تا اینجا متوجه شدید، HAproxy نرم‌افزاری بی‌نظیر برای سایت‌ها و اپلیکیشن‌های بزرگ و کوچک است. خب حالا می‌خواهیم از دو ویژگی جذاب دیگر این نرم‌افزار در رابطه با موضوع Load Balancing بگوییم.

Sticky Sessions

سازوکار برخی از سایت‌ها و اپلیکیشن‌ها، به‌گونه‌ای است که هر کاربر فقط باید به یک سرور متصل بماند و امکان تغییر سرور وجود ندارد. با کمک قابلیت Sticky Sessions این موضوع ممکن می‌شود.

Health Check

HAproxy همه سرورها را بررسی می‌کند تا بفهمد آیا توانایی پردازش درخواست‌ها را دارند یا خیر! اگر سروری، به هر دلیلی امکان پاسخدهی نداشته باشد، به‌صورت خودکار غیرفعال می‌شود و ترافیکی هم به سمتش نمی‌رود.

همچنین اگر همه سرورها از دسترس خارج شوند، کل سایت یا اپلیکیشن مسدود می‌شود تا حداقل یک سرور Backend مجدداً به چرخه فعالیت بازگردد.

قابلیت Health Check در haproxy

چگونه می‌توان نرم‌افزار HAproxy 1.8.8 را روی centos نصب کرد؟

برای اینکه بتوانید از HAproxy و ویژگی‌های کارآمدش بهره ببرید، باید آن را روی سایت یا اپلیکیشن‌تان نصب کنید.

حتما بخوانید:  Nginx چیست و چه کاربردهایی دارد؟ آیا به درد سایت شما می‌خورد؟

قبل از هرکاری، باید پیش‌نیازهای این نرم‌افزار را نصب کنید:

`sudo yum install gcc pcre-static pcre-devel –y`

حالا باید نرم‌افزار را نصب و فایل haproxy.cfg را پیکربندی کنید:

cd /etc/haproxy/
yum -y install haproxy
mv haproxy.cfg haproxy.cfg.orig
nano haproxy.cfg

در مرحله بعدی، باید محتوای زیر را در فایل قرار دهید:

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log /dev/log local0
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 10000
user haproxy #Haproxy running under user and group "haproxy"
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 10000
#---------------------------------------------------------------------
#HAProxy Monitoring Config
#---------------------------------------------------------------------
listen webfarm
bind 0.0.0.0:8080
mode http
stats enable
stats uri /
stats realm Strictly\ Private
stats auth test:test
#---------------------------------------------------------------------
# FrontEnd Configuration
#---------------------------------------------------------------------

frontend main
default_backend app-main
bind *:80
option http-server-close
option forwardfor
#---------------------------------------------------------------------
# BackEnd roundrobin as balance algorithm
#---------------------------------------------------------------------
backend app-main
balance roundrobin #Balance algorithm
option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost #Check the server application is up and healty - 200 status code
server SERVER-NAME SERVER-IP:PORT check

از طریق سرور Haproxy و در بخش HAproxy Monitoring Config، می‌توانید با قرار دادن یک Username و Password، از طریق وب، وضعیت وب‌سرورها را بررسی کنید.

برای دسترسی به سرور این نرم‌افزار، باید از آدرس زیر استفاده کنید:

http://IP-haproxy-server:8080/stats

سپس در فایل /etc/rsyslog.conf، باید دو خط زیر را از حالت کامنت خارج کنید:

$ModLoad imudp

$UDPServerRun 514

بعد از آن، باید خط زیر را داخل همین فایل add کنید:

$UDPServerAddress 127.0.0.1

حالا باید فایل /etc/rsyslog.d/haproxy.conf را ایجاد کنید و محتوای زیر را داخل آن قرار دهید:

local2.=info     /var/log/haproxy-access.log    #For Access Log

local2.notice    /var/log/haproxy-info.log      #For Service Info - Backend, loadbalancer

در این مرحله باید سرویس‌ها را Start کنید، اینکار توسط دستور زیر انجام می‌شود:

systemctl restart rsyslog
systemctl start haproxy
systemctl enable haprox

در مرحله آخر، باید پورت 80 و 8080 را به Firewall اضافه کنید:

iptables -I INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
service iptables save

نکته: در Centos 7، که یکی از توزیع‌های معروف لینوکس است، احتمال دارد که iptables در سرور فعال نباشد! در چنین شرایطی باید ابتدا Firewalld را، توسط دستور زیر غیرفعال و iptables را فعال کنید:

systemctl stop firewalld
systemctl mask firewalld
yum install iptables-services
systemctl enable iptables

در صورت اعمال هرگونه تغییر در فایل haproxy.cfg، باید haproxy را reload کنید. دستور زیر برای انجام این کار است:

service haproxy reload

همچنین برای فعال‌سازی پروتکل HTTPS در front-end main، باید از دستور زیر استفاده کنید:

frontend www-https
pem.example.com/bind haproxy_www_public_IP:443 ssl crt /etc/ssl/private
reqadd X-Forwarded-Proto:\ https
default_backend www-backend

خب این هم تمام آن چیزی که لازم بود راجع به نرم‌افزار HAproxy بدانید.

حرف آخر: HAproxy در کنار NginX قدرتمندتر است!

خب متوجه شدیم که HAproxy، نرم‌افزاری است که وظیفه‌اش بهبود عملکرد نهایی سایت و اپلیکیشن است. وب سرور Nginx به‌خاطر خصوصیاتش، زمانی که همراه با HAproxy استفاده می‌شود، عملکرد بهتری خواهد داشت. همچنین HAproxy هم در کنار این وب سرور، کارآمدتر از همیشه نشان می‌دهد.

برای تهیه این مقاله از سایت‌های DigitalOcean و TechTarget کمک گرفتیم.

اگر سوال یا نظری در این زمینه دارید، در قسمت کامنت‌ها منتظرتان هستیم. 💙

برچسب ها:
5/5 - (1 امتیاز)

مایلید هر دو هفته یک ایمیل مفید دریافت کنید؟

ما را در شبکه‌های اجتماعی دنبال کنید

همچنین شاید دوست داشته باشید!

نظرات کاربران

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.
شما برای ادامه باید با شرایط موافقت کنید

فهرست