HAProxy – программное обеспечение с открытым исходным кодом, которое обеспечивает высокодоступный балансировщик нагрузки и прокси-сервер для приложений на основе TCP и HTTP, распределяющих запросы между несколькими серверами.
В документе описано как распределять нагрузку на Почту с помощью HAProxy.
HAProxy нужно установить и запустить на отдельном сервере, то есть на сервере не должны быть запущены сервисы Почты. Чтобы установить и запустить HAProxy для ОС Astra Linux:
-
Установите пакет haproxy:
sudo apt install haproxy -
Разрешите автозапуск HAProxy:
systemctl enable haproxy -
Запустите сервис:
systemctl start haproxy
При балансировке нагрузки через HAProxy нужно настроить DNS-записи на сервер с HAProxy. Рассмотрим установку Почты на 8 машин, ниже представлена схема работы при балансировке через HAProxy:
По умолчанию конфигурационный файл находится по пути /etc/haproxy/haproxy.cfg. Ниже вы найдете пример конфигурационного файла. Этот пример можно взять за основу конфигурации под вашу инсталляцию. В конфигурационном файле объявляются IP-адреса backend'ов, с которыми будет взаимодействовать HAProxy:
backend be_VK_pop3mode tcpbalance sourceserver fe01 *.*.*.*:110 maxconn 10000server fe02 *.*.*.*:110 maxconn 10000http-request set-header X-REAL-IP %[src]
В строках server fe01 *.*.*.*:110 maxconn 10000 вместо *.*.*.* нужно передать IP-адреса машин, отведенных под фронт.
Для проверки состояния сервисов веб-доступа в систему вы можете воспользоваться ссылкой https://ip-address, где ip-address - это адреса фронтов Почты. В зависимости от ответа необходимо выбирать доступный сервер.
globalmaxconn 100000log /dev/log local0log /dev/log local1 noticechroot /var/lib/haproxystats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listenersstats timeout 30suser haproxygroup haproxydaemonca-base /etc/ssl/certscrt-base /etc/ssl/privatessl-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-SHA384ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-ticketsdefaultslog globalmode httpoption httplogoption dontlognulloption forwardforretries 3timeout connect 5stimeout http-keep-alive 1stimeout http-request 15stimeout queue 30stimeout client 300stimeout server 300serrorfile 400 /etc/haproxy/errors/400.httperrorfile 403 /etc/haproxy/errors/403.httperrorfile 408 /etc/haproxy/errors/408.httperrorfile 500 /etc/haproxy/errors/500.httperrorfile 502 /etc/haproxy/errors/502.httperrorfile 503 /etc/haproxy/errors/503.httperrorfile 504 /etc/haproxy/errors/504.httplisten statsbind :1111mode httpoption forwardforoption httpclosestats enablestats uri /stats refresh 5sstats show-legendsstats realm Haproxy\ Statisticsstats auth admin:1password2$frontend fe_VK-httpmode tcpbind *:80use_backend be_VK_httpfrontend fe_VK_httpsmode tcpbind *:443use_backend be_VK_httpsfrontend fe_VK-pop3mode tcpoption tcplogbind *:110use_backend be_VK_pop3frontend fe_VK-pop3smode tcpoption tcplogbind *:995use_backend be_VK_pop3sfrontend fe_VK-imap4mode tcpoption tcplogbind *:143use_backend be_VK_imap4frontend fe_VK-imap4smode tcpoption tcplogbind *:993use_backend be_VK_imap4sfrontend fe_VK-smtpmode tcpoption tcplogbind *:25use_backend be_VK_smtpfrontend fe_VK-smtp1025mode tcpoption tcplogbind *:1025use_backend be_VK_smtpfrontend fe_VK-smtp465mode tcpoption tcplogbind *:465use_backend be_VK_smtp465backend be_VK_httpsmode tcpbalance sourceserver fe01 *.*.*.*:443 maxconn 10000server fe02 *.*.*.*:443 maxconn 10000http-request set-header X-REAL-IP %[src]backend be_VK_httpmode tcpbalance sourcehttp-request set-header X-REAL-IP %[src]backend be_VK_pop3mode tcpbalance sourceserver fe01 *.*.*.*:110 maxconn 10000server fe02 *.*.*.*:110 maxconn 10000http-request set-header X-REAL-IP %[src]backend be_VK_pop3smode tcpbalance sourceserver fe01 *.*.*.*:995 maxconn 10000server fe02 *.*.*.*:995 maxconn 10000http-request set-header X-REAL-IP %[src]backend be_VK_imap4mode tcpbalance sourceserver fe01 *.*.*.*:143 maxconn 10000server fe02 *.*.*.*:143 maxconn 10000http-request set-header X-REAL-IP %[src]backend be_VK_imap4smode tcpbalance sourceserver fe01 *.*.*.*:993 maxconn 10000server fe02 *.*.*.*:993 maxconn 10000http-request set-header X-REAL-IP %[src]backend be_VK_smtpmode tcpbalance sourceserver fe01 *.*.*.*:25 maxconn 10000server fe02 *.*.*.*:25 maxconn 10000http-request set-header X-REAL-IP %[src]backend be_VK_smtp1025mode tcpbalance sourceserver fe01 *.*.*.*:1025 maxconn 10000server fe02 *.*.*.*:1025 maxconn 10000http-request set-header X-REAL-IP %[src]backend be_VK_smtp465mode tcpbalance sourceserver fe01 *.*.*.*:465 maxconn 10000server fe02 *.*.*.*:465 maxconn 10000http-request set-header X-REAL-IP %[src]
Технический писатель: Груздев Никита