Кластеризация Prostore

Содержание раздела
  1. Подключение к кластеру
  2. Ноды кластера
    1. Выбор лидера
    2. Обработка запросов нодами
  3. Согласованность данных
  4. Взаимодействие кластера с другими компонентами
  5. Ограничения кластера
  6. Работа кластера в leaderless-режиме (без лидера)

Система поддерживает кластеризацию сервиса исполнения запроса — подключение произвольного количества нод в одно окружение.

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

Допустимо объединять в кластер только одинаковые версии Prostore.

Подключение к кластеру

Для работы с кластером Prostore необходимо подключиться к любой из его нод, указав ее доменное имя или IP-адрес и номер порта, равный значению параметра конфигурации DTM_CORE_HTTP_PORT.

Подробнее о способах подключения к ноде см. в разделе Подключение, о конфигурации кластера см. в разделе Конфигурация кластера.

Ноды кластера

В кластере одна нода является автоматически выбираемым лидером, а остальные ноды — ведомыми.

Выбор лидера

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

Обработка запросов нодами

Лидер самостоятельно обрабатывает запросы, поступившие ему. Порядок обработки запросов ведомыми нодами зависит от того, к каким данным обращается запрос:

  • если запрос обращается к версионируемым данным, нода обменивается управляющей информацией с лидером и затем обрабатывает запрос;
  • если запрос обращается к неверсионируемым данным, нода обрабатывает запрос без обращения к лидеру.

Под версионируемыми данными имеются в виду данные логических таблиц, материализованных представлений и логических представлений, основанных на данных логических таблиц, под неверсионируемыми — данные прокси-таблиц и standalone-таблиц.

Лидер регистрирует все изменения версионируемых данных и логической схемы в сервисной БД, а ведомые ноды обращаются к лидеру для регистрации таких событий.

Если лидер в кластере недоступен и новый еще не выбран, ведомые ноды перестают исполнять запросы к версионируемым данным и возвращают ошибку в ответе. Обработка запросов к неверсионируемым данным при этом продолжается.

Согласованность данных

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

Взаимодействие кластера с другими компонентами

Все ноды кластера работают с общим набором компонентов: хранилищем данных, сервисной БД, одним экземпляром каждого коннектора и общим сервером (или набором серверов) Kafka.

Подробнее о компонентах, с которыми работает система, см. в разделе Компоненты и интерфейсы.

На рисунке ниже показан кластер Prostore и внешние компоненты, с которыми он взаимодействует.

Кластер Prostore с внешними компонентами и системами

Ограничения кластера

  • Кластер не имеет встроенного балансировщика нагрузки между нодами.
  • Для всех нод кластера значение параметра конфигурации AUTO_RESTORE_STATE должно быть равно false.
  • Требуется синхронизация времени между нодами кластера внешними средствами, например с помощью NTP-сервиса.
  • При потере соединения с лидером ведомая нода перестает исполнять запросы к версионируемым данным и возвращает ошибку в ответе. Это состояние сохраняется до события, которое наступит первым: до восстановления соединения с лидером или выбора нового лидера.
  • Только лидер занимается синхронизацией материализованных представлений, обработкой retention-правил, и расчетом ROWS_COUNT в статистике.

Работа кластера в leaderless-режиме (без лидера)

Кластер можно переключить из основного режима работы в leaderless-режим, в котором все ноды полностью полноправны. Чтобы это сделать, в конфигурации каждой ноды для параметра PNODE_LEADERLESS_ENABLED установите значение true.

По умолчанию при случайном распределении запросов между нодами кластер в leaderless-режиме обеспечивает согласованность данных уровня Eventual Consistency. Если требуется более высокий уровень согласованности данных, используйте любой из способов:

  • переключите кластер в основной режим работы (с лидером), настроив кластер по инструкции в разделе Конфигурация кластера;
  • выполняйте команду SYNC перед каждым запросом на чтение или выгрузку данных, когда нужна гарантия получения самых свежих данных.