Кластеризация Prostore
Содержание раздела
Система поддерживает кластеризацию сервиса исполнения запроса — подключение произвольного количества нод в одно окружение.
По умолчанию кластер работает в режиме с лидером. Также доступен режим работы кластера без лидера (leaderless), который больше не рекомендуется использовать, — его поддержка может быть удалена в будущем. В обоих режимах ноды кластера могут выполнять любые виды запросов, а сбой любой из них не прерывает работу остальных нод.
Допустимо объединять в кластер только одинаковые версии Prostore.
Подключение к кластеру
Для работы с кластером Prostore необходимо подключиться к любой из его нод, указав ее доменное имя или IP-адрес и номер порта, равный значению параметра конфигурации DTM_CORE_HTTP_PORT
.
Подробнее о способах подключения к ноде см. в разделе Подключение, о конфигурации кластера см. в разделе Конфигурация кластера.
Ноды кластера
В кластере одна нода является автоматически выбираемым лидером, а остальные ноды — ведомыми.
Выбор лидера
Лидер автоматически выбирается при наличии в кластере двух и более нод и признается всеми остальными нодами. Выбранная нода работает как лидер до первого сбоя или потери соединения с сервисной базой данных — в этом случае выбирается новый лидер.
Обработка запросов нодами
Лидер самостоятельно обрабатывает запросы, поступившие ему. Порядок обработки запросов ведомыми нодами зависит от того, к каким данным обращается запрос:
- если запрос обращается к версионируемым данным, нода обменивается управляющей информацией с лидером и затем обрабатывает запрос;
- если запрос обращается к неверсионируемым данным, нода обрабатывает запрос без обращения к лидеру.
Под версионируемыми данными имеются в виду данные логических таблиц, материализованных представлений и логических представлений, основанных на данных логических таблиц, под неверсионируемыми — данные прокси-таблиц и standalone-таблиц.
Лидер регистрирует все изменения версионируемых данных и логической схемы в сервисной БД, а ведомые ноды обращаются к лидеру для регистрации таких событий.
Если лидер в кластере недоступен и новый еще не выбран, ведомые ноды перестают исполнять запросы к версионируемым данным и возвращают ошибку в ответе. Обработка запросов к неверсионируемым данным при этом продолжается.
Согласованность данных
По умолчанию кластер поддерживает линеаризуемость, гарантируя получение самых свежих изменений на любой из нод кластера.
Взаимодействие кластера с другими компонентами
Все ноды кластера работают с общим набором компонентов: хранилищем данных, сервисной БД, одним экземпляром каждого коннектора и общим сервером (или набором серверов) Kafka.
Подробнее о компонентах, с которыми работает система, см. в разделе Компоненты и интерфейсы.
На рисунке ниже показан кластер Prostore и внешние компоненты, с которыми он взаимодействует.
Ограничения кластера
- Кластер не имеет встроенного балансировщика нагрузки между нодами.
- Для всех нод кластера значение параметра конфигурации
AUTO_RESTORE_STATE
должно быть равноfalse
. - Требуется синхронизация времени между нодами кластера внешними средствами, например с помощью NTP-сервиса.
- При потере соединения с лидером ведомая нода перестает исполнять запросы к версионируемым данным и возвращает ошибку в ответе. Это состояние сохраняется до события, которое наступит первым: до восстановления соединения с лидером или выбора нового лидера.
- Только лидер занимается синхронизацией материализованных представлений, обработкой retention-правил, и расчетом ROWS_COUNT в статистике.
Работа кластера в leaderless-режиме [deprecated]
Начиная с версии 6.12, для кластера не рекомендуется использовать leaderless-режим.
Кластер можно переключить из основного режима работы в leaderless-режим, в котором все ноды полностью полноправны. Чтобы это сделать, в конфигурации каждой ноды для параметра PNODE_LEADERLESS_ENABLED
установите значение true
.
По умолчанию при случайном распределении запросов между нодами кластер в leaderless-режиме обеспечивает согласованность данных уровня Eventual Consistency. Если требуется более высокий уровень согласованности данных, используйте любой из способов:
- переключите кластер в основной режим работы (с лидером), настроив кластер по инструкции в разделе Конфигурация кластера;
- выполняйте команду SYNC перед каждым запросом на чтение или выгрузку данных, когда нужна гарантия получения самых свежих данных.