Балансировка нагрузки в HUE

Сервис HUE позволяет балансировать поступающую нагрузку, запуская прокси-сервер, а за ним — несколько серверов HUE.

Компонент Haproxy Hue

Haproxy Hue переключается между серверами HUE и выполняет роль обратного прокси (reverse proxy) для клиентов HUE в ADH. Этот компонент основан на проекте HAProxy и используется для балансировки нагрузки, маршрутизации HTTP/TCP-трафика между серверами и масштабирования сервиса HUE.

ВАЖНО
  • Компоненты Haproxy Hue и HUE Server должны быть установлены на разных хостах, иначе использование прокси будет иметь мало смысла и ADCM при установке выдаст ошибку.

  • Конфигурация с Haproxy Hue и одним или несколькими серверами HUE не обеспечивает полноценный режим высокой доступности сервиса HUE: запросы к серверу HUE, ставшему недоступным, будут перенаправлены на другой сервер, однако сам Haproxy Hue становится единой точкой отказа сервиса HUE.

Настройка Haproxy Hue

При запуске сервиса HUE с несколькими серверами ADCM автоматически настраивает компонент Haproxy Hue для маршрутизации входящих запросов к серверам HUE, поэтому ручная настройка сервиса не требуется. Но вы можете дополнительно настроить поведение Haproxy Hue, как описано ниже.

Основным файлом настроек для Haproxy Hue является /etc/adh-haproxy/conf/haproxy-hue.cfg. Это файл конфигурации HAProxy, расположенный на хостах ADH, где установлен компонент Haproxy Hue.

Пример haproxy-hue.cfg
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    log /dev/log    local0
    log 127.0.0.1:514  local0

    chroot      /var/lib/adh-haproxy/hue
    maxconn     1024
    user        hue
    group       hadoop
    daemon

    ssl-server-verify none

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s

listen stats
    bind *:7001
    stats enable
    stats uri /

frontend hue_http_in
    bind *:8000
    default_backend hue_http_servers

backend hue_http_servers
    balance first

    server hue-server-1 test-3.ru-central1.internal:8000 check inter 1s fall 2 rise 5
bdo@test-2:/etc/adh-haproxy/conf$ cat haproxy-hue.cfg
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    log /dev/log    local0
    log 127.0.0.1:514  local0

    chroot      /var/lib/adh-haproxy/hue
    maxconn     1024
    user        hue
    group       hadoop
    daemon

    ssl-server-verify none

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s

listen stats
    bind *:7001
    stats enable
    stats uri /

frontend hue_http_in
    bind *:8000
    default_backend hue_http_servers

backend hue_http_servers
    balance first

    server hue-server-1 test-1.ru-central1.internal:8000 check inter 1s fall 2 rise 5
    server hue-server-2 test-3.ru-central1.internal:8000 check inter 1s fall 2 rise 5

Данный файл не следует редактировать вручную — вместо этого используйте Jinja-шаблон в ADCM (Clusters → <ADHclusterName> → Services → HUE → Components → Haproxy Hue → Configuration). При каждом запуске сервиса HUE файл haproxy-hue.cfg генерируется на основе этого шаблона.

Ниже приведен шаблон haproxy-hue.cfg по умолчанию с комментариями к основным блокам настроек.

{% set tls_haproxy_pem = '' %}
{%- if hue_ssl_enable -%}
    {% set service_ssl = haproxy_conf_ssl_vars | default('', true) | trim %}
    {% set cluster_ssl = cluster.config.ssl_default_config.tls_haproxy_pem | default('', true) | trim %}
    {% if service_ssl %}
        {% set tls_haproxy_pem = 'ssl crt ' ~ service_ssl %}
    {% elif cluster_ssl %}
        {% set tls_haproxy_pem = 'ssl crt ' ~ cluster_ssl %}
    {% endif %}
{% endif %}
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global (1)
    log /dev/log    local0
    log 127.0.0.1:514  local0

    chroot      /var/lib/adh-haproxy/hue
    maxconn     1024
    user        hue
    group       hadoop
    daemon

    ssl-server-verify none

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults (2)
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s

listen stats (3)
    bind *:7001 {{ tls_haproxy_pem }}
    stats enable
    stats uri /

frontend hue_http_in (4)
    bind *:{{ roles_hue_vars_component_ports['haproxy_hue']['web'] }} {{ tls_haproxy_pem }}
    default_backend hue_http_servers

backend hue_http_servers (5)
    balance first

{% for host in haproxy_hue_conf_hosts %}
    {{ host }}
{% endfor %}
1 Глобальные параметры HAProxy: параметры логирования, изменения корневой директории, проверка сертификатов и прочие.
2 Параметры HAProxy по умолчанию: режим работы, логирование и различные тайм-ауты.
3 Активирует сбор статистики и мониторинг HAProxy в реальном времени. Определяет порт и URI эндпойнта статистики (по умолчанию http://<Haproxy_Hue_host>:7001/).
4 Список прослушиваемых сокетов для входящих соединений.
5 Список серверов HUE, на которые Haproxy Hue будет перенаправлять входящие запросы. В этом шаблоне цикл {% for host in …​ %} формирует список серверов HUE, доступных в ADH-кластере. Параметр balance first указывает, что первый сервер используется в качестве активного (основного) сервер HUE, а остальные серверы используются в качестве резервных, если первый становится недоступным.

Подробное описание настроек HAProxy доступно в справочной документации HAProxy.

Логирование

По умолчанию компонент Haproxy Hue логирует собственную активность и сохраняет логи в директории /var/log/adh-haproxy/. Настройки логирования указываются в haproxy-hue.cfg. Конфигурация по умолчанию обеспечивает двойное логирование, а именно:

global
    log /dev/log    local0 (1)
    log 127.0.0.1:514  local0 (2)
1 Направляет логи в локальный сокет syslog (/dev/log) для обработки системным syslog-демоном.
2 Направляет логи syslog-демону, слушающему порт 514 на localhost (например, rsyslog или syslog-ng). По умолчанию rsyslog/syslog-ng сохраняют лог-файлы в /var/log/adh-haproxy/.
РЕКОМЕНДАЦИЯ
Компонент Haproxy Hue имеет соответствующие настройки для rsyslog/syslog-ng в ADCM (/etc/syslog-ng/conf.d/haproxy-hue.conf, /etc/rsyslog.d/haproxy-hue.conf). С их помощью можно изменить шаблоны сообщений логов, фильтры, расположение лог-файлов и так далее.

Статистика Haproxy Hue

Haproxy Hue предоставляет статистику о своей работе. Сбор статистики включен по умолчанию (блок listen stats в haproxy-hue.cfg) и данные доступны по следующему эндпойнту: http://<Haproxy_Hue_host>:7001/.

Статистика Haproxy Hue
Статистика Haproxy Hue
Статистика Haproxy Hue
Статистика Haproxy Hue

Особенности Kerberos

В керберизированном кластере необходимо указать принципалы хостов, на которых установлены Haproxy Hue, в keytab-файлах серверов HUE.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней