Историческая ребалансировка#
DataGrid поддерживает два режима ребалансировки, которые настраиваются в конфигурации кластера:
Полная ребалансровка — режим, который перемещает партиции между узлами в кластере целиком, а не в виде дельты изменений, как при исторической ребалансировке. Подробнее об этом режиме написано в разделе «Ребалансировка».
Историческая ребаланcировка — режим, который поддерживается для кластеров с Native Persistence. Он нужен для случаев, когда узлы покидают кластер на короткое время и на диске хранится большой объем данных. С исторической ребалансировкой партиция получает только дельту изменений, которые произошли, пока узел партиции был офлайн.
Требования к исторической ребалансировке#
Историческая ребалансировка опирается на историю обновлений, которые хранятся в файлах журнала предзаписи (Write-Ahead Logging или WAL) узлов кластера. В истории WAL хранятся обновления всех партиций, дельты которых должны быть загружены на перезапущенный узел.
Максимальный размер WAL-архивов должен зависеть от количества времени, в течение которого узел может оставаться офлайн. Для этого оцените потенциальное время в режиме офлайн и настройте размер архива соответственно.
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_coefficient.
compression_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, историческая ребалансировка будет выбрана вне зависимости от количества записей, которые хранятся в партиции.