Зеркалирование

Агенты зеркал могут использоваться взаимозаменяемо при обработке поискового запроса. Экземпляр(ы) Manticore, хранящий распределённую таблицу, где определены зеркальные агенты, отслеживает статус зеркал (активно или неактивно) и время отклика, а также выполняет автоматическое переключение при сбоях и балансировку нагрузки на основе этой информации.

Зеркала агентов

agent = node1|node2|node3:9312:shard2

Приведённый выше пример объявляет, что node1:9312, node2:9312 и node3:9312 все имеют таблицу с именем shard2 и могут использоваться как взаимозаменяемые зеркала. Если какой-либо из этих серверов выходит из строя, запросы будут распределяться между оставшимися двумя. Когда сервер снова становится доступен, мастер обнаружит это и начнёт направлять запросы ко всем трём узлам снова.

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

agent = node1:9312:node1shard2|node2:9312:node2shard2

Это работает аналогично предыдущему примеру, но при запросах к разным серверам будут использоваться разные имена таблиц. Например, node1shard2 будет использоваться при запросах к node1:9312, а node2shard — при запросах к node2:9312.

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

Период кармы задаётся в секундах и по умолчанию равен 60 секундам. Мастер хранит до 15 интервалов кармы с статистикой по каждому агенту для целей инструментирования (см. оператор SHOW AGENT STATUS). Однако для логики HA/LB используются только последние два интервала.

Когда запросов нет, мастер отправляет регулярную команду ping каждые ha_ping_interval миллисекунд, чтобы собирать статистику и проверять, жив ли удалённый хост. По умолчанию ha_ping_interval равен 1000 мс. Установка значения 0 отключает пинги, и статистика будет накапливаться только на основе фактических запросов.

Пример:

# sharding table over 4 servers total
# in just 2 shards but with 2 failover mirrors for each shard
# node1, node2 carry shard1 as local
# node3, node4 carry shard2 as local
# config on node1, node2
agent = node3:9312|node4:9312:shard2
# config on node3, node4
agent = node1:9312|node2:9312:shard1
Last modified: August 28, 2025