Эластичное масштабирование
Apache Doris поддерживает эластичное масштабирование без остановки сервиса: узлы можно динамически добавлять или удалять, чтобы справляться с ростом нагрузки или высвобождать неиспользуемые ресурсы. Масштабирование узлов BE не влияет на доступность кластера, но запускает миграцию данных, поэтому выполняйте его в часы низкой нагрузки.
Сценарии использования
| Сценарий | Рекомендуемая операция | Описание |
|---|---|---|
| Недостаточная производительность FE при чтении | Добавление узлов Observer FE | Observer не участвует в выборе 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показывает порт и роль каждого узла в текущем кластере.
-
Запустите узел FE:
fe/bin/start_fe.sh --helper <leader_fe_host>:<edit_log_port> --daemon -
Зарегистрируйте узел FE.
Зарегистрируйте узел как Follower FE:
ALTER SYSTEM ADD FOLLOWER "<follower_host>:<edit_log_port>";Или зарегистрируйте узел как Observer FE:
ALTER SYSTEM ADD OBSERVER "<observer_host>:<edit_log_port>"; -
Проверьте состояние добавленного узла FE:
show frontends;
Сокращение числа узлов кластера FE
При сокращении числа узлов убедитесь, что суммарное число узлов Master и Follower, оставшихся в кластере, по-прежнему нечётное. Для удаления узла используйте следующую команду:
ALTER SYSTEM DROP FOLLOWER[OBSERVER] "<fe_host>:<edit_log_port>";
После сокращения числа узлов вручную удалите файлы из каталога развёртывания удалённого узла FE.
Масштабирование кластера BE
Расширение кластера BE
-
Запустите процесс BE:
be/bin/start_be.sh -
Зарегистрируйте узел BE:
ALTER SYSTEM ADD backend '<be_host>:<be_heartbeat_service_port>';
После регистрации новый BE автоматически присоединяется к кластеру, а Doris постепенно перераспределяет существующие данные на новый узел.
Сокращение числа узлов кластера BE
Для удаления узла BE можно выбрать DROP или DECOMMISSION. Различия приведены ниже:
| Критерий | DROP | DECOMMISSION |
|---|---|---|
| Механизм вывода из эксплуатации | Сразу отключает и удаляет узел 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.