Историческая ребалансировка#

DataGrid поддерживает два режима ребалансировки, которые настраиваются в конфигурации кластера:

  • Полная ребалансровка — режим, который перемещает партиции между узлами в кластере целиком, а не в виде дельты изменений, как при исторической ребалансировке. Подробнее об этом режиме написано в разделе «Ребалансировка».

  • Историческая ребаланcировка — режим, который поддерживается для кластеров с Native Persistence. Он нужен для случаев, когда узлы покидают кластер на короткое время и на диске хранится большой объем данных. С исторической ребалансировкой партиция получает только дельту изменений, которые произошли, пока узел партиции был офлайн.

Требования к исторической ребалансировке#

Историческая ребалансировка опирается на историю обновлений, которые хранятся в файлах журнала предзаписи (Write-Ahead Logging или WAL) узлов кластера. В истории WAL хранятся обновления всех партиций, дельты которых должны быть загружены на перезапущенный узел.

Максимальный размер WAL-архивов должен зависеть от количества времени, в течение которого узел может оставаться офлайн. Для этого оцените потенциальное время в режиме офлайн и настройте размер архива соответственно.

Java#
IgniteConfiguration cfg;
DataStorageConfiguration storageCfg = cfg.getDataStorageConfiguration();
storageCfg.setMaxWalArchiveSize(512L * 1024 * 1024);

Размер WAL-архива по умолчанию — 1 ГБ. Если настроить функцию восстановления до заданной контрольной точки, размер архива станет неограниченным. Глубина истории, которая передается с помощью исторической ребалансировки, будет регулироваться свойством IGNITE_PDS_MAX_CHECKPOINT_MEMORY_HISTORY_SIZE (устанавливает число контрольных точек, значение по умолчанию — 100).

Оценка размера WAL#

Чтобы точно оценить, сколько места потребуется на диске, нужно учесть несколько параметров:

  • Скорость формирования WAL на конкретном узле.

  • Период времени, в течение которого узел может оставаться офлайн.

  • Использование сжатия WAL.

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

Второй параметр (потенциальное время в режиме офлайн) нужно получить из процедур обслуживания кластера. Администраторы документируют время ремонта кластера и сервисной перезагрузки.

Параметр сжатия WAL может уменьшить размер истории WAL в два и более раза. Окончательное соотношение зависит от шаблона данных.

Минимальный размер WAL-архива для исторической ребалансировки можно рассчитать по формуле: wal_archive_size = wal_write_rate * node_offline_time * compression_coefficientcompression_coefficient равен 1, если сжатие отключено, или [0.1-0.5] в зависимости от шаблона данных.

Пример расчета минимального размера WAL-архива

wal_write_rate = 209715200 bytes (200 МБ WAL-файлов в секунду)

node_offline_time = 1800 seconds (узел может быть недоступен в течение 30 минут)

compression_coefficient = 0.5 (наиболее пессимистичная оценка коэффициента сжатия)

wal_archive_size = 209715200 * 1800 * 0.5 = 188743680000 bytes ~ 176  ГБ

Настройка исторической ребалансировки#

В большинстве случаев, когда узел возвращается в кластер, историческая ребалансировка более эффективна, чем полная, так как DataGrid будет передавать меньше данных по сети. В случаях с высокой скоростью записи данных в кластер размер WAL может расти намного быстрее, чем количество записей, которые хранятся в партициях. В таких сценариях полная ребалансировка может быть более эффективной.

Чтобы выбрать режим ребалансировки для конкретной партиции, DataGrid использует определенный эвристический метод. Если количество записей в партиции меньше количества обновлений WAL, которые нужно перенести в партиции, DataGrid выбирает режим полной ребалансировки. В противном случае DataGrid использует историческую ребалансировку.

Параметры, которые могут повлиять на решение по выбору режима ребалансировки:

  • IGNITE_PDS_WAL_REBALANCE_THRESHOLD — если количество записей в партиции меньше значения свойства (значение по умолчанию — 500), DataGrid использует полную ребалансировку. Чтобы полностью исключить использование исторической ребалансировки, установите большое значение свойства, например Integer.MAX_VALUE.

  • IGNITE_PREFER_WAL_REBALANCE — если установить значение свойства true, историческая ребалансировка будет выбрана вне зависимости от количества записей, которые хранятся в партиции.