در مطلب قبلی با عنوان “نصب HAProxy بر روی Ubuntu 20.04” چگونگی نصب haproxy بر روی Ubuntu 20.0.4 را شرح دادیم. در این مطلب قصد داریم تنظیمات اولیه و ابتدایی haproxy را انجام دهیم. پیکربندی haproxy بسیار ساده بوده و به دور از پیچیدگی است. یکی از مزایای haproxy داشتن قابلیتهای بسیار و قدرتمند بودن در عین سادگی است.
در سناریوی مد نظر ما سه وب سرور مانند شکل زیر وجود دارند و وظیفه haproxy تقسیم بار (درخواستهای دریافتی از کاربران) بین این سه سرور است. معمولا haproxy یک آدرس IP در رنج آدرس سرورهای واقعی دارد.
نکته: معمولا توپولوژیهای کشیده شده از load balancerها به گونهای است که افراد گمان میکنند default gateway سرورها باید سرور load balancer باشد. اما معمولا اینطور نیست و default gateway سرورها یک روتر در شبکه است.
برای پیکربندی 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@HAProxy:/home/alireza# haproxy -f /etc/haproxy/haproxy.cfg -c
Configuration file is valid
سپس برای اعمال تغییرات انجام شده باید سرویس haproxy را restart کنید. برای این کار از یکی از دو فرمان زیر میتوانید استفاده کنید.
root@HAProxy:/home/alireza# service haproxy restart
or
root@HAProxy:/home/alireza# /etc/init.d/haproxy reload
haproxy دارای امکانات بسیار زیاد دیگری مانند:
– مشاهده عملکرد و وضعیت سرورها از طریق وب
– مشخص کردن الگوریتم تقسیم بار بین سرورها
– session persistency (وصل شدن یک کاربر به سرور اولیه در درخواستهای بعدی کاربر)
– ssl offloading (قرار دادن ssl certificate سایت بر روی haproxy به جای وب سرور)
– دستکاری هدرهای HTTP در درخواستهای کاربران و یا جوابهای سرور
– افزایش امنیت web application و جلوگیری از پارهای از حملات
– high availability از طریق داشتن haproxy پشتیبان و وارد شدن خودکار به مدار در صورت از کار افتادن سرور اول
– و … میباشد.