LINUX.ORG.RU
ФорумAdmin

Elasticsearch/opensearch как правильно расчитать количество шардов.

 


0

2

Во многом благодаря помощи местных обитателей разобрался в терминологии Elasticsearch/opensearch.

Но вопрос в тонкостях настройки. Ситуация - есть один железный сервер. 2 проца. в общем сложности 20 ядер. Задача закинуть туда много текста - около 250 млн записей. Каждая из которых пару абзацев. Одновременных пользователей будет мало. Обычно не больше однго двух. Т.е. задача ускорить поиск но не throughput

Есть ли смысл запускать Elasticsearch/opensearch на одном физическом сервере в режиме нескольких worker/data nodes - через docker compose? Или если один физический сервер то можно и одной обойтись и наоборот накладные расходы будут меньше?

Я правильно ли понимаю что один шард работает на одном ядре и не больше. Или это одна дата нода работает на одном ядре. Где то читал apache lucene работает только в одном потоке. И что является инстасом apache lucene? Шард или нода?

Какое соотношение нужно нод/ к шардам?

  1. Есть ли смыл на одном физическом сервере несколько datanodes делать docker compose? Или есть смысл чтобы уменьшить колличество используемой памяти на каждой ноде?
  2. Сколько нужно указывать шардов? нужно ли их делать равными количеству дата нод? Или больше? Какое сотношение датанод к шардам? Если смысл делать шардов больше чем дата нод. Как это расчитывать по соотношению к процессорным ядрам?
  3. Есть ли смысл делать replica больше 0 если все находится на одном физическом сервере (и соответсвеено если физический сервер умер то умрут и данные и как бы это не в приоритете, и оперативки лишней нет) Увеличивает ли колличество реплик скорость поиска? Или колличество реплик увеличивает throughput (т.е. одновременные запросы) Но если пользуется один пользователь то пофиг? Ну и правильно что replica 1 - ровно в два раза увеличивает потребление ОЗУ? (по всем датанодам)
  4. Какой параметр памяти JAVA стоит запускать.

Я так понимаю что шард - это отдельный экземпляр apache lucene.



Последнее исправление: Dimez (всего исправлений: 1)

Я не то что бы большой специалист, но думаю вот что:

  1. Инстанс lucene - шард, не нода
  2. Запускать несколько эластиков на одном узле имеет смысл только если очень много оперативки. Скажем есть тотал больше 128Gb, тогда имеет смысл резать
  3. Увеличение числа шардов может дать ускорение в твоем случае, думаю стоит попробовать
  4. Включать репликацию на одном сервере бесполезно, поиск это не ускорит
maxcom ★★★★★
()
Последнее исправление: maxcom (всего исправлений: 1)

Есть ли смыл на одном физическом сервере несколько datanodes делать docker compose?

Нету.

Сколько нужно указывать шардов?

В общем случае задача решается методом тыка. Хорошее начало, сделать так, чтобы размер осколка был около 20Гб, а потом варьировать. Каждый осколок требует ресурсов памяти и процессора, так что нет смысла делать их слишком маленькими. Но и искать в один поток по слишком большому куску данных тоже нерадостно. Надо придти к равновесию.

Есть ли смысл делать replica больше 0

По-моему, нет, эластик может сам оптимально распределять ресурсы, без таких подсказок, но это такая штука сложная, что лучший ответ это «попробуй и узнаешь». Заодно клёвые графики в графане можно будет смотреть.

ugoday ★★★★★
()