Краткая инструкция по запуску балансировщика нагрузки HAProxy на ОС FreeBSD 13.1.
В первую очередь установим пакеты haproxy и haproxy_lua
# pkg install haproxy haproxy_lua
Затем откроем файл /etc/rc.conf
# vi /etc/rc.conf
и добавим в него такую строку:
haproxy_enable="YES"
Теперь создадим файл конфигурации /usr/local/etc/haproxy.conf и откроем его
# touch /usr/local/etc/haproxy.conf # vi /usr/local/etc/haproxy.conf
и впишем в него:
global log 127.0.0.1 local0 log 127.0.0.1 local1 notice maxconn 4096 daemon defaults log global mode http option httplog option dontlognull option forwardfor option http-server-close option httpclose timeout server 86400000 timeout client 86400000 timeout connect 5000 frontend fvm50 bind *:80 use_backend fvm50_back frontend fvm bind *:8080 use_backend fvm_back backend fvm50_back balance roundrobin server dvm31 192.168.1.31:80 server dvm32 192.168.1.32:80 backend fvm_back server fvm 192.168.1.20:80
Теперь подробнее о нём
У нас имеются 4 машины
- две — с веб-сервером nginx: dvm31 с IP 192.168.1.31 и dvm32 с IP 192.168.1.32, обе — с открытым портом 80/tcp (это указано в параметре bind);
- одна машина — это сервер с HAProxy — fvm50, например, с IP 192.168.1.50;
- и ещё одна — тоже, с веб-сервером nginx или apache — fvm с IP 192.168.1.20, она также использует порт 80/tcp, но обратиться к этой машине возможно только через порт 8080/tcp (это также указано в параметре bind).
В данном конфиге запросы поступают равномерно по всем перечисленным серверам, но можно распределить их по количеству запросов, добавив параметр weight, например, каждый 10-й запрос будет отправляться на сервер dvm32:
server dvm31 192.168.1.31:80 weight 90 server dvm32 192.168.1.32:80 weight 10
После этого запустим службу haproxy
# service haproxy start
На другой машине в сети в браузере вводим http://ИмяХоста/ или http://IP_сервера/ (IP сервера в данном случае 192.168.1.50) и подключимся к веб-серверам 192.168.1.31 и 192.168.1.32.
У HAProxy есть также множество других фишек, подходящих под определённые задачи. Все они описаны в документации и различных мануалах, которые можно найти на просторах всемирной паутины.