Управление вычислительными группами: руководство по созданию, предоставлению прав, переключению и масштабированию
В архитектуре с разделением вычислений и хранения один или несколько вычислительных узлов (BE) можно объединить в вычислительную группу. В этом документе описан полный набор операций управления вычислительными группами: просмотр, добавление, предоставление прав, настройка группы по умолчанию, переключение и масштабирование.
В версиях до 3.0.2 вычислительные группы назывались вычислительными кластерами.
Сценарии использования вычислительных групп
В архитектуре с несколькими вычислительными группами оператор USE @<compute_group_name> позволяет направлять определённые рабочие нагрузки в заданную вычислительную группу, обеспечивая физическую изоляцию разных типов нагрузок.
В следующих сценариях предполагается наличие двух вычислительных групп: C1 и C2.
| Сценарий | Описание | Порядок действий |
|---|---|---|
| Изоляция между операциями чтения | Два крупных запроса выполняются на отдельных вычислительных узлах, избегая конкуренции за ресурсы CPU и памяти | Для запроса 1 используется USE @c1; для запроса 2 используется USE @c2 |
| Изоляция чтения и записи | Устраняет конкуренцию за ресурсы между загрузкой данных и запросами; C1 может обращаться к данным, только что загруженным в C2 | Для запросов используется USE @c1; для загрузки данных используется USE @c2 |
| Изоляция между операциями записи | Частые небольшие загрузки и загрузки крупными пакетами выполняются раздельно, чтобы не мешать друг другу | Для небольших загрузок используется USE @c1; для пакетных загрузок используется USE @c2 |
Описанная выше изоляция распространяется на вычислительные ресурсы, такие как CPU и память. Чтение кеша соседних узлов включено по умолчанию, поэтому при отсутствии данных в локальном кеше запрос из одной вычислительной группы может читать File Cache узла BE из другой группы. Если настроено заполнение кеша между группами, запрос также может поручить другой группе загрузить для него данные из объектного хранилища. Это ослабляет изоляцию сети, дисков и кеша между вычислительными группами. Если требуется строгая изоляция, отключите чтение кеша соседних узлов на узлах BE.
Механизм выбора вычислительной группы по умолчанию
Если пользователь явно не задал вычислительную группу по умолчанию, система автоматически выбирает группу, которая соответствует следующим условиям:
- В вычислительной группе есть хотя бы один работающий вычислительный узел.
- У текущего пользователя есть право USAGE_PRIV на эту вычислительную группу.
В рамках одного сеанса вычислительная группа по умолчанию остаётся неизменной, пока пользователь явно не сменит её. Между сеансами система может автоматически сменить вычислительную группу по умолчанию при возникновении любого из следующих условий:
| Условие переключения | Всегда вызывает переключение |
|---|---|
| Пользователь теряет право USAGE_PRIV на ранее выбранную вычислительную группу | Да |
| Добавлена или удалена вычислительная группа | Да |
| В ранее выбранной вычислительной группе больше нет работающих вычислительных узлов | Возможно |
Просмотр всех вычислительных групп
Назначение: просмотр всех вычислительных групп в текущем репозитории.
Команда:
SHOW COMPUTE GROUPS;
Описание: возвращаемые результаты зависят от уровня прав пользователя:
- Пользователи с правом
ADMINмогут просматривать все вычислительные группы. - Обычные пользователи могут просматривать только те вычислительные группы, на которые у них есть право
USAGE_PRIV. - Если у пользователя нет права USAGE_PRIV ни на одну вычислительную группу, результат будет пустым.
Добавление вычислительной группы
Предварительные требования: необходимо право OPERATOR (право на управление узлами). По умолчанию оно есть только у учётной записи root. Его можно предоставить другим учётным записям с помощью команды GRANT. Подробнее см. в разделе Управление правами.
Назначение: добавление узла BE и назначение его вычислительной группе.
Команда с указанием вычислительной группы:
ALTER SYSTEM ADD BACKEND 'host:9050' PROPERTIES ("tag.compute_group_name" = "new_group");
Команда с использованием вычислительной группы по умолчанию: если вычислительная группа не указана, узел по умолчанию присоединяется к default_compute_group:
ALTER SYSTEM ADD BACKEND 'host:9050';
Подробнее см. в справочнике SQL по ADD BACKEND.
Предоставление доступа к вычислительной группе
Предварительные требования: у текущего пользователя есть право ADMIN или он входит в роль admin.
Назначение: предоставление указанному пользователю права USAGE_PRIV на вычислительную группу.
Команда:
GRANT USAGE_PRIV ON COMPUTE GROUP {compute_group_name} TO {user};
Отзыв доступа к вычислительной группе
Предварительные требования: у текущего пользователя есть право ADMIN или он входит в роль admin.
Назначение: отзыв у указанного пользователя права USAGE_PRIV на вычислительную группу.
Команда:
REVOKE USAGE_PRIV ON COMPUTE GROUP {compute_group_name} FROM {user};
Настройка вычислительной группы по умолчанию
Настройка для текущего пользователя
Предварительные требования: у текущего пользователя уже есть право USAGE_PRIV на целевую вычислительную группу.
SET PROPERTY 'default_compute_group' = '{clusterName}';
Настройка для другого пользователя
Предварительные требования: у текущего пользователя есть право Admin.
SET PROPERTY FOR {user} 'default_compute_group' = '{clusterName}';
Просмотр вычислительной группы по умолчанию
Просмотр вычислительной группы по умолчанию для текущего пользователя. Значение default_compute_group в результате указывает на вычислительную группу по умолчанию:
SHOW PROPERTY;
Просмотр вычислительной группы по умолчанию для другого пользователя (требуются права администратора):
SHOW PROPERTY FOR {user};
Описание прав
| Роль пользователя | Доступные действия |
|---|---|
Пользователь с правами администратора (например, CREATE USER jack IDENTIFIED BY '123456' DEFAULT ROLE "admin") | Может задавать вычислительную группу по умолчанию для себя и других пользователей; может просматривать PROPERTY для себя и других пользователей |
Обычный пользователь (например, CREATE USER jack1 IDENTIFIED BY '123456') | Может задавать вычислительную группу по умолчанию только для себя; может просматривать только собственные PROPERTY; не может просматривать все вычислительные группы (для этого требуется право GRANT ADMIN) |
- Если текущий пользователь не настроил вычислительную группу по умолчанию, при чтении или записи данных возникает ошибка. Используйте команду
USE @cluster, чтобы указать вычислительную группу для текущего сеанса, или операторSET PROPERTY, чтобы задать вычислительную группу по умолчанию. - Если текущий пользователь настроил вычислительную группу по умолчанию, но впоследствии эта группа была удалена, при чтении или записи данных также возникает ошибка. Используйте команду
USE @cluster, чтобы выбрать другую вычислительную группу, или операторSET PROPERTY, чтобы обновить настройку вычислительной группы по умолчанию.
Переключение вычислительных групп
Назначение: указание базы данных и вычислительной группы для использования в текущем сеансе в архитектуре с разделением вычислений и хранения.
Синтаксис:
USE { [catalog_name.]database_name[@compute_group_name] | @compute_group_name }
Описание: если имя базы данных или вычислительной группы содержит зарезервированное ключевое слово, заключите соответствующее имя в обратные кавычки (`).
Масштабирование вычислительных групп
Используйте следующие команды для добавления или удаления узлов BE и масштабирования вычислительной группы:
- Увеличение числа узлов:
ALTER SYSTEM ADD BACKEND - Уменьшение числа узлов:
ALTER SYSTEM DECOMMISSION BACKEND
Перебалансировка нагрузки после масштабирования
Cloud Rebalance служит механизмом балансировки нагрузки в архитектуре Doris с разделением вычислений и хранения. При изменении числа узлов BE в вычислительной группе (длительное отсутствие узла в сети также считается событием сокращения группы) система автоматически перераспределяет трафик чтения и записи в кластере.
Типы стратегий балансировки
Функция balance_type поддерживается начиная с Doris 3.1.3 и Doris 4.0.2. В более ранних версиях для управления выполнением задач прогрева во время перебалансировки был доступен только глобальный параметр FE enable_cloud_warm_up_for_rebalance.
В следующем примере описаны четыре типа стратегий для сценария увеличения числа узлов:
| Тип стратегии | Время до готовности нового узла | Влияние на производительность | Принцип работы | Сценарии применения |
|---|---|---|---|---|
without_warmup | Минимальное | Наибольшее | FE напрямую обновляет сопоставление шардов с узлами; при первом чтении или записи данные в файловом кеше отсутствуют, поэтому их необходимо получить из S3 | Подходит, если новый узел нужно быстро ввести в работу и колебания производительности допустимы |
async_warmup | Небольшое | Возможны промахи кеша | Запускается задача прогрева; сопоставление обновляется после успешного выполнения задачи или истечения времени ожидания; система пытается заполнить файловый кеш во время переключения сопоставления, но при некоторых первых чтениях данные всё ещё могут отсутствовать в кеше | Универсальный вариант с приемлемой производительностью |
sync_warmup | Более длительное | Практически без промахов кеша | Запускается задача прогрева; FE изменяет сопоставление только после подтверждения завершения задачи, гарантируя завершение переноса кеша | Подходит, если после масштабирования требуется высокая производительность и файловый кеш новых узлов должен быть заполнен |
peer_read_async_warmup | Минимальное | Незначительное | FE напрямую изменяет сопоставление шардов с узлами и запускает задачу прогрева без гарантии её завершения; при первых чтениях на новом узле данные поступают из файлового кеша исходного узла BE через чтение кеша соседних узлов, для чего параметр enable_cache_read_from_peer на узлах BE должен оставаться включённым (по умолчанию он включён) | Подходит, если новые узлы нужно быстро ввести в работу без прямого чтения из S3, а исходные узлы BE способны справиться с дополнительной нагрузкой чтения |
Настройка
Глобальный тип балансировки по умолчанию
Задайте глобальное значение по умолчанию в файле конфигурации FE (fe.conf):
cloud_warm_up_for_rebalance_type = "async_warmup"
Настройка на уровне вычислительной группы
Тип балансировки можно настроить отдельно для каждой вычислительной группы:
ALTER COMPUTE GROUP cg1 PROPERTIES("balance_type"="async_warmup");
Правила приоритета настроек
- Если для вычислительной группы не задан
balance_type, используется глобальное значение по умолчаниюasync_warmup. - Если для вычислительной группы задан
balance_type, при выполнении перебалансировки приоритет имеет настройка этой группы.
Переименование вычислительной группы
Назначение: изменение имени существующей вычислительной группы.
Команда:
ALTER SYSTEM RENAME COMPUTE GROUP <old_name> <new_name>;
После переименования права пользователей и настройки вычислительной группы по умолчанию, связанные с исходным именем группы (old_name), не обновляются автоматически с учётом нового имени (new_name). Необходимо вручную повторно предоставить права с учётной записи администратора. Это поведение соответствует системе прав MySQL.
Часто задаваемые вопросы
Как просмотреть и изменить глобальный тип перебалансировки?
- Просмотр:
ADMIN SHOW FRONTEND CONFIG LIKE "cloud_warm_up_for_rebalance_type"; - Изменение (вступает в силу без перезапуска FE):
ADMIN SET FRONTEND CONFIG ("cloud_warm_up_for_rebalance_type" = "without_warmup");
Как узнать тип балансировки вычислительной группы?
Выполните SHOW COMPUTE GROUPS;. Столбец properties в результате содержит атрибуты каждой вычислительной группы, в том числе настройку balance_type.
Как определить, стабилизировалось ли распределение tablet в кластере?
Способ 1: проверка с помощью SHOW BACKENDS
Проверьте, распределено ли количество tablet между узлами BE примерно равномерно. Ориентировочный диапазон:
(total tablets in cluster / number of BEs in Compute Group) × 0.95
~
(total tablets in cluster / number of BEs in Compute Group) × 1.05
Здесь 0.05 обозначает значение по умолчанию для параметра конфигурации FE cloud_rebalance_percent_threshold. Чтобы tablet распределялись между узлами BE более равномерно, уменьшите значение этого параметра.
Способ 2: наблюдение по метрикам FE
Проверьте серию метрик doris_fe_cloud_.*_balance_num в метриках FE. Если значения длительное время не меняются, вычислительная группа достигла сбалансированного состояния. Рекомендуется добавить эти метрики на панель мониторинга для постоянного наблюдения:
curl "http://feip:fe_http_port/metrics" | grep '_balance_num'
Что делать, если при чтении или записи данных возникает ошибка «Не настроена вычислительная группа по умолчанию»?
Устраните проблему одним из следующих способов:
- Используйте команду
USE @cluster, чтобы временно указать вычислительную группу для текущего сеанса. - Используйте
SET PROPERTY 'default_compute_group' = '{clusterName}', чтобы задать постоянную вычислительную группу по умолчанию.
Что делать, если после удаления вычислительной группы по умолчанию возникает ошибка?
После удаления вычислительной группы пользователи, которые от неё зависят, сталкиваются с ошибками при чтении или записи данных. Варианты решения:
- Используйте команду
USE @cluster, чтобы выбрать другую вычислительную группу для текущего сеанса. - Используйте
SET PROPERTY, чтобы задать другую доступную вычислительную группу по умолчанию.