Перейти к содержимому
Последнее обновление

Эластичное масштабирование

Apache Doris поддерживает эластичное масштабирование без остановки сервиса: узлы можно динамически добавлять или удалять, чтобы справляться с ростом нагрузки или высвобождать неиспользуемые ресурсы. Масштабирование узлов BE не влияет на доступность кластера, но запускает миграцию данных, поэтому выполняйте его в часы низкой нагрузки.

Сценарии использования​

СценарийРекомендуемая операцияОписание
Недостаточная производительность FE при чтенииДобавление узлов Observer FEObserver не участвует в выборе Master; он используется для повышения пропускной способности чтения метаданных
Недостаточная отказоустойчивость FEДобавление узлов Follower FEСуммарное число узлов Master и Follower должно быть нечётным; рекомендуется 3 или 5
Недостаточно места для хранения или вычислительных ресурсов BEДобавление узлов BEПосле добавления BE система автоматически выполняет балансировку, и данные постепенно распределяются равномерно
Вывод определённого узла BE из эксплуатацииУдаление BE (DECOMMISSION)Сначала переносит данные, затем отключает узел; рекомендуется для производственной среды
Узел вышел из строя и должен быть немедленно удалёнУдаление BE (DROP)Немедленно отключает узел и может привести к потере данных; используйте только в нештатных ситуациях

Предварительные требования​

  • У вас есть права администратора кластера и возможность выполнять операции ALTER SYSTEM.
  • Для каждого узла запланированы IP-адрес, порт и роль (Follower / Observer / BE).
  • Значение http_port нового узла FE совпадает со значением http_port каждого существующего узла FE в кластере.
  • Сокращение числа узлов BE выполняется в часы низкой нагрузки, и для приёма переносимых данных зарезервировано достаточно места на диске.

Масштабирование кластера FE​

Описание ролей FE​

Узлы FE в Doris могут выполнять следующие три роли. Каждый узел FE хранит полный набор метаданных:

РольУчастие в выборе MasterЧтение и запись метаданныхНазначение
MasterДа (единственный)Чтение + записьОбрабатывает чтение и запись метаданных. Изменения метаданных на Master синхронизируются с другими узлами по протоколу BDB JE. В кластере допускается только один Master
FollowerДаЧтениеОбрабатывает чтение метаданных. При сбое Master узлы Follower инициируют выборы и выбирают новый Master. Рекомендуется, чтобы суммарное число узлов Master и Follower было нечётным
ObserverНетЧтениеОбрабатывает чтение метаданных. Не участвует в выборе Master. Используется для увеличения производительности FE при чтении

Как правило, каждый узел FE может обслуживать от 10 до 20 узлов BE, а для большинства рабочих нагрузок достаточно 3 узлов FE.

Расширение кластера FE​

Примечание

При добавлении нового узла FE учитывайте следующее:

  • Значение http_port нового FE должно совпадать со значением http_port каждого существующего узла FE в кластере.
  • При добавлении узла Follower рекомендуется, чтобы общее число узлов Master и Follower в кластере было нечётным.
  • Команда show frontends показывает порт и роль каждого узла в текущем кластере.
  1. Запустите узел FE:

    fe/bin/start_fe.sh --helper <leader_fe_host>:<edit_log_port> --daemon
  2. Зарегистрируйте узел FE.

    Зарегистрируйте узел как Follower FE:

    ALTER SYSTEM ADD FOLLOWER "<follower_host>:<edit_log_port>";

    Или зарегистрируйте узел как Observer FE:

    ALTER SYSTEM ADD OBSERVER "<observer_host>:<edit_log_port>";
  3. Проверьте состояние добавленного узла FE:

    show frontends;

Сокращение числа узлов кластера FE​

При сокращении числа узлов убедитесь, что суммарное число узлов Master и Follower, оставшихся в кластере, по-прежнему нечётное. Для удаления узла используйте следующую команду:

ALTER SYSTEM DROP FOLLOWER[OBSERVER] "<fe_host>:<edit_log_port>";

После сокращения числа узлов вручную удалите файлы из каталога развёртывания удалённого узла FE.

Масштабирование кластера BE​

Расширение кластера BE​

  1. Запустите процесс BE:

    be/bin/start_be.sh
  2. Зарегистрируйте узел BE:

    ALTER SYSTEM ADD backend '<be_host>:<be_heartbeat_service_port>';

После регистрации новый BE автоматически присоединяется к кластеру, а Doris постепенно перераспределяет существующие данные на новый узел.

Сокращение числа узлов кластера BE​

Для удаления узла BE можно выбрать DROP или DECOMMISSION. Различия приведены ниже:

КритерийDROPDECOMMISSION
Механизм вывода из эксплуатацииСразу отключает и удаляет узел BEПосле выполнения команды пытается перенести данные с BE на другие узлы; после завершения миграции узел BE автоматически отключается
Момент вступления в силуВступает в силу сразу после выполненияВступает в силу после завершения миграции данных. В зависимости от текущего объёма данных в кластере это может занять от нескольких часов до суток
Обработка таблиц с единственной репликойМожет привести к потере данныхНе приводит к потере данных
Одновременный вывод нескольких узлов из эксплуатацииМожет привести к потере данныхНе приводит к потере данных
Рекомендация для производственной средыНе рекомендуется для производственной средыРекомендуется для производственной среды

Удаление узла BE с помощью DROP​

Используйте этот способ, если узел вышел из строя или его необходимо немедленно удалить в тестовой среде:

ALTER SYSTEM DROP backend "<be_host>:<be_heartbeat_service_port>";

Удаление узла BE с помощью DECOMMISSION​

В производственной среде рекомендуется DECOMMISSION: эта операция сначала переносит данные, а затем отключает узел:

ALTER SYSTEM DECOMMISSION backend "<be_host>:<be_heartbeat_service_port>";

Примечания к команде DECOMMISSION:

  • DECOMMISSION — асинхронная операция. После её выполнения команда SHOW backends; показывает, что статус SystemDecommissioned узла BE имеет значение true. Это означает, что узел выводится из эксплуатации.
  • Команда DECOMMISSION может завершиться неудачно. Например, если на оставшихся BE недостаточно места для данных с выводимого из эксплуатации BE или число оставшихся машин не обеспечивает минимальное количество реплик, команда не может завершиться, а значение SystemDecommissioned у BE остаётся равным true.
  • Ход выполнения DECOMMISSION можно отслеживать по значению TabletNum в выводе SHOW PROC '/backends';. Если вывод из эксплуатации продолжается, значение TabletNum постоянно уменьшается.
  • Вывод из эксплуатации можно отменить командой CANCEL DECOMMISSION BACKEND "<be_host>:<be_heartbeat_service_port>";. После отмены на BE остаётся текущий объём данных, а Doris выполняет балансировку позднее.
  • Для изменения скорости миграции данных можно настроить параметр balance_slot_num_per_path.

Часто задаваемые вопросы​

Вопрос: почему новый узел FE не запускается?​

Значение http_port отличается от значений существующих узлов FE, либо Leader FE не был указан с помощью --helper. Проверьте настройку http_port в fe.conf. При первом запуске используйте --helper <leader_fe_host>:<edit_log_port>.

Вопрос: почему после ALTER SYSTEM ADD FOLLOWER кластер по-прежнему не распознаёт новый узел?​

Узел не запущен, сеть недоступна или порт заблокирован межсетевым экраном. Проверьте состояние узла командой show frontends и убедитесь, что порт edit_log_port доступен.

Вопрос: почему DECOMMISSION долго не завершается?​

На оставшихся BE недостаточно места для хранения данных либо число оставшихся узлов меньше минимального количества реплик. Добавьте узлы BE или расширьте кластер перед выводом узла из эксплуатации. Используйте SHOW PROC '/backends';, чтобы проверить, продолжает ли уменьшаться значение TabletNum.

Вопрос: как отменить DECOMMISSION во время выполнения?​

Выполните CANCEL DECOMMISSION BACKEND "<be_host>:<be_heartbeat_service_port>";. После этого Doris выполнит балансировку.

Вопрос: почему миграция данных идёт слишком медленно?​

По умолчанию число параллельных операций миграции невелико. Настройте параметр balance_slot_num_per_path, чтобы увеличить скорость миграции.

Вопрос: почему после сокращения числа узлов FE не освобождается место на диске?​

После успешного выполнения команды сокращения числа узлов вручную удалите каталог развёртывания удалённого узла FE.