Базовая топология#

Базовая топология (Baseline) — набор узлов, которые предназначены для хранения данных. Она нужна, чтобы контролировать, когда будет происходить ребалансировка данных в кластере (подробнее о ней написано в разделе «Ребалансировка»). Пример: в кластере есть 3 узла, по которым распределены данные. Если в кластер добавить еще 2 узла, произойдет перераспределение данных между всеми 5 узлами.

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

Цели базовой топологии:

  • избежать ненужной передачи данных, если серверный узел покидает кластер на короткий промежуток времени, например из-за случайных сбоев сети или запланированных работ по обслуживанию сервера;

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

Автоматическое изменение базовой топологии по умолчанию включено для in-memory-кластеров. Для персистентных кластеров его нужно включить вручную. Изменить базовую топологию вручную можно с помощью скрипта control.sh — подробнее о нем написано в разделе «Утилита control» документа «Руководство по системному администрированию».

Внимание

Создание кеша во время изменения базовой топологии приведет к исключениям. Подробнее об этом написано в подразделе «Основные операции с кешем» раздела «Использование Key-Value API».

Базовая топология в чистых in-memory кластерах#

В чистых in-memory-кластерах по умолчанию включено автоматическое обновление базовой топологии для всего набора серверных узлов. Топология обновляется при добавлении и удалении серверных узлов из кластера. Ребалансировка данных также выполняется автоматически. Можно отключить автоматическое обновление базовой топологии и управлять ей вручную — подробнее об этом написано в разделе ниже.

Базовая топология в персистентных кластерах#

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

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

Кластер можно активировать с помощью инструментов:

  • скрипт control.sh — подробнее о нем написано в разделе «Утилита control» документа «Руководство по системному администрированию»;

  • команда REST API;

  • программно — примеры:

    Ignite ignite = Ignition.start();
    
    ignite.cluster().state(ClusterState.ACTIVE);
    
    IIgnite ignite = Ignition.Start();
    ignite.GetCluster().SetActive(true);
    

Автоматическое изменение базовой топологии#

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

Когда набор серверных узлов в кластере меняется:

  1. Кластер ждет окончания настроенного периода ожидания (тайм-аута).

  2. Если в течение этого времени не происходит изменений топологии, DataGrid устанавливает текущий набор узлов как базовую топологию. Если набор узлов меняется в течение этого времени, тайм-аут обновляется.

Каждое изменение в наборе узлов сбрасывает тайм-аут для автообновления базовой топологии. Если тайм-аут закончился и текущий набор узлов отличается от базовой топологии (например, в кластер добавились новые узлы или старые вышли из него), DataGrid меняет базовую топологию на текущий набор. После этого запускается процесс ребалансировки данных.

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

Для автоматического обновления базовой топологии кластер должен находиться в активном состоянии.

Примеры, как подключить автоматическое обновление базовой топологии с помощью скрипта control.sh или программно через API:

Ignite ignite = Ignition.start();

ignite.cluster().baselineAutoAdjustEnabled(true);

ignite.cluster().baselineAutoAdjustTimeout(30000);
IIgnite ignite = Ignition.Start();
ignite.GetCluster().SetBaselineAutoAdjustEnabledFlag(true);
ignite.GetCluster().SetBaselineAutoAdjustTimeout(30000);

Чтобы отключить автоматическое обновление базовой топологии, используйте такой же метод с переменной false:

ignite.cluster().baselineAutoAdjustEnabled(false);
ignite.GetCluster().SetBaselineAutoAdjustEnabledFlag(false);

Мониторинг базовой топологии#

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

  • скрипт control.sh — подробнее о нем написано в разделе «Утилита control» документа «Руководство по системному администрированию»;

  • JMX Beans.