Настройка HAProxy
HAProxy – программный продукт, который обеспечивает высокую доступность и балансировку нагрузки для TCP- и HTTP-приложений. Это достигается с помощью распределения входящих запросов на несколько обслуживающих серверов.
Примечание. Настройка проверок работоспособности (HealthCheck) поддерживается на HAProxy 2.2 и выше. Далее приведен порядок настройки HAProxy 2.2. Состав и названия параметров могут отличаться в зависимости от используемой версии.
Чтобы установить и настроить HAProxy:
1.Установите HAProxy. Для этого выполните команду:
sudo apt-get install haproxy
2.Настройте работу HAProxy. Создайте резервную копию стандартного конфигурационного файла HAProxy /etc/haproxy/haproxy.cfg.
3.Добавьте секции frontend и backend и задайте в них минимально необходимые настройки:
•внешний адрес интерфейса, на который приходят запросы от клиентов (frontend);
•адреса серверов, на которые перенаправляются запросы;
•режим перенаправления трафика HTTP;
•расположение сертификата, если используется протокол HTTPS;
•использование механизмов привязки трафика к веб-серверу, например, на основании IP-адреса клиента.
Задайте также настройки:
•PATH_TO_PEM_CERT – путь к SSL-сертификату в формате PEM.
•LOGIN, PASSWORD – имя и пароль пользователя для входа на страницу статистики HAProxy. Имя и пароль ранее не использовались, их нужно задать на этом этапе.
Подробнее пример конфигурационного файла см. ниже.
4.Если развернуто несколько экземпляров веб-сервера и сервисов Directum RX, то для отказоустойчивой работы рекомендуется настроить обратный прокси-сервер HAProxy так, чтобы он проверял работоспособность экземпляров веб-сервера и следующих сервисов:
•KeyDerivationService – сервис ключей;
•LogService – сервис логирования;
•IntegrationService – сервис интеграции;
•PreviewStorage – сервис хранения файлов предпросмотра;
•StorageService – сервис хранилищ;
•SungeroWebClient – сервис, отвечающий за аутентификацию в системе.
Если хотя бы одна проверка работоспособности (HealthCheck) вернет статус unhealthy, то экземпляр сервиса исключается из балансировки до стабилизации работы. Запросы обрабатываются другими работающими экземплярами сервиса.
Задайте настройки в том же конфигурационном файле /etc/haproxy/haproxy.cfg:
•убедитесь, что в секции frontend есть настройка блокировки URL проверки работоспособности. Это нужно, чтобы URL не был доступен клиенту из внешней сети. Если настройки нет, то добавьте ее:
# disable healthcheck url
acl health_page path_beg,url_dec -i /Client/api/health
http-request deny if health_page
•для сервисов добавьте секцию backend <имя сервиса>-nodes-backend. Например, для проверки статуса сервиса интеграции она выглядит следующим образом:
backend integration-nodes-backend
option httpchk
http-check send meth GET uri /integration/health hdr host <HOST>
balance roundrobin
server node01 <IP>:<PORT> check
server node02 <IP>:<PORT> check
В примере вместо значений, выделенных жирным шрифтом, укажите свои значения. В параметре HOST укажите полное доменное имя сервера (FQDN), на котором развернут сервис или веб-сервер. Для остальных сервисов секция заполняется аналогично.
5.Перезапустите HAProxy:
sudo systemctl haproxy restart
Чтобы управлять HAProxy используйте команды:
•для перезапуска:
sudo systemctl haproxy restart
•для остановки:
sudo systemctl haproxy stop
Пример конфигурационного файла
Далее в примере вместо значений, выделенных жирным шрифтом, укажите свои значения.
Предположим, следующее:
•система Directum RX должна быть развернута по адресу https://rx.example.com/client/;
•для отказоустойчивости развернуто два узла с IP-адресами 192.168.1.30 и 192.168.1.31;
•экземпляры сервиса ключей развернуты отдельно, в защищенном контуре, на узлах с адресами 192.168.1.40 и 192.168.1.41.
В этом случае пример конфигурационного файла будет следующий:
global
ssl-default-bind-options ssl-min-ver TLSv1.2
defaults
mode http
timeout connect 5s
timeout client 2m
timeout server 15m
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
option httplog
default-server init-addr last,libc,none
retries 3
maxconn 4000
#log stdout len 4096 format raw local0 debug
log /dev/log local0 debug
frontend directumrx
bind *:80
http-request set-header X-Forwarded-Host %[req.hdr(host)]
http-request redirect code 301 prefix /Client if { path / }
bind *:443 ssl crt <PATH_TO_PEM_CERT>
redirect scheme https if !{ ssl_fc }
# disable healthcheck url
acl health_page path_beg,url_dec -i /Client/api/health
http-request deny if health_page
use_backend rx-nodes-api if { path_beg -i /Client/api/ }
use_backend client-host-nodes-backend if { path_beg -i /Client } ! { path_beg -i /Client/api/ }
use_backend keyderivation-nodes-backend if { path_beg -i /KeyDerivation }
use_backend logservice-nodes-backend if { path_beg -i /Log }
use_backend integration-nodes-backend if { path_beg -i /Integration }
use_backend preview-nodes-backend if { path_beg -i /Preview }
use_backend storage-nodes-backend if { path_beg -i /Storage }
default_backend rx-nodes-api
backend rx-nodes-api
option httpchk
http-check send meth GET uri /client/api/health hdr host rx.example.com
balance roundrobin
cookie SRVNAME insert
server rx1 192.168.1.30:443 check cookie rx1 ssl verify none
server rx2 192.168.1.31:443 check cookie rx2 ssl verify none
backend client-host-nodes-backend
option httpchk
http-check send meth GET uri /client/health hdr host rx.example.com
balance roundrobin
server rx1 192.168.1.30:443 check ssl verify none
server rx2 192.168.1.31:443 check ssl verify none
backend keyderivation-nodes-backend
option httpchk
http-check send meth GET uri /keyderivation/health hdr host rx.example.com
balance roundrobin
server rx1 192.168.1.40:443 check ssl verify none
server rx2 192.168.1.41:443 check ssl verify none
backend logservice-nodes-backend
option httpchk
http-check send meth GET uri /log/health hdr host rx.example.com
balance roundrobin
server rx1 192.168.1.30:443 check ssl verify none
server rx2 192.168.1.31:443 check ssl verify none
backend integration-nodes-backend
option httpchk
http-check send meth GET uri /integration/health hdr host rx.example.com
balance roundrobin
server rx1 192.168.1.30:443 check ssl verify none
server rx2 192.168.1.31:443 check ssl verify none
backend preview-nodes-backend
option httpchk
http-check send meth GET uri /preview/health hdr host rx.example.com
balance roundrobin
server rx1 192.168.1.30:443 check ssl verify none
server rx2 192.168.1.31:443 check ssl verify none
backend storage-nodes-backend
option httpchk
http-check send meth GET uri /storage/health hdr host rx.example.com
balance roundrobin
server rx1 192.168.1.30:443 check ssl verify none
server rx2 192.168.1.31:443 check ssl verify none
#+++++++++++++++STATS++++++++++++++++++++#
frontend stats
bind *:8080
stats enable
stats uri /stats
stats refresh 10s
stats show-node
stats auth <LOGIN>:<PASSWORD>
Важно. Если Directum RX обновлена с более ранних версий, в конфигурационном файле замените значение Client на drxweb.
Подробное описание параметров см. в документации HAProxy статью Configuration Manual.
Образец заполненного файла с актуальным составом сервисов и настроек можно посмотреть в файле haproxy_balancer.cfg.example.
Путь до файла: DirectumLauncher/etc/_builds/Platform/platform_plugin/haproxy_balancer.cfg.example.
Устранение неисправностей
После установки и настройки HAProxy рекомендуется отслеживать состояние работоспособности системы Directum RX некоторое время. Если при работе в системе у пользователей наблюдаются периодические зависания проводника, а в лог-файлах веб-сервиса или сервиса отчетов возникают ошибки соединения с HAProxy, выполните настройки:
1.Подключитесь к Directum RX напрямую без использования балансировщика HAProxy. Для этого исключите один узел кластера из балансировки, например, node01. В конфигурационном файле /etc/haproxy/haproxy.cfg в секции backend rx-nodes закомменируйте строку server <>:
backend rx-nodes
balance roundrobin
cookie SRVNAME insert
# server node01 <IP>:<PORT> cookie node01 ssl verify none
server node02 <IP>:<PORT> cookie node02 ssl verify none
Примените настройки HAProxy с помощью команды:
sudo systemctl reload haproxy
Затем подключитесь к node01, указав в браузере DNS-имя виртуальной машины или ее IP-адрес.
2.Проверьте, возникают ли ошибки в лог-файлах веб-сервера.
Если ошибки сохранились, то необходимо проанализировать лог-файлы веб-сервера и скорректировать настройки Directum RX.
Если ошибки прекратились, это значит, что на работоспособность системы влияет HAProxy. В этом случае рекомендуется запустить HAProxy в docker-контейнере и проверить работу системы.
3.После восстановления работоспособности системы Directum RX верните в схему балансировки исключенный узел кластера. Для этого раскомменируйте строку server <>.
Проверка работы HAProxy в docker-контейнере
1.Остановите службу HAProxy с помощью команды:
sudo systemctl stop haproxy
3.Получите образ HAProxy.
Если на компьютере есть доступ к сети Интернет, то образ можно скачать по команде:
docker pull haproxy
Если компьютер находится в закрытом контуре без доступа к сети Интернет, то распакуйте TAR-файл образа HAProxy из архива DockerImages.tar.gz, входит в комплект поставки Directum RX. Затем загрузите полученный образ в среду Docker, выполнив команду:
docker load -i <файл_образа_haproxy.tar>
4.Убедитесь, что образ HAProxy загружен. Для этого выполните команду:
docker images
Если образ загружен, то в колонке REPOSITORY отобразится его имя, а в колонке TAG – версия HAProxy.
5.Запустите контейнер с HAProxy.
Команда для запуска контейнера, полученного в сети Интернет:
docker run -d --name haproxy –p 80:80 –p 443:443 -v /etc/haproxy:/usr/local/etc/haproxy haproxy:latest
Команда для запуска контейнера, распакованного из архива DockerImages.tar.gz:
docker run -d --name haproxy -p 80:80 -p 443:443 -v /etc/haproxy:/usr/local/etc/haproxy <имя образа из колонки REPOSITORY>:<версия HAProxy из колонки TAG>
Пример:
docker run -d --name haproxy -p 80:80 -p 443:443 -v /etc/haproxy:/usr/local/etc/haproxy haproxy:2.2.6
6.Проверьте работоспособность системы Directum RX.
© Компания Directum, 2024 |