Коллеги добрый день!
Столкнулся с проблемой следующего характера:
Есть кластер состоящий из 3 узлов, 1 мастер (8x CPU, 16Gb Head, 32Gb RAM) и 2 дата ноды (8x CPU, 31Gb Heap, 64Gb RAM)
На каждой из дата нод по 2500 индексов и по (>10 тыс. шардов), данных около 1.2 Тб, около 5 млрд. документов. Диски по 1 Тб выделены на каждую ноду. "Да это плохо, архитектуру уже меняю."
Индексы имеют два primary shard и одну реплику. Случилось следующее:
Перезагрузилась ВМ со второй дата нодой, не беда, у нас кластер продолжает работать (yellow state). Нода успешно поднялась и начался процесс восстановления данных, прошло 15 часов и кластер до сих пор в состоянии yellow. Новые шарды перестали аллоцироваться
_cluster/health
https://pastebin.com/S3grQTNq
_cluster/settings
https://pastebin.com/aqiXfgqN
allocation/explain
https://pastebin.com/7WrfywcE
Но при этом ресурсы не использовались во всем кластере. Огромное количество шардов replica были в состоянии INITIALIZING, но при этом ничего не происходило.
Решил поэксперементировать и пришел к выводу, что elasticsearch не может восстановить сразу такое огромное количество шардов на одной ноде, так как когда я закрыл все индексы и решил восстановить 1000 индексов (3000 шардов), восстановление опять дошло до active_shards_percent_as_number 48-50%, кластер в состоянии yellow, новые шарды не аллоцировались.
Тогда я решил небольшими пачками восстановить 1000 индексов, по 10 штук примерно, и вуаааля, все восстановилось успешно.
Отсюда вопрос, почему так? я уперся в потолок?
Я понимаю, что при таком количество шардов на одной ноде может возникнуть всё что угодно, но хотя бы в логах что-нибудь должно же быть написано. Потому что я ничего критичного не увидел. Заранее спасибо!