مقدمه
HAProxy یک نرمافزار محبوب و قدرتمند برای Load Balancing و Proxying است که بهطور عمده برای توزیع درخواستهای HTTP و TCP بین سرورهای مختلف استفاده میشود. این ابزار بهویژه برای محیطهای با مقیاس بزرگ و نیازمند مقیاسپذیری بالا طراحی شده است و در دیتاسنترها و سیستمهای آنلاین کاربرد فراوانی دارد.
در این مقاله کانفیگ سرور، به نصب، پیکربندی و تنظیمات پیشرفته HAProxy میپردازیم. همچنین نحوه بهینهسازی عملکرد و مقیاسپذیری آن را بررسی خواهیم کرد.
بخش اول: نصب HAProxy در لینوکس
1. نصب HAProxy در سیستمهای مبتنی بر Debian/Ubuntu
برای نصب HAProxy روی سیستمهای مبتنی بر Debian یا Ubuntu، کافی است از دستور زیر استفاده کنید:
sudo apt update
sudo apt install haproxy
2. نصب HAProxy در سیستمهای مبتنی بر Red Hat/CentOS
برای نصب HAProxy در سیستمهای مبتنی بر Red Hat یا CentOS، از دستور زیر استفاده کنید:
sudo yum install haproxy
3. بررسی نسخه نصبشده
پس از نصب HAProxy، میتوانید با دستور زیر نسخه نصبشده را بررسی کنید:
haproxy -vبخش دوم: پیکربندی اولیه HAProxy
1. فایل پیکربندی HAProxy
فایل پیکربندی اصلی HAProxy معمولاً در مسیر /etc/haproxy/haproxy.cfg قرار دارد. این فایل برای تنظیمات مربوط به frontend (ورودی درخواستها)، backend (سرورهای مقصد)، و listen (ترکیب frontend و backend) استفاده میشود.
برای ویرایش این فایل، از ویرایشگر متنی مانند nano یا vim استفاده کنید:
sudo nano /etc/haproxy/haproxy.cfg
2. تنظیمات ابتدایی HAProxy
در این بخش، تنظیمات ابتدایی را انجام میدهیم. یک پیکربندی ساده که درخواستها را به دو سرور توزیع میکند بهصورت زیر خواهد بود:
global
log /dev/log local0
maxconn 200
defaults
log global
option httplog
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http-in
bind *:80
default_backend servers
backend servers
server server1 192.168.1.101:80 check
server server2 192.168.1.102:80 check
در این پیکربندی:
- frontend http-in: ورودی درخواستها را دریافت میکند.
- backend servers: درخواستها را به سرورهای مختلف توزیع میکند.
3. راهاندازی HAProxy
پس از ویرایش فایل پیکربندی، HAProxy را با دستور زیر راهاندازی کنید:
sudo systemctl start haproxy
برای تنظیم HAProxy جهت شروع بهطور خودکار در زمان بوت، از دستور زیر استفاده کنید:
sudo systemctl enable haproxy
بخش سوم: تنظیمات پیشرفته HAProxy
1. Load Balancing با الگوریتمهای مختلف
HAProxy از الگوریتمهای مختلفی برای توزیع بار پشتیبانی میکند. در اینجا برخی از رایجترین آنها را بررسی میکنیم:
الف. Round Robin
در الگوریتم Round Robin، درخواستها بهطور مساوی بین سرورها توزیع میشوند. این الگوریتم بهطور پیشفرض در HAProxy فعال است و نیازی به تنظیمات خاصی ندارد.
backend servers
balance roundrobin
server server1 192.168.1.101:80 check
server server2 192.168.1.102:80 check
ب. Least Connections
در الگوریتم Least Connections، درخواستها به سروری ارسال میشوند که کمترین تعداد اتصال فعال را دارد. این الگوریتم برای سیستمهایی که بار آنها بهطور متغیر است، مفید است.
backend servers
balance leastconn
server server1 192.168.1.101:80 check
server server2 192.168.1.102:80 check
ج. Source IP Hash
در این الگوریتم، درخواستها بر اساس آدرس IP مبدأ به سرورها توزیع میشود. این روش بهویژه برای حفظ session persistence (پایداری نشست) مفید است.
backend servers
balance source
server server1 192.168.1.101:80 check
server server2 192.168.1.102:80 check
2. تنظیمات SSL/TLS در HAProxy
برای پیکربندی SSL در HAProxy و استفاده از HTTPS، نیاز به گواهی SSL و کلید خصوصی خواهید داشت. پس از تهیه گواهی SSL، میتوانید آن را در پیکربندی HAProxy بهصورت زیر فعال کنید.
الف. تنظیم SSL در Frontend
در این پیکربندی، HAProxy به پورت 443 (HTTPS) گوش میدهد و درخواستها را بهصورت امن به سرورهای backend ارسال میکند:
frontend https-in
bind *:443 ssl crt /etc/ssl/certs/yourdomain.pem
default_backend servers
ب. تنظیم SSL Termination
در این حالت، HAProxy مسئول پردازش ارتباطات SSL خواهد بود و ارتباطات بعدی به سرورهای backend بهصورت معمولی (HTTP) خواهد بود:
frontend https-in
bind *:443 ssl crt /etc/ssl/certs/yourdomain.pem
default_backend servers
backend servers
server server1 192.168.1.101:80 check
server server2 192.168.1.102:80 check
3. تنظیمات Health Checks
HAProxy امکان بررسی سلامت سرورها را دارد. این قابلیت از اهمیت ویژهای برخوردار است زیرا از ارسال درخواستها به سرورهای خراب یا غیرقابل دسترس جلوگیری میکند.
برای فعالسازی Health Checks برای سرورهای backend، از تنظیمات زیر استفاده کنید:
backend servers
server server1 192.168.1.101:80 check inter 2000 rise 2 fall 3
server server2 192.168.1.102:80 check inter 2000 rise 2 fall 3
در این تنظیمات:
- inter 2000: فاصله زمانی بین هر بررسی سلامت ۲ ثانیه است.
- rise 2: سرور باید ۲ بار بهطور موفقیتآمیز درخواستها را پاسخ دهد تا بهعنوان سرور سالم شناخته شود.
- fall 3: سرور باید ۳ بار شکست در پاسخ به درخواستها را تجربه کند تا از لیست سرورهای فعال حذف شود.
بخش چهارم: تنظیمات خاص و بهینهسازی
1. استفاده از Sticky Sessions
در برخی موارد، برای حفظ وضعیت نشست کاربر (مانند سبد خرید در فروشگاههای آنلاین)، لازم است که درخواستها از یک کاربر خاص به سرور مشخصی ارسال شوند. این کار را میتوان با استفاده از Sticky Sessions یا Session Persistence انجام داد.
backend servers
balance roundrobin
cookie SERVERID insert indirect nocache
server server1 192.168.1.101:80 check cookie s1
server server2 192.168.1.102:80 check cookie s2
در این پیکربندی:
- cookie SERVERID insert indirect nocache: یک کوکی برای شناسایی سرور اختصاصی هر کاربر ارسال میشود.
- cookie s1 و cookie s2: برای هر سرور یک شناسه کوکی تعریف میشود.
2. تنظیمات Rate Limiting
برای جلوگیری از حملات DDoS یا جلوگیری از درخواستهای بیش از حد از یک کاربر خاص، میتوانید از Rate Limiting استفاده کنید.
frontend http-in
bind *:80
acl too_many_requests sc_http_req_rate(0) gt 100
http-request deny if too_many_requests
در این تنظیمات:
- sc_http_req_rate(0) gt 100: تعداد درخواستها از یک منبع خاص را محدود به ۱۰۰ درخواست در دقیقه میکند.
- http-request deny if too_many_requests: درخواستهای اضافی را مسدود میکند.
نتیجهگیری
در این مقاله، بهطور کامل نحوه نصب و پیکربندی HAProxy به همراه تنظیمات پیشرفتهای مانند Load Balancing، SSL/TLS Termination، Health Checks و Sticky Sessions را بررسی کردیم. همچنین، به بهینهسازیهای مختلفی مانند Rate Limiting پرداختهایم که میتواند به حفاظت از سرور و بهبود عملکرد کمک کند.
با این تنظیمات و بهترین شیوهها، میتوانید HAProxy را برای بارگذاری متعادل و مقیاسپذیری بالا در سیستمهای پیچیده و بزرگ بهخوبی راهاندازی کنید.




