برای بالانس کردن درخواست ها (Requests) در سرور های مختلف میتوانید از Ha Proxy استفاده کنید. توسط این نرم افزار میتوانید لیستی از سرور های فرانت اند و بک اند را تعریف کنید که با توجه به الگوریتمی که انتخاب کرده اید درخواست ها رو بین سرور ها تقسیم کند.برای مثال میتوانید طوری سرور HA را به گونه ای تنظیم کنید که برای مثال به صورت راند رابین بین سرور A و B درخواست های کاربران را تقسیم کند.
نصب
برای نصب Ha Proxy در سیستم عامل ubuntu میتوانید از دستور زیر استفاده کنید:
sudo add-apt-repository ppa:vbernat/haproxy-1.8 sudo apt-get update sudo apt-get install haproxy
اگر سیستم عامل سرور cent os دارید از دستور زیر استفاده کنید :
yum install gcc openssl-devel readline-devel systemd-devel make pcre-devel cd curl https://www.lua.org/ftp/lua-5.3.5.tar.gz > lua-5.3.5.tar.gz curl http://www.haproxy.org/download/1.9/src/haproxy-1.9.7.tar.gz > haproxy-1.9.7.tar.gz tar xf lua-5.3.5.tar.gz tar xf haproxy-1.9.7.tar.gz cd lua-5.3.5 make INSTALL_TOP=/opt/lua-5.3.5 linux install cd cd haproxy-1.9.7 make USE_NS=1 \ USE_TFO=1 \ USE_OPENSSL=1 \ USE_ZLIB=1 \ USE_LUA=1 \ USE_PCRE=1 \ USE_SYSTEMD=1 \ USE_LIBCRYPT=1 \ USE_THREAD=1 \ TARGET=linux2628 \ LUA_INC=/opt/lua-5.3.5/include \ LUA_LIB=/opt/lua-5.3.5/lib make help make PREFIX=/opt/haproxy-1.9.7 install groupadd -g 188 haproxy useradd -g 188 -u 188 -d /var/lib/haproxy -s /sbin/nologin -c haproxy haproxy groupadd -g 188 haproxy useradd -g 188 -u 188 -d /var/lib/haproxy -s /sbin/nologin -c haproxy haproxy
حالا یک سرویس در مسیر زیر تعریف کنید :
/etc/systemd/system/haproxy-1.9.7.service
با مقدار زیر :
[Unit] Description=HAProxy 1.9.7 After=syslog.target network.target [Service] Type=notify EnvironmentFile=/etc/sysconfig/haproxy-1.9.7 ExecStart=/opt/haproxy-1.9.7/sbin/haproxy -f $CONFIG_FILE -p $PID_FILE $CLI_OPTIONS ExecReload=/bin/kill -USR2 $MAINPID ExecStop=/bin/kill -USR1 $MAINPID [Install] WantedBy=multi-user.target
و سپس فایل زیر را بسازید :
/etc/sysconfig/haproxy-1.9.7
با مقدار:
# Command line options to pass to HAProxy at startup # The default is: #CLI_OPTIONS="-Ws" CLI_OPTIONS="-Ws" # Specify an alternate configuration file. The default is: #CONFIG_FILE=/etc/haproxy/haproxy-1.9.7.conf CONFIG_FILE=/etc/haproxy/haproxy-1.9.7.conf # File used to track process IDs. The default is: #PID_FILE=/var/run/haproxy-1.9.7.pid PID_FILE=/var/run/haproxy-1.9.7.pid
و حالا Daemon را ریلود کنید :
systemctl daemon-reload
کانفیگ
برای کانفینگ کردن Ha Proxy فایل کانفیگ را در مسیر زیر باز کنید:
/etc/haproxy/haproxy-1.9.7.conf
برای شروع با مقادیر زیر :
global daemon maxconn 256 user haproxy group haproxy chroot /var/lib/haproxy defaults mode http timeout connect 5000ms timeout client 50000ms timeout server 50000ms frontend http bind *:8000 default_backend servers backend servers server server 127.0.0.1:81
در فایل کانفیگ بالا ، ۴ قسمت اصلی وجود دارد که عبارتند از :
- global تنظیمات عمومی سرور در این قسمت تعریف شده است. برای مثال دیمن بودن سرور و کاربر و گروه کاربری سرور ، همچنین یک chroot در فولدر haproxy نیز انجام شده است.
- defaults تنظیمات پیشفرض سرور از جمله تایم اوت شدن سرور ها و تایم اوت مشتری و …
- frontend http تنظیمات سرور ha proxy ، مثل بایند پورت و گروه سرورهای پیش فرض
- backend server تنظیمات سرور های بک اند ( مثلا آدرس سرور های php یا node یا … ) که الگوریتم پیش فرض آن Round Robin است، در این قسمت لیست سرور ها رو (هر سرور در یک خط) وارد کنید.
بالانس کردن درخواست ها در HA Proxy
برای اجرا کردن سرور ، سرویس مربوطه رو اجرا میکنیم :
systemctl start haproxy-1.9.7.service
حالا باید شما در آدرس :8000 سیستم به آدرس آیپی هایی که در قسمت backend وارد کرده اید دسترسی داشته باشید.
برای اینکه ha proxy به صورت پیش فرض هنگام بوت شدن سیستم عامل اجرا شود از دستور زیر استفاده کنید :
systemctl enable haproxy-1.9.7
پیشنهاد میکنم مقاله ی کانفیگ کردن SSL برروی Ha Proxy را از دست ندهید. و از این به بعد در صورت امکان با بالانس کردن درخواست ها در HA Proxy بار را بین سرور ها تقسیم کنید.