راهاندازی Load Balancer با HAProxy برای توزیع بار بین چند سرور
وقتی یک سرور بهتنهایی جوابگوی ترافیک سایت یا اپلیکیشن شما نیست، اولین راهحلی که معمولاً به ذهن میرسد افزودن سرورهای بیشتر است. اما مشکل بعدی این است: ترافیک ورودی چطور باید بین این چند سرور تقسیم شود؟ HAProxy یکی از شناختهشدهترین و پایدارترین ابزارهای متنباز برای پاسخ به همین سؤال است.
HAProxy چیست و چه کاربردی دارد؟
HAProxy (مخفف High Availability Proxy) یک Load Balancer و Reverse Proxy سبک و بسیار سریع است که ترافیک ورودی را بین چند سرور بکاند توزیع میکند. اگر با مفهوم Reverse Proxy در نصب پشته LEMP آشنا شده باشید، HAProxy را میتوان یک لایه جلوتر از همان Nginx تصور کرد که ترافیک را بین چند سرور Nginx یا اپلیکیشن پخش میکند.
الگوریتمهای توزیع بار در HAProxy
| الگوریتم | توضیح |
|---|---|
| Round Robin | ترافیک بهترتیب و مساوی بین سرورها توزیع میشود؛ الگوریتم پیشفرض و سادهترین حالت |
| Leastconn | درخواست به سروری فرستاده میشود که در آن لحظه کمترین اتصال فعال را دارد |
| Source | بر اساس IP کاربر، همیشه به یک سرور ثابت هدایت میشود (مناسب Session Persistence) |
| URI | تصمیمگیری بر اساس مسیر URL درخواست انجام میشود |
نصب HAProxy روی اوبونتو
sudo apt update
sudo apt install haproxy -y
sudo systemctl enable haproxy
sudo systemctl start haproxy
sudo systemctl status haproxyپیکربندی Frontend و Backend
تنظیمات اصلی HAProxy در فایل /etc/haproxy/haproxy.cfg قرار دارد. یک نمونهٔ ساده برای توزیع بار بین دو سرور بکاند:
frontend http_front
bind *:80
default_backend http_back
backend http_back
balance roundrobin
server web1 192.168.1.10:80 check
server web2 192.168.1.11:80 checkپس از هر تغییر در این فایل، سینتکس را تست و سپس سرویس را ریلود کنید:
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
sudo systemctl reload haproxyبررسی سلامت سرورها با Health Check
پارامتر check در انتهای هر خط server باعث میشود HAProxy بهصورت دورهای سلامت آن سرور را بررسی کند. اگر سروری پاسخ ندهد، HAProxy بهطور خودکار آن را از چرخهٔ توزیع بار خارج میکند تا کاربران با خطا مواجه نشوند. برای بررسی سطح HTTP (نه فقط اتصال TCP) میتوانید از option httpchk استفاده کنید:
backend http_back
option httpchk GET /health
balance leastconn
server web1 192.168.1.10:80 check
server web2 192.168.1.11:80 checkمشاهده وضعیت زنده با HAProxy Stats
HAProxy یک پنل آماری داخلی دارد که وضعیت لحظهای هر سرور بکاند را نشان میدهد:
listen stats
bind *:8404
stats enable
stats uri /stats
stats auth admin:YourStrongPasswordپس از تنظیم این بخش، آدرس http://server-ip:8404/stats نمایی زنده از وضعیت، تعداد اتصالات و سلامت هر سرور بکاند را در اختیار شما میگذارد.
جمعبندی
HAProxy با کمترین سربار و بالاترین پایداری، امکان توزیع بار بین چند سرور را فراهم میکند. پیش از راهاندازی HAProxy، لازم است حداقل دو سرور بکاند آماده و پیکربندیشده داشته باشید؛ اگر هنوز این مرحله را طی نکردهاید، راهاندازی اولیهٔ سرور Ubuntu نقطهٔ شروع خوبی است.
ارتباط با معماری میکروسرویس
Load Balancer نقش کلیدی در معماریهای توزیعشده و میکروسرویس ایفا میکند، جایی که ترافیک باید بین چندین نمونه از یک سرویس توزیع شود. برای آشنایی با اینکه چه زمانی مهاجرت از معماری یکپارچه به میکروسرویس منطقی است، میتوانید به مقاله مهاجرت از Monolith به Microservices مراجعه کنید.