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

Высокая доступность загрузки

Doris предоставляет несколько механизмов для обеспечения высокой доступности при загрузке данных. В этом документе подробно описывается поведение Doris при загрузке по умолчанию, а также дополнительные возможности для повышения доступности загрузки, в частности функция минимального числа реплик для загрузки (Min Load Replica Num).

Прочитав этот документ, вы сможете:

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

Сценарии применения​

СценарийРекомендуемая стратегияОписание
Максимальные требования к надёжности данныхЗапись на большинство реплик по умолчаниюЗагрузка считается успешной только после успешной записи на большинство реплик
Некоторые узлы BE временно недоступныЗадать min_load_replica_numПозволяет успешно завершать загрузку при записи на число реплик, меньшее большинства
Высокие требования к скорости загрузкиЗадать min_load_replica_numПриоритет доступности над согласованностью

Стратегия записи на большинство реплик по умолчанию​

По умолчанию Doris использует стратегию записи на большинство реплик для обеспечения надёжности и согласованности данных:

  • Загрузка считается успешной, когда число реплик, на которые успешно записаны данные, превышает половину общего числа реплик.
  • Например, для таблицы с тремя репликами загрузка завершается успешно, если данные успешно записаны хотя бы на 2 реплики.

Принцип работы​

Запись на большинство реплик выполняется следующим образом:

  1. Распределение данных: сначала задача загрузки распределяет данные по всем задействованным узлам BE.
  2. Параллельная запись: каждый узел BE выполняет запись данных параллельно с остальными.
  3. Подтверждение записи: после завершения записи данных каждый узел BE отправляет подтверждение в FE.
  4. Проверка большинства: FE подсчитывает число реплик, на которые данные успешно записаны. Когда это число достигает большинства, загрузка считается успешной.
  5. Фиксация транзакции: FE фиксирует транзакцию загрузки, после чего данные становятся доступны для чтения.
  6. Асинхронная репликация: для реплик, на которые данные не удалось записать, система асинхронно реплицирует данные в фоновом режиме, обеспечивая согласованность всех реплик в конечном счёте.

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

Минимальное число реплик для загрузки​

Стратегия записи на большинство реплик обеспечивает надёжность данных, однако в некоторых сценариях она может снижать доступность системы. Например, при наличии двух реплик для завершения загрузки данные должны быть успешно записаны на обе, то есть во время загрузки ни одна из реплик не может быть недоступна.

Чтобы решить эту проблему и повысить доступность загрузки, Doris предоставляет настройку минимального числа реплик для загрузки (Min Load Replica Num).

Описание функции​

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

Типичные сценарии использования​

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

Способы настройки​

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

1. Настройка для отдельной таблицы​

Способ A: задать при создании таблицы

Укажите min_load_replica_num в разделе PROPERTIES оператора CREATE TABLE:

CREATE TABLE example_table
(
id INT,
name STRING
)
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 10
PROPERTIES
(
'replication_num' = '3',
'min_load_replica_num' = '2'
);

Способ B: изменить существующую таблицу

Измените значение динамически с помощью ALTER TABLE:

ALTER TABLE example_table
SET ( 'min_load_replica_num' = '2' );

2. Глобальная настройка​

Задайте значение с помощью параметра конфигурации FE min_load_replica_num:

ПараметрЗначение
Параметр конфигурацииmin_load_replica_num
Допустимые значенияБольше 0
Значение по умолчанию-1 (означает, что глобальная настройка минимального числа реплик для загрузки отключена)

О просмотре и изменении параметров конфигурации FE см. документацию по конфигурации FE.

Приоритет настроек​

Если заданы и свойство таблицы, и глобальная настройка, действует следующий порядок приоритетов:

Свойство таблицы > Глобальная настройка > Правило большинства по умолчанию

Если свойство таблицы не задано или имеет недопустимое значение, а глобальная настройка имеет допустимое значение, минимальное число реплик для загрузки в таблицу определяется следующим образом:

min(min_load_replica_num configured in FE, table replica count / 2 + 1)

Другие механизмы высокой доступности​

Помимо настройки минимального числа реплик для загрузки, Doris использует следующие механизмы для повышения доступности загрузки:

МеханизмНазначение
Повторные попытки загрузкиАвтоматически повторяет задачи загрузки, завершившиеся с ошибкой из-за временных проблем
Балансировка нагрузкиРаспределяет задачи загрузки между разными узлами BE, чтобы избежать чрезмерной нагрузки на один узел
Механизм транзакцийОбеспечивает согласованность данных и автоматически выполняет откат при сбое

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

Вопрос 1: может ли min_load_replica_num быть больше replication_num?

Нет. Минимальное число реплик для загрузки означает «минимальное число реплик, на которые должны быть успешно записаны данные при загрузке», поэтому оно должно быть меньше или равно общему числу реплик. Когда применяется глобальная настройка, система автоматически использует min(min_load_replica_num configured in FE, table replica count / 2 + 1).

Вопрос 2: будут ли потеряны данные на репликах, на которые не удалось выполнить запись, после включения min_load_replica_num?

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

Вопрос 3: когда следует использовать min_load_replica_num?

Эту настройку можно включить, когда некоторые узлы BE временно недоступны, планирование размещения реплик ещё не завершено или доступность загрузки важнее строгой согласованности. Это позволит избежать блокировки загрузок из-за проблем с небольшим числом реплик.

Вопрос 4: какая настройка применяется, если заданы и свойство таблицы, и глобальная настройка?

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