Когда одна из дата- нод покидает кластер, мастер-нода реагирует следующим образом:
⛵️ Повышает реплика-шарды до праймари-шардов, чтобы заместить все праймари, которые были на потерянной ноде.
⛵️Распределяет реплика-шарды для замены потерянных реплик (при условии, что имеется достаточное количество нод).
⛵️Выполняет перераспределение шардов поровну между оставшимися нодами.
Эти действия направлены на защиту кластера от потери данных путем обеспечения полной репликации каждого шарда.
Переезд шардов создаёт дополнительную нагрузку на кластер, которую можно избежать, если нода выпала из кластера на короткое время. Рассмотрим следующий сценарий:
⛵️Нода теряет сетевое соединение.
⛵️Мастер-нода переводит реплика-шарды в праймари для каждого праймари-шарда, находившегося на выпавшей ноде.
⛵️Мастер распределяет новые реплики по другим нодам кластера.
⛵️Каждая новая реплика создает полную копию праймари-шарда.
⛵️Шарды ребалансируются на другие ноды кластера.
⛵️Потерянная нода возвращается через несколько минут.
⛵️Мастер-нода восстанавливает баланс кластера, выделяя шарды потерянной ноде.
Если бы мастер-нода подождала несколько минут, то потерянные шарды можно было бы перераспределить на потерянную ноду с минимальным сетевым трафиком.
Распределение реплик-шардов, которые становятся нераспределенными из-за отключения ноды, может быть отложено с помощью настройки index.unassigned.node_left.delayed_timeout, которая по умолчанию равна 1минуте. Этот параметр может быть обновлен без перезагрузки.
PUT _all/_settingsПри включенном отложенном распределении вышеописанный сценарий выглядит следующим образом:
{
"settings": {
"index.unassigned.node_left.delayed_timeout": "5m"
}
}
⛵️Нода теряет сетевое подключение.
⛵️Мастер-нода переводит реплика-шарды в праймари для каждого праймари-шарда, который находился на выпавшей ноде.
⛵️Мастер-нода регистрирует сообщение о том, что распределение неназначенных шардов было отложено и на какой срок.
⛵️Кластер остается желтым, потому что есть нераспределенные шарды-реплики.
⛵️Потерянная нода возвращается через несколько минут, до истечения тайм-аута.
⛵️Потерянные реплики повторно распределяются на выпадавшую ноду.
Эта настройка не влияет на повышение реплика-шардов до праймари, равно как и на назначение реплик, которые не были назначены ранее. Тут всё без изменений.
Если время отложенного распределения истекло, мастер-нода запускает процесс по первому сценарию.
Сталкивались ли вы с проблемами периодического кратковременного выпадения ноды из кластера?