Да, у нас на каждой ноде 128 Гб RAM, и под Heap отдано 96 Гб.
Но после миграции по версиям с 6.0 и до 7.4 потребление памяти уменьшилось
Сейчас можно и уменьшить раза в 2
Но меньше 30 боюсь не удастся - не запустится, настолько много шард
Да, lucene использует по 12-13 Гб на свои нужды, fielddata - маленький, надо уменьшать осторожно. Но уменьшать надо и если будет не хватать - то надо добавлять узлы.
Решили попробовать поднять на каждом физическом сервере по 3 ноды, т.е. будет 7 * 3 = 21 нода
Каждой ноде дать 29 Гб RAM, т.е. 40 останется на файловый кэш
Как в таком случае разбивать индекксы на шарды: на каждый индекс 21 шарду?
Утром ещё убрали четверть нагрузки с кластера. Таймауты получения статистики всё равно остались.
Самое интересное, что до этого с большей нагрузкой на 6.8, 7.3 такого никогда не было
Я думаю, это одна из причин. У меня было много случаев, когда после того, как проблема с GC исправлялась, все остальное вставало на свои места. Но бывает, что это проблему полностью не решает, но позволяет выявить другие проблемы, которых сейчас не видно из-за этих непрерывных пауз.
У нас похожий сценарий и бывает клиенты загружают очень много данных, правда никогда не переваливали дефолтные значения. Опытным путем выбраны настройки для параллельности и батчи для bulks + circuit breaker/retry логика, чтобы не перегружать кластер. Я хотел спросить, интересно, как устроен ElasticSearchWriterPool, т.е. от чего он отталкивается и как он работает чтобы определить эти параметры?
Раньше тоже были проблемы с queue_size, но теперь таких проблем нет. Остались только проблемы с переездом на 7.4.0 (пока никто не помог). При downgrade на 7.3.2 - все хорошо.
Мне интересно как объяснить этот случай
Подняли тестовый кластер. Минимальная нагрузка.
Периодически одна нода(координатор) отваливается. В большинстве случаев она возвращается, но бывает, что начинаются долгие перевыборы. Она не может присоединитсья к кластеру. Ни нагрузки, ни проблем с сетью там нет.
Вот лог с координатора
Почему нода так долго не могла присоединиться к кластеру?
Есть ещё логи похожие. Чуть позже приложу. В логах GC даже нет
Лог с node-00, которая была выбрана в это время мастером и отключила node-master считая, что начался лаг
node-00 утверждает, что node-master целых 3 минуты делала publication of cluster state version
Но там мало шард, cluster state передаётся как диффы. Это очень странно
Проблема, может быть в elasticsearch, или в том, как ваша сеть или виртуалки работают. Если бы проблема была в elasticsearch, то мы бы видели что-то в github.
Чтобы разобраться, что там конкретно не работает, было бы хорошо посмотреть на логи на более низком уровне: logger.org.elasticsearch.cluster.service:TRACE и logger.org.elasticsearch.gateway.MetaStateService:TRACE.
Кстати, время в логах отличается на несколько часов. Это так машины настроены, или это логи выбраны в разное время?
По поводу ошибки обновления cluster:monitor/nodes/stats которая возникает на продакшене
Словили её и на тесте. В это время ни на node-master ни на node-00 не было нагрузки на процессор или диск и с сетью всё было хорошо.
Кстати, node-master периодически вылетает из кластера, но за сотые доли секунды переподключается. Якобы это TransportException и разрывается tcp коннекшен. С этим ещё разбираемся.
Может, у вас там какое-нибудь "умное" сетевое оборудование умничает и обрывает соединения? Как у вас сеть настроена? Еще не очень понятно, почему логи обрезаны. Например:
Строка заканчивается на самом интересном месте. Пока что, дело ясное, что дело темное. Было бы полезно еще org.elasticsearch.cluster.coordination: TRACE добавить к следующему сбою и логи не резать.
Да, извиняюсь, вырезал всю мета-информацию об индексах и зацепил
В той строчке: [2019-10-25T15:36:08,734][DEBUG][o.e.c.s.ClusterApplierService] [node-master] processing [ApplyCommitRequest{term=79, version=22649, sourceNode={node-00}{cMIMAQ2cQBKx-0W0VqGzrg}{X9k02oS0SRKNhqdtvPeI8g}{192.168.11.39}{192.168.11.39:9300}{dim}}]: took [0s] done applying updated cluster state (version: 22649, uuid: glYQaVfWRFKOEKrkg02zng)
Добавил в конфиг logger.org.elasticsearch.cluster.coordination: TRACE, жду логов)
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.