معرفی:
HAProxy یکی از سرویس های رایگان و بسیار قدرتمند در زمینه ی تنظیم بار (Load Balancing) می باشد.
HAProxy مخفف عبارت High Availability Proxy می باشد.
از این سرویس برای بالا بردن عملکرد و در دسترس بودن وب سرورها استفاده می شود.
همچنین این سرویس قابل راه اندازی بر روی بسترهای Linux ،solaris ،FreeBSD می باشد.
این سرویس رایگان و بسیار کم حجم، عملکرد بسیار بالایی دارد و در محیط های Enterprise نیز در حال استفاده است.
به همین اندازه معرفی راضی باشید تا به قسمت های جذاب تر برسیم.
راه اندازی:
سناریو ما به صورت زیر خواهد بود:
Configure HAProxy
سرور HAProxy نه از لحاظ فیزیکی، بلکه از لحاظ منطقی جلوی وب سرورها قرار می گیرد و درخواست های کاربران ابتدا به این سرور فرستاده می شود.
سپس این سرور با توجه به الگوریتم هایی که برای آن تعریف می کنیم اقدام به تنظیم بار وب سرورها می کند.
حال نوبت راه اندازی است.
ابتدا نیاز است که سرور خود را آپدیت و پکیج HAProxy را نصب کنید:
# yum update
# Yum install haproxy
فایل کانفیگ این سرویس به صورت پیش فرض در این مسیر قرار دارد:
# /etc/haproxy/haproxy.cfg
بهتر است که یک کپی از فایل کانفیگ پیش فرض تهیه کنید و سپس بر روی فایل اصلی تغییرات را ایجاد کنید:
# cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.org
این فایل کانفیگ به صورت پیش فرض چهار بلوک اصلی دارد:
- global
- default
- frontend
- backend
بلوک global تنظیماتی است که بر روی همه ی سرور هایی که در backend تعریف می شوند، اعمال می شود.
بلوک default شامل تنظیماتی برای خود سرویس HAProxy می باشد.
بلوک frontend شامل تنظیماتی است که کاربران با آن سروکار دارند.
بلوک backend همان طور که از نامش پیداست، تنظیمات مربوط به load balancing می باشد که در پشت صحنه سرور انجام می شود.
حال به کانفیگ این فایل می پردازیم:
ابتدا فایل کانفیگ خود را با یک ادیتور باز کنید.
# vim /etc/haproxy/haproxy.cfg
سپس تنظیمات زیر را کپی کنید و داخل فایل کانفیگ خود وارد کنید.
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
defaults
mode http
log global
option httplog
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
maxconn 3000
frontend pick_up_a_name
bind 192.168.10.100:8282
use_backend img if { path -i -m beg /imgage }
default_backend web_servers
backend img
balance roundrobin
server system4 192.168.10.100:80 check
backend web_servers
balance roundrobin
server system0 192.168.10.100:80 check
server system1 192.168.10.100:81 check
server system2 192.168.10.100:8181 check
در نهایت فایل را ذخیره کرده و سرویس خود را یک بار ریست کنید.
توضیح فایل کانفیگ:
ابتدا با بلوک frontend شروع می کنیم. برای سرور با دستور bind
مشخص می کنیم که روی کدام اینترفیس و کدام پرت به کاربران سرویس داده شود.
دو دستور use_backend
و default_backend
را مانند if و else برنامه نویسی در نظر بگیرید.
عبارت if برای ما مشخص می کند که اگر درخواست کاربر با واژه image شروع شده باشد، آن را به backend img می فرستد.
در غیر این صورت اگر همان درخواست با image شروع نشده باشد، آن را به default_backend می فرستد.
حال نوبت بلوک backend می باشد.
backend اول ما که img می باشد از الگوریتم roundrobin پیروی می کند.
با استفاده از server ، آدرس و پرت وب سرورهای خود را مشخص می کنیم.
همچنین یک نام دلخواه مانند system4 به آن نسبت می دهیم.
در backend web_servers نیز به همین صورت نوع الگوریتم تنظیم بار، آدرس و پرت سرورها را مشخص می کنیم.
همچنین به هر کدام یک نام دلخواه نسبت می دهیم.
یکی دیگر از الگوریتم های تنظیم بار، leastconn می باشد که می توان به جای roundrobin در فایل کانفیگ استفاده کرد.
در این الگوریتم در هر لحظه درخواست کاربران به سروری داده می شود که بار کمتری داشته باشد.
حال با توجه به بلوک frontend که درخواست کاربران بر روی ۸۲۸۲ جواب داده می شود، شروع به تست سرویس خود می کنیم.
در مرورگر آدرس را وارد کرده و چند بار صفحه را پشت سر هم رفرش می کنیم.
همان طور که مشاهده می کنید درخواست ما هر بار به صورت تصادفی به یکی از سرور ها وصل می شود.

به همین راحتی!
راه اندازی پنل گرافیکی:
این سرویس دوست داشتنی حجت را بر تمام دوست داران دنیای open source تمام کرده و یک پنل گرافیکی هم به ادمین ها ارائه می دهد.
در این پنل اطلاعات و لاگ های خوبی به ادمین نشان داده می شود.
نام این ماژول HAProxy stat می باشد.
برای فعال کردن این ماژول بعد از بلوک default، دستورات زیر را در فایل کانفیگ وارد کنید:
listen stats 192.168.10.100:1936
mode http
log global
maxconn 10
clitimeout 100s
srvtimeout 100s
contimeout 100s
timeout queue 100s
stats enable
stats hide-version
stats refresh 30s
stats show-node
stats auth admin:password
stats uri /haproxy?stats
فایل را ذخیره کرده و سرویس خود را ریست کنید.
آدرس سرور را در مرورگر وارد کرده و از لاگ های گرافیکی لذت ببرید.
این بود از سرویس ساده اما کاربردی HAProxy !
برای نوشتن دیدگاه باید وارد بشوید.