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

Материал из megapuper
Перейти к: навигация, поиск
(Полностью удалено содержимое страницы)
(Метка: очистка)
 
(не показано 28 промежуточных версий этого же участника)
Строка 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 socket /run/haproxy/admin.sock mode 660 level admin
 
        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_frontend
 
        bind *:80
 
        mode http
 
        log global
 
        bind    *:1937 #for stats page
 
        stats enable
 
        stats uri /stats
 
        stats hide-version
 
 
acl homepage hdr(host) -i homepage.ru
 
 
use_backend homepage_back if homepage
 
 
backend homepage_back
 
        balance roundrobin
 
        server  192.168.150.54:80 check
 
 
 
'''Алгоритмы балансировки нагрузки'''<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