Высокая доступность Trino Coordinator

Сервис Trino поддерживает режим высокой доступности (High Availability, HA), при котором возможно использование нескольких компонентов Trino Coordinator. Если один Trino Coordinator становится недоступным, резервные Trino Coordinator включаются в работу, не прерывая работу Trino-кластера.

Компонент Haproxy Trino

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

ВАЖНО
  • При подключении к Trino-сервису в режиме HA клиент Trino (Trino CLI, JDBC или браузер) должен подключаться к компоненту Haproxy Trino, а не напрямую к Trino Coordinator. Актуальная ссылка на веб-интерфейс и строка подключения JDBC доступны в ADCM (Clusters → <ADH_cluster> → Services → Trino → Info).

  • Компоненты Haproxy Trino и Trino Coordinator необходимо устанавливать на разные хосты во избежание конфликта портов.

Кластер ADH может содержать один или несколько компонентов Haproxy Trino. Установка нескольких компонентов Haproxy Trino может использоваться для реализации полноценного режима высокой доступности на сетевом уровне.

Настройка Haproxy Trino

При запуске сервиса Trino в режиме HA ADCM автоматически настраивает компонент Haproxy Trino для маршрутизации входящих запросов к компонентам Trino Coordinator, не требуя каких-либо ручных настроек. Дополнительно вы можете настроить поведение Haproxy Trino, как описано далее.

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

Пример haproxy-trino.cfg

 

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    log /dev/log    local0
    log 127.0.0.1:514  local0

    chroot      /var/lib/adh-haproxy/trino
    maxconn     1024
    user        haproxy
    group       haproxy
    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 trino_http_in
    bind *:18188
    default_backend trino_http_servers

backend trino_http_servers
    balance first

    server trino-coordinator0 ka-adh-1.ru-central1.internal:18188 check inter 1s fall 2 rise 5
    server trino-coordinator1 ka-adh-3.ru-central1.internal:18188 check inter 1s fall 2 rise 5 backup

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

Ниже представлен дефолтный шаблон haproxy-trino.cfg с комментариями к основным блокам настроек.

{% set ssl_sert = '' %}
{%- if trino_ssl_enable -%}
    {% set ssl_sert = haproxy_conf_ssl_vars %}
{% endif %}
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global (1)
    log /dev/log    local0
    log 127.0.0.1:514  local0

    chroot      /var/lib/adh-haproxy/trino
    maxconn     1024
    user        haproxy
    group       haproxy
    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 {{ ssl_sert }}
    stats enable
    stats uri /

frontend trino_http_in (4)
    bind *:{{ roles_trino_vars_component_ports['haproxy']['web'] }} {{ ssl_sert }}
    default_backend trino_http_servers

backend trino_http_servers (5)
    balance first

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

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

Логирование

По умолчанию компонент Haproxy Trino логирует собственную активность и сохраняет логи в директории /var/log/adh-haproxy/. Настройки логирования указываются в haproxy-trino.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 Trino имеет соответствующие настройки для rsyslog/syslog-ng в ADCM (/etc/syslog-ng/conf.d/haproxy-trino.conf, /etc/rsyslog.d/haproxy-trino.conf). С их помощью можно изменить шаблоны лог-сообщений, фильтры, расположение лог-файлов и так далее.

Статистика Haproxy Trino

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

Статистика Haproxy Trino
Статистика Haproxy Trino
Статистика Haproxy Trino
Статистика Haproxy Trino

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

  • Если кластер керберизирован, для прямого подключения к Trino Coordinator через консольный Trino-клиент необходимо указать имя хоста Trino Coordinator в параметре krb5-service-principal-pattern, например:

    krb5-service-principal-pattern=HTTP@ka-adh-1.ru-central1.internal

    Для JDBC используйте параметр:

    KerberosServicePrincipalPattern=HTTP@ka-adh-1.ru-central1.internal
  • Прямое подключение к веб-интерфейсу Trino Coordinator через браузер (Chrome, Firefox) или cURL не поддерживается.

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