پیکربندی اولیه HAProxy

در مطلب قبلی با عنوان “نصب HAProxy بر روی Ubuntu 20.04” چگونگی نصب haproxy بر روی Ubuntu 20.0.4 را شرح دادیم. در این مطلب قصد داریم تنظیمات اولیه و ابتدایی haproxy را انجام دهیم. پیکربندی haproxy بسیار ساده بوده و به دور از پیچیدگی است. یکی از مزایای haproxy داشتن قابلیتهای بسیار و قدرتمند بودن در عین سادگی است.
در سناریوی مد نظر ما سه وب سرور مانند شکل زیر وجود دارند و وظیفه haproxy تقسیم بار (درخواستهای دریافتی از کاربران) بین این سه سرور است. معمولا haproxy یک آدرس IP در رنج آدرس سرورهای واقعی دارد.

نکته: معمولا توپولوژیهای کشیده شده از load balancerها به گونه‌ای است که افراد گمان میکنند default gateway سرورها باید سرور load balancer باشد. اما معمولا اینطور نیست و default gateway سرورها یک روتر در شبکه است.

ویرایش فایل haproxy.cfg

برای پیکربندی haproxy باید فایل haproxy.cfg را ویرایش کرد. این فایل در مسیر etc/haproxy قرار دارد. این فایل را با یک ویرایشگر مانند vi باز کنید. پیکربندی اولیه این فایل به صورت زیر خواهد بود. این فایل از دارای دو بخش global و default میباشد که تنظیمات اولیه و کلی haproxy را در خود جای داده‌اند.

global
log /dev/log    local0
log /dev/log    local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http

برای انجام تنظیمات حداقلی باید دو بخش frontend و backend را به انتهای این فایل اضافه کرد. به عنوان مثال اگر شما دارای سه وب سرور با آدرسهای 10.0.0101 و 10.0.0.102 و 10.0.0.103 باشید. آدرس سرور haproxy نیز 10.0.0.50 باشد و بخواهید ترافیک را بین سرورها تقسیم کنید، پیکربندی haproxy به صورت زیر خواهد بود.

frontend MY_Proxy
bind 10.0.0.50:80
default_backend My_Web_Cluster

backend My_Web_Cluster
server Server_01 10.0.0.101:80 check
server Server_02 10.0.0.102:80 check
server Server_03 10.0.0.103:80 check

در بخش frontened تنظیمات به گونه‌ای است که haproxy بر روی پورت 80 به درخواستهای HTTP گوش میکند و این درخواستها را به یکی از سه سرور مشخص شده در قسمت backend ارسال میکند. با استفاده از امکان check میتوان سلامتی سرورها را بررسی کرد و از فرستادن درخواستها به سروری که دچار مشکل شده است جلوگیری کرد.

بررسی درستی تنظیمات

پس از انجام تغییرات در فایل haproxy.cfg میتوانید درست بودن این فایل پیکربندی را توسط فرمان زیر چک کنید.

root@HAProxy2:/home/alireza# haproxy -f /etc/haproxy/haproxy.cfg -c

Configuration file is valid

سپس برای اعمال تغییرات انجام شده باید سرویس haproxy را restart کنید. برای این کار از یکی از دو فرمان زیر میتوانید استفاده کنید.

root@HAProxy:/home/alireza# service haproxy restart

or

root@HAProxy2:/home/alireza# /etc/init.d/haproxy reload

سایر امکانات و قابلیتهای haproxy

haproxy دارای امکانات بسیار زیاد دیگری مانند:
– مشاهده عملکرد و وضعیت سرورها از طریق وب
– مشخص کردن الگوریتم تقسیم بار بین سرورها
– session persistency (وصل شدن یک کاربر به سرور اولیه در درخواستهای بعدی کاربر)
– ssl offloading (قرار دادن ssl certificate سایت بر روی haproxy به جای وب سرور)
– دستکاری هدرهای HTTP در درخواستهای کاربران و یا جوابهای سرور
– افزایش امنیت web application و جلوگیری از پاره‌ای از حملات
– high availability از طریق داشتن haproxy پشتیبان و وارد شدن خودکار به مدار در صورت از کار افتادن سرور اول
– و … می‌باشد.