Основы работы с HAProxy и балансировкой нагрузки

  • Михаил
  • 12 мин. на прочтение
  • 175
  • 20 Jun 2022
  • 21 Nov 2022

https://www.dmosk.ru/miniinstruktions.php?mini=haproxy-centos7

HAProxy (High Availability Proxy) – это популярный открытый балансировщик нагрузки TCP/HTTP и прокси-сервер для систем Linux, Solaris и FreeBSD. Он позволяет улучшить производительность и ошибкоустойчивость серверного окружения путём распределения рабочей нагрузки между несколькими серверами (например, между веб-сервером, сервером баз данных и сервером приложений). HAProxy используют многие проекты с высокой нагрузкой: GitHub, Imgur, Instagram и Twitter.

Данная статья ознакомит вас с основными понятиями HAProxy и балансировки нагрузки. Также здесь вы найдёте примеры настроек и полезные советы, которые помогут вам повысить производительность и надёжность серверной среды.

 

sudo yum info 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
defaults
       log     global
       mode    http
       option  httplog
       option  dontlognull
       timeout connect 10s
       timeout client  60s
       timeout server  60s
       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 http_bind
       bind *:80
       mode tcp
       option tcplog
       default_backend router_http

frontend https_bind
       bind *:443
       mode tcp
       option tcplog
       default_backend router_https
backend router_http
       mode tcp
       server router_server router:80
backend router_https
       mode tcp
       server router_server router:443

 

 

frontend http-in 
    bind *:80 
    acl host_d1 hdr(host) -i d1.com 
    acl host_d2 hdr(host) -i d2.com 
    
    use_backend be_d1 if host_d1 
    use_backend be_d2 if host_d2 

backend be_d1 
    server D1M1 10.0.0.1:8080 
    server D1M2 10.0.0.2:8080 

backend be_d2 
    server D2M1 10.0.0.1:8080 
    server D2M2 10.0.0.2:8080 

 

Параметры конфигурационного файла haproxy.cfg

Рассмотрим основные примеры алгоритмов работы HaProxy:

  • roundrobin — алгоритм используемый по умолчанию, отправляет запросы на сервера по очереди. В нашем примере мы использовали именно такой метод;
  • leastconn – выбирает сервер с наименьшим количеством активных соединений. Рекомендуется применять на проектах, в которых сессии могут быть задействованы продолжительное время;
  • source – выбирает сервер по хешу, построенному на основе IP пользователей. В таком режиме работы один и тот же клиент будет обращаться всегда к одному серверу, если его IP остается неизменным;

Пройдем по некоторым параметрам в конфигурационном файле.

Блок global:

  • log — вести лог в /dev/log сохраняя в «объект» local0;
  • chroot — настройки безопасности, «запирающие» HAProxy в указанной директории;
  • maxconn — максимальное количество конкурирующих соединений на один процесс;
  • user — пользователь, от имени которого будет запущена программа;
  • group — группа пользователя, от имени которого будет запущена программа;
  • daemon — запуск процесса как демона.

Блок default. В данном блоке описываются параметры по умолчанию для всех других секций, которые следуют за ней:

  • log — указывает, в какой лог вести записи (global в данном случае означает, что используются параметры, заданные в секции global);
  • mode — устанавливает протокол взаимодействия, принимает одно из значений: tcp, http или health;
  • retries — количество попыток соединения с сервером в случае отказа;
  • option httplog — формат лога, в случае использования HAProxy для проксирования HTTP-запросов;
  • option redispatch — разрешает программе разорвать и переназначить сессию в случае отказа сервера;
  • contimeout — максимальное время ожидания успешного соединения с сервером.

Также есть большое количество параметров связанных с различными timeout.