Чтобы понять, как добавить распределённую таблицу с удалёнными агентами, важно сначала иметь базовое представление о распределённых таблицах. В этой статье мы сосредоточимся на том, как использовать распределённую таблицу в качестве основы для создания кластера экземпляров Manticore.
Вот пример того, как разделить данные на 4 сервера, каждый из которых обслуживает один из шардов:
- ini
table mydist {
type = distributed
agent = box1:9312:shard1
agent = box2:9312:shard2
agent = box3:9312:shard3
agent = box4:9312:shard4
}В случае сбоя сервера распределённая таблица продолжит работать, но результаты с вышедшего из строя шарда будут отсутствовать.
Теперь, когда мы добавили зеркала, каждый шард находится на 2 серверах. По умолчанию мастер (экземпляр searchd с распределённой таблицей) будет случайным образом выбирать одно из зеркал.
Режим выбора зеркал можно задать с помощью настройки ha_strategy. Помимо режима по умолчанию random, существует также ha_strategy = roundrobin.
Более продвинутые стратегии, основанные на вероятностях с учётом задержек, включают noerrors и nodeads. Они не только исключают зеркала с проблемами, но и отслеживают время отклика и выполняют балансировку. Если зеркало отвечает медленнее (например, из-за выполняющихся на нём операций), оно будет получать меньше запросов. Когда зеркало восстанавливается и обеспечивает лучшее время отклика, оно будет получать больше запросов.
- ini
table mydist {
type = distributed
agent = box1:9312|box5:9312:shard1
agent = box2:9312:|box6:9312:shard2
agent = box3:9312:|box7:9312:shard3
agent = box4:9312:|box8:9312:shard4
}