Повышение устойчивости обработки запросов#
Вы можете настроить Trino для большей устойчивости к сбоям во время обработки запросов, включив отказоустойчивое выполнение (fault-tolerant execution). Это позволяет Trino обрабатывать более крупные запросы, такие как batch-операции, без сбоев выполнения при отказах worker-узлов.
При включённой настройке кластер Trino буферизует данные, используемые worker-узлами во время обработки запросов. Если выполнение на одном из worker-узлов завершается с ошибкой по любой причине — например, из-за сетевого сбоя или нехватки ресурсов — координатор переназначает обработку сбойного фрагмента работы другому worker-узлу. Это позволяет продолжить обработку запроса, используя буферизованные данные.
Архитектура#
Координатор использует настроенный сервис exchange manager, который буферизует данные во время выполнения запроса во внешнем хранилище, например в объектном хранилище S3. Worker-узлы отправляют данные в этот буфер по мере выполнения своих задач.
Лучшие практики и особенности#
Отказоустойчивый кластер лучше всего подходит для выполнения крупных batch-запросов. Пользователи могут столкнуться с задержками или похожим поведением, если выполнять большое количество коротких запросов в таком кластере. Поэтому рекомендуется использовать отдельный отказоустойчивый кластер для batch-операций, отдельно от кластера, предназначенного для обработки большого количества запросов.
Каталоги, использующие следующие connectors, поддерживают отказоустойчивое выполнение операций чтения и записи:
Каталоги, использующие другие connectors, поддерживают только отказоустойчивое выполнение операций чтения. При включении fault-tolerant execution в кластере операции записи будут завершаться ошибкой для всех каталогов, которые не поддерживают отказоустойчивое выполнение таких операций.
Exchange manager может отправлять большой объём данных в хранилище exchange, что приводит к высокой нагрузке на I/O этого хранилища. Вы можете настроить несколько мест хранения для использования exchange manager, чтобы распределить нагрузку I/O между ними.
Конфигурация#
Следующие шаги описывают, как настроить кластер Trino для отказоустойчивого выполнения с использованием exchange на базе S3:
Настройте S3-бакет для использования в качестве хранилища exchange. В этом примере используется AWS S3, однако другие варианты хранилищ также описаны в reference documentation. Вы можете использовать несколько S3-бакетов для хранения exchange-данных.
Для каждого бакета в AWS соберите следующую информацию:
S3 URI бакета, например
s3://exchange-spooling-bucketРегион, в котором расположен бакет, например
us-west-1AWS access key и secret key для доступа к бакету
Для развёртывания Trino в Kubernetes добавьте следующую конфигурацию exchange manager в разделы
server.exchangeManagerиadditionalExchangeManagerPropertiesHelm chart, используя собранную информацию о S3-бакете:server: exchangeManager: name=filesystem base-directories=s3://exchange-spooling-bucket-1,s3://exchange-spooling-bucket-2 additionalExchangeManagerProperties: exchange.s3.region=us-west-1 exchange.s3.aws-access-key=example-access-key exchange.s3.aws-secret-key=example-secret-key
В установках вне Kubernetes те же параметры должны быть определены в конфигурационном файле
exchange-manager.propertiesна координаторе и на всех worker-узлах.Добавьте следующую конфигурацию для отказоустойчивого выполнения в раздел
additionalConfigProperties:Helm chart:additionalConfigProperties: retry-policy=TASK
В установках вне Kubernetes то же свойство должно быть задано в файле
config.propertiesна координаторе и на всех worker-узлах.Повторно разверните ваш экземпляр Trino или, для установок вне Kubernetes, перезапустите кластер.
Теперь ваш кластер Trino настроен для отказоустойчивого выполнения запросов. Если ранее выполнение запроса могло завершиться с ошибкой из-за прерывания обработки, теперь fault-tolerant execution возобновляет обработку, обеспечивая успешное завершение запроса.
Следующие шаги#
Для получения дополнительной информации об отказоустойчивом выполнении, включая простые повторные попытки выполнения запросов без необходимости использования exchange manager, а также расширенные настройки, см. reference documentation.