Как распределять нагрузку с помощью HAProxy
Назначение документа
HAProxy – программное обеспечение с открытым исходным кодом, которое обеспечивает высокодоступный балансировщик нагрузки и прокси-сервер для приложений на основе TCP и HTTP, распределяющих запросы между несколькими серверами.
В документе описано как распределять нагрузку на Почту с помощью HAProxy.
Установка и запуск HAProxy
HAProxy нужно установить и запустить на отдельном сервере, то есть на сервере не должны быть запущены сервисы Почты. Чтобы установить и запустить HAProxy для ОС Astra Linux:
-
Установите пакет haproxy:
-
Разрешите автозапуск HAProxy:
-
Запустите сервис:
Настройка HAProxy
При балансировке нагрузки через HAProxy нужно настроить DNS-записи на сервер с HAProxy. Рассмотрим установку Почты на 8 машин, ниже представлена схема работы при балансировке через HAProxy:
Ниже вы найдете пример конфигурационного файла. Этот пример можно взять за основу конфигурации под вашу инсталляцию. В конфигурационном файле объявляются IP-адреса backend'ов, с которыми будет взаимодействовать HAProxy:
backend be_VK_pop3
mode tcp
balance source
server fe01 *.*.*.*:110 maxconn 10000
server fe02 *.*.*.*:110 maxconn 10000
В строках server fe01 *.*.*.*:110 maxconn 10000
вместо *.*.*.*
нужно передать IP-адреса машин, отведенных под фронт.
Для проверки состояния сервисов веб-доступа в систему вы можете воспользоваться ссылкой https://ip-address
, где ip-address - это адреса фронтов Почты. В зависимости от ответа необходимо выбирать доступный сервер.
Пример конфигурационного файла
global
maxconn 100000
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
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
defaults
log global
mode http
option httplog
option dontlognull
option forwardfor
retries 3
timeout connect 5s
timeout http-keep-alive 1s
timeout http-request 15s
timeout queue 30s
timeout client 300s
timeout server 300s
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
listen stats
bind :1111
mode http
option forwardfor
option httpclose
stats enable
stats uri /
stats refresh 5s
stats show-legends
stats realm Haproxy\ Statistics
stats auth admin:1password2$
frontend fe_VK-http
mode tcp
bind *:80
use_backend be_VK_http
frontend fe_VK_https
mode tcp
bind *:443
use_backend be_VK_https
frontend fe_VK-pop3
mode tcp
option tcplog
bind *:110
use_backend be_VK_pop3
frontend fe_VK-pop3s
mode tcp
option tcplog
bind *:995
use_backend be_VK_pop3s
frontend fe_VK-imap4
mode tcp
option tcplog
bind *:143
use_backend be_VK_imap4
frontend fe_VK-imap4s
mode tcp
option tcplog
bind *:993
use_backend be_VK_imap4s
frontend fe_VK-smtp
mode tcp
option tcplog
bind *:25
use_backend be_VK_smtp
frontend fe_VK-smtp1025
mode tcp
option tcplog
bind *:1025
use_backend be_VK_smtp
frontend fe_VK-smtp465
mode tcp
option tcplog
bind *:465
use_backend be_VK_smtp465
backend be_VK_https
mode tcp
balance source
server fe01 *.*.*.*:443 maxconn 10000
server fe02 *.*.*.*:443 maxconn 10000
backend be_VK_http
mode tcp
balance source
backend be_VK_pop3
mode tcp
balance source
server fe01 *.*.*.*:110 maxconn 10000
server fe02 *.*.*.*:110 maxconn 10000
backend be_VK_pop3s
mode tcp
balance source
server fe01 *.*.*.*:995 maxconn 10000
server fe02 *.*.*.*:995 maxconn 10000
backend be_VK_imap4
mode tcp
balance source
server fe01 *.*.*.*:143 maxconn 10000
server fe02 *.*.*.*:143 maxconn 10000
backend be_VK_imap4s
mode tcp
balance source
server fe01 *.*.*.*:993 maxconn 10000
server fe02 *.*.*.*:993 maxconn 10000
backend be_VK_smtp
mode tcp
balance source
server fe01 *.*.*.*:25 maxconn 10000
server fe02 *.*.*.*:25 maxconn 10000
backend be_VK_smtp1025
mode tcp
balance source
server fe01 *.*.*.*:1025 maxconn 10000
server fe02 *.*.*.*:1025 maxconn 10000
backend be_VK_smtp465
mode tcp
balance source
server fe01 *.*.*.*:465 maxconn 10000
server fe02 *.*.*.*:465 maxconn 10000