Привязка рабочих областей к узлам кластера ClickHouse

Привязка рабочих областей к узлам кластера ClickHouse

Введение

Платформа поддерживает привязку отдельных узлов кластера ClickHouse к рабочим областям, что позволяет направлять запросы из каждой области на выделенный узел кластера. Такое решение изолирует нагрузку, предотвращает конкуренцию за ресурсы и дает возможность гибко управлять производительностью системы.

В данной статье используются следующие термины:

Термин

Описание

Термин

Описание

Query (Q)

Узел ClickHouse, предназначенный исключительно для выполнения пользовательских запросов (SELECT) и аналитической обработки данных. Указывается в разделе ClickHouseSettings файла appsettings.json в массиве QueryNodes.

ETL (E)

Узел ClickHouse, предназначенный для операций извлечения, преобразования и загрузки (ETL) данных. Он получает данные из источников и реплицирует их на узлы типа Query (Q). Сам не обслуживает пользовательские запросы. Указывается в разделе ClickHouseSettings файла appsettings.json в массиве EtlNodes.

ETL и Query (Q/E)

Узел ClickHouse, выполняющий одновременно две функции: прием и репликацию данных (ETL) и обработку пользовательских запросов (Query). Для его активации узел должен быть объявлен в обоих конфигурационных массивах: EtlNodes и QueryNodes раздела ClickHouseSettings файла appsettings.json.

TargetReplicaNodesCount (TRNC)

Параметр конфигурации в разделе ClickHouseSettings файла appsettings.json. Определяет максимальное целевое количество узлов кластера, на которые система будет пытаться реплицировать данные во время операции загрузки. Это значение представляет собой желаемый уровень избыточности данных. В процессе загрузки некоторые узлы могут быть недоступны, поэтому фактическое число успешных реплик может быть меньше этого значения.

ConfirmationReplicaNodesCount (CRNC)

Параметр конфигурации в разделе ClickHouseSettings файла appsettings.json. Определяет минимальный порог успешно созданных реплик данных. Если в процессе загрузки данные были реплицированы как минимум на указанное количество узлов, операция считается успешной. Это гарантирует необходимый минимальный уровень отказоустойчивости и доступности данных перед тем, как система подтвердит завершение загрузки.

Механизм выбора узлов для выполнения запросов и загрузки данных

В кластерном режиме платформа изначально использовала глобальную стратегию выбора узлов ClickHouse, основанную на параметрах конфигурации TargetReplicaNodesCount (TRNC) и ConfirmationReplicaNodesCount (CRNC). При загрузке данных система автоматически выбирала наименее загруженные узлы в количестве, равном TRNC, для репликации данных. Успешной загрузка считалась, если данные были реплицированы как минимум на количество узлов, указанное в параметре CRNC. При этом выбор узлов происходил произвольно из всего пула доступных узлов, определённых в конфигурации.

Привязка рабочих областей к узлам позволяет задать приоритеты выбора. Если рабочая область привязана к определённым узлам, платформа будет выбирать узлы для репликации данных преимущественно из этого набора. При этом количество узлов, участвующих в репликации, не превысит значение TRNC, а успех операции будет зависеть от достижения минимального порога CRNC среди привязанных узлов. После успешной загрузки все последующие запросы из этой рабочей области будут направляться на привязанные узлы.

Важно отметить, что привязка рабочей области к узлам распространяется на все новые наборы данных, создаваемые в этой области.

Требования

  • В конфигурации платформы (appsettings.json) должны быть указаны как минимум один или несколько узлов типа ETL (E) или ETL и Query (Q/E).

  • Для выполнения привязки рабочей области к узлам необходимы права глобального администратора системы.

  • Администратор должен знать имена Query (Q) узлов, указанных в конфигурации платформы.

Ограничения

  • Привязка возможна только к узлам типа Query (Q) или ETL и Query (Q/E).

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

Особенности

На платформе снято ограничение, которое ранее требовало для инкрементальной загрузки, чтобы все узлы были типа ETL и Query (Q/E) и выполнялось условие TRNC == CRNC == количество узлов. Теперь инкрементальная загрузка может выполняться с более гибкими настройками репликации.

Предварительные условия

Убедитесь, что в конфигурации formula-engine (appsettings.json) корректно указаны узлы типа ETL (E) или ETL и Query (Q/E). Каждый такой узел запускает свой экземпляр сервера Hangfire.

Для обеспечения производительности и предотвращения узкого места в конвейере загрузки данных необходимо сбалансировать количество параллельных воркеров в formula-engine и data-management-service.

Ключевой принцип: Количество воркеров в data-management-service, которые ставят задачи ETL в очередь, должно быть сопоставимо с общим количеством воркеров в formula-engine, которые эти задачи выполняют.

Настройка воркеров для formula-engine

  1. В файле appsettings.json сервиса formula-engine найдите раздел Hangfire.

  2. Параметр WorkerCount определяет число воркеров на каждом узле (E или Q/E).

    • Общее число воркеров ETL в formula-engine = (Количество узлов) × (WorkerCount formula-engine)

Настройка воркеров для data-management-service

  1. В файле appsettings.json сервиса data-management-service найдите раздел Hangfire.

  2. Параметр WorkerCount определяет глобальное число воркеров в единственном экземпляре Hangfire data-management-service.

Формула балансировки

Чтобы избежать ситуации, когда data-management-service не может подавать задачи с достаточной скоростью, установите значение по следующей формуле:

WorkerCount (data-management-service) = Количество узлов E и Q/E (formula-engine) × WorkerCount (formula-engine на одном узле)

Пример сбалансированной конфигурации

  • В formula-engine сконфигурировано 4 узла (E или Q/E).

  • Конфигурация formula-engine (настройка для каждого узла):

    "Hangfire": {     "WorkerCount": 2 }

    Итог для formula-engine: 4 узла × 2 воркера = 8 воркеров ETL, готовых к обработке.

  • Конфигурация data-management-service:

    "Hangfire": {      "WorkerCount": 8 }

    Итог для data-management-service: 8 воркеров для постановки и координации задач, включая ETL.

Данная настройка обеспечивает баланс: 8 воркеров data-management-service могут инициировать до 8 параллельных задач ETL, которые будут равномерно обработаны 8 воркерами на узлах formula-engine. Это исключает образование очередей и предотвращает появление "узкого места" в конвейере загрузки данных.

Привязка рабочей области к узлам ClickHouse с помощью API

На данный момент это единственный способ выполнить привязку рабочей области к узлам кластера ClickHouse.

  1. Войдите на платформу, откройте рабочую область, которую требуется привязать, и в адресной строке скопируете ее идентификатор (после слова workspaces):

    image-20251001-111208.png

     

  2. Войдите на API-страницу Формулы, введя следующий адрес в адресной строке браузера:

    http://<host>/v3/formula-engine/swagger/

    где <host> - это хост платформы.

  3. Найдите блок ClickHouseWorkspaceBinding:

    image-20251001-111241.png
  4. Перед выполнением какого либо запроса потребуется авторизация. Для этого на платформе скопируйте bearer-токен любого запроса из платформы. Чтобы получить его, нажмите F12, находясь в браузере, и скопируйте токе, как показано на картинке:

    image-20251001-111308.png

     

  5. Далее в правом верхнем углу API-страницы нажмите Authorize:

    authorize.png

     

  6. В открывшемся диалоге введите скопированный токен в поле Value и нажмите кнопку Authorize:

    auth-dialog.png

     

  7. Далее выполните следующие шаги для привязки рабочей области к узлам кластера:

    • В блоке ClickHouseWorkspaceBinding нажмите строку Post.

    • В правом верхнем углу раскрывшейся секции нажмите Try it out.

    • В поле workspaceId  вставьте идентификатор целевой рабочей области, который вы скопировали ранее.

    • В поле version введите значение 1.

    • В поле Example value укажите узел кластера ClickHouse, который нужно привязать к этой рабочей области. Если их несколько, укажите их через запятую (каждое название должно быть в кавычках):

      image-20251001-111414.png

       

    • Нажмите Execute в нижней части секции для выполнения запроса. Если запрос выполнен успешно, в ответе придет код 200.

Обновление привязки

Для обновления привязки рабочей области к узлам кластера выполните следующие шаги:

  1. В блоке ClickHouseWorkspaceBinding нажмите строку PUT.

  2. В правом верхнем углу раскрывшейся секции нажмите Try it out.

  3. В поле workspaceId  вставьте идентификатор целевой рабочей области, который вы скопировали ранее.

  4. В поле version введите значение 1.

  5. В поле Example value укажите другой узел кластера ClickHouse, который нужно привязать к этой рабочей области, или добавьте новые:

    image-20251001-111451.png

     

  6. Нажмите Execute в нижней части секции для выполнения запроса. Если запрос выполнен успешно, в ответе придет код 200.

Просмотр привязки

Для просмотра привязки рабочей области к узлам кластера выполните следующие шаги:

  1. В блоке ClickHouseWorkspaceBinding нажмите строку GET.

  2. В правом верхнем углу раскрывшейся секции нажмите Try it out.

  3. В поле workspaceId  вставьте идентификатор целевой рабочей области, который вы скопировали ранее.

  4. В поле version введите значение 1:

    image-20251001-111545.png

     

  5. Нажмите Execute в нижней части секции для выполнения запроса. Если запрос выполнен успешно, в ответе придет код 200.

Удаление привязки

Для удаления привязки рабочей области к узлам кластера выполните следующие шаги:

  1. В блоке ClickHouseWorkspaceBinding нажмите строку DELETE.

  2. В правом верхнем углу раскрывшейся секции нажмите Try it out.

  3. В поле workspaceId  вставьте идентификатор целевой рабочей области, который вы скопировали ранее.

  4. В поле version введите значение 1:

    image-20251001-111515.png
  5. Нажмите Execute в нижней части секции для выполнения запроса. Если запрос выполнен успешно, в ответе придет код 200.


Смотрите также

Развёртывание кластера ClickHouse