Высокая доступность 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-трафика между серверами.
| ВАЖНО 
 | 
Кластер 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.
 
#---------------------------------------------------------------------
# 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/.
 
 
Особенности 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 не поддерживается.