Установка HAProxy — различия между версиями

Материал из megapuper
Перейти к: навигация, поиск
(Полностью удалено содержимое страницы)
(Метка: очистка)
 
(не показано 15 промежуточных версий этого же участника)
Строка 1: Строка 1:
Установку будем проводить на Debian 11. Если текущая версия устраивает, то просто <code>apt install haproxy</code>. Если требуется последняя, то подключаем репозиторий.
 
  
 
Добавляем ключ репозитория
 
curl https://haproxy.debian.net/bernat.debian.org.gpg | gpg --dearmor > /usr/share/keyrings/haproxy.debian.net.gpg
 
 
 
Добавляем сам репозиторий
 
echo deb "[signed-by=/usr/share/keyrings/haproxy.debian.net.gpg]" http://haproxy.debian.net bullseye-backports-2.6 main > /etc/apt/sources.list.d/haproxy.list
 
apt update
 
 
 
Ставим HAProxy
 
apt-get install haproxy=2.6.\*
 
 
 
Конфигурирование HAProxy выполняется в файле /etc/haproxy/haproxy.cfg. Все основные настройки находятся в 4-х секциях:
 
 
* '''global.''' Глобальные настройки, распространяемые на все публикации.<br>
 
*  '''defaults.''' Настройки, применяемые по умолчанию, если они не указаны явно в публикации.<br>
 
*  '''frontend.''' Правила обработки запросов, приходящих на сервер и передачи этих запросов серверам backend. Может быть несколько.<br>
 
*  '''backend.''' Настройка конечных серверов, которые обрабатывают запросы и возвращают результаты. Может быть несколько.<br>
 
Также есть возможность создать дополнительные секции, например '''userlist.'''
 
 
 
Простейший конфиг будет выглядеть примерно так
 
global
 
        log /dev/log    local0
 
        log /dev/log    local1 notice
 
        log 127.0.0.1  local2
 
        chroot /var/lib/haproxy
 
        stats timeout 30s
 
        user haproxy
 
        group haproxy
 
        daemon
 
 
defaults
 
        log    global
 
        mode    http
 
        option  httplog
 
        option  dontlognull
 
        timeout connect 5000
 
        timeout client  50000
 
        timeout server  50000
 
 
frontend http_front
 
        bind *:80
 
        mode http
 
        log global
 
        bind  *:1937 #for stats page
 
        stats enable
 
        stats uri /stats
 
        stats hide-version
 
 
        log-format %ci\ %ft\ %b/%s\ %ST\ %B\ %CC\ \%CS\ %tsc\ %ac/%fc/%bc/%sc/%rc\ %bq\ %hr\ %hs\ %{+Q}r
 
 
 
        monitor-uri /monitoruri
 
 
        default_backend homepage_back
 
 
backend homepage_back
 
        balance roundrobin
 
        server 192.168.150.54:80 check
 
        server 192.168.150.55:80 check
 
Конфиг определяет балансировщик нагрузки транспортного уровня (layer 4) с внешним именем http_front, прослушивающий порт 80, который затем направляет трафик к бэкенду по умолчанию с именем homepage_back, состоящий из двух веб-серверов. Трафик на них распределяется по очереди. По /stats подключается страница статистики.
 
 
 
'''Настройка балансировки нагрузки на прикладном уровне(layer 7)'''
 
 
Полезно, когда части веб-приложения расположены на разных хостах. Например, основная страница на одном хосте, а блог на другом. Это может быть достигнуто путем регулирования передачи соединения, например, по URL.
 
 
frontend http_front
 
        bind *:80
 
        stats uri /ыtats
 
        acl url_blog path_beg /blog
 
        use_backend blog_back if url_blog
 
        default_backend homepage_back
 
 
backend homepage_back
 
      balance roundrobin
 
      server 192.168.150.54:80 check
 
      server 192.168.150.55:80 check
 
 
backend blog_back
 
      server 192.168.150.56:80 check
 
Фронтенд объявляет правило ACL с именем url_blog, которое применяется ко всем соединениям с путями, начинающимися с /blog. Use_backend определяет, что соединения, соответствующие условию url_blog, должны обслуживаться бэкендом с именем blog_back, а все остальные запросы обрабатываются бэкендом по умолчанию.
 
 
 
'''Алгоритмы балансировки нагрузки'''<br>
 
 
* '''Roundrobin:''' каждый сервер используется по очереди в соответствии со своим весом. Это самый плавный и честный алгоритм, когда время обработки серверами остается равномерно распределенным. Этот алгоритм является динамическим, что позволяет регулировать вес сервера на лету.<br>
 
* '''Leastconn:''' выбирается сервер с наименьшим количеством соединений. Циклический перебор выполняется между серверами с одинаковой нагрузкой. Использование этого алгоритма рекомендуется для длинных сеансов, таких как LDAP, SQL, TSE и т.д., но он не очень подходит для коротких сеансов, таких как HTTP.<br>
 
* '''First:''' первый сервер с доступными слотами для подключения получает соединение. Серверы выбираются от самого низкого числового идентификатора до самого высокого, который по умолчанию соответствует положению сервера в ферме. Как только сервер достигает значения maxconn, используется следующий сервер.<br>
 
* '''Source:''' IP-адрес источника хешируется и делится на общий вес запущенных серверов, чтобы определить, какой сервер будет получать запрос. Таким образом, один и тот же IP-адрес клиента будет всегда доставаться одному и тому же серверу, в то время как серверы остаются неизменными.
 
 
 
Примеры форматов для логов
 
frontend tcp_frontend
 
log-format "%ci:%cp [%t] %ft %b/%s %Tw/%Tc/%Tt %B %ts %ac/%fc/%bc/%sc/%rc %sq/%bq"
 
 
frontend engy_frontend
 
log-format %ci:%cp\ [%t]\ %ft\ %b/%s\ %Tq/%Tw/%Tc/%Tr/%Tt\ %ST\ %B\ %CC\ %CS\ %tsc\ %ac/%fc/%bc/%sc/%rc\ %sq/%bq\ %hr\ %hs\ {valid:%[ssl_c_verify],User:%{+Q}[ssl_c_s_dn(cn)]}
 
 
frontend https_frontend
 
log-format %ci:%cp\ [%t]\ %ft\ %b/%s\ %ST\ %B\ %CC\ %CS\ %tsc\ %ac/%fc/%bc/%sc/%rc\ %sq/%bq\ %hr\ %hs\ {valid:%[ssl_c_verify],User:%{+Q}[ssl_c_s_dn(cn)]}
 
 
frontend http_frontend
 
log-format %ci\ %ft\ %b/%s\ %ST\ %B\ %CC\ \%CS\ %tsc\ %ac/%fc/%bc/%sc/%rc\ %bq\ %hr\ %hs\ %{+Q}r
 
 
frontend mail_frontend
 
log-format "%ci:%cp [%t] %ft %b/%s %Tw/%Tc/%Tt %B %ts %ac/%fc/%bc/%sc/%rc %sq/%bq"
 
 
frontend k8s_api_frontend
 
log-format "%ci:%cp [%t] %ft %b/%s %Tw/%Tc/%Tt %B %ts %ac/%fc/%bc/%sc/%rc %sq/%bq"
 

Текущая версия на 20:34, 2 мая 2023