Примерная конфигурация
Начать нужно с того, что установить лимиты для юзера elasticsearch в системе. У меня Debian. Лимиты задаются в файле вот так:
elasticsearch soft memlock unlimited elasticsearch hard memlock unlimited elasticsearch soft nofile 500000 elasticsearch hard nofile 500000
Теперь надо сказать java машине, что ей нужно забрать под «кучу» 8GB памяти. Для разных версий Elastic это делается по-разному. В 5.х нужно править файл конфигурации :
-Xms8g -Xmx8g
По умолчанию там написано 2g. Если версия 2.х, то нужно вносить несколько правок в разных местах. Во-первых, определить переменную окружения в файле строкой:
ES_HEAP_SIZE=8g
Во-вторых, в том же файле нужно поправить строку:
MAX_LOCKED_MEMORY=unlimited
Там же поставьте сразу:
MAX_OPEN_FILES=500000
Теперь откройте файл и в нем поправьте строки:
LimitNOFILE=500000 LimitMEMLOCK=infinity
И наконец в файле раскомментируйте строку:
bootstrap.memory_lock: true
Что касается лимитов на открытие файлов, их надо переопределять и для версии 5.х в тех же файлах (строго говоря только в , если вы используете systemd для запуска сервиса, но сделайте в обоих, это не повредит). А вот параметр в файле в версии 5.х не нужен. Более того, он будет считаться ошибкой. В этом же файле можно дописать (изначально его там нет) еще один полезный параметр:
cluster.routing.allocation.node_initial_primaries_recoveries: 10
Он задает количество одновременных задач аллокации и проверки шардов при запуске кластера. Это может сократить время запуска, впрочем, не сильно. Если конечно у вас не SSD в качестве дисков. Тогда смело ставьте 1000. По умолчанию elastic запускает 4 таска одновременно.
И на последок несколько полезных консольных команд, которые всегда должны быть под рукой:
curl -XGET 'http://localhost:9200/_cluster/stats?human&pretty'
выдаст вам всю информацию о состоянии кластера: сколько индексов, сколько шардов, как расходуется оперативная память, сколько есть места на диске и т.п.
curl -s localhost:9200/_cat/shards?v
Выдаст информацию по шардам каждого индекса: где аллокирована, сколько занимает места на диске.
curl http://localhost:9200/_cluster/health/
компактный вывод информации о «здоровье» кластера.
А еще может пригодиться вот такая:
curl -XPUT 'localhost:9200/_settings' -d ' { "index" : { "number_of_replicas" : 0 } }'
Это переопределит настройку количества реплик в 0 для всех шардов всех индексов, в том числе уже созданных (количество реплик, в отличии от количества первичных шардов, можно переопределять «на лету»).
В документации рекомендуется отдавать Elastic половину оперативной памяти машины, при условии, что он живет на машине один. Хороший совет, но мы маленькие, у нас денег нет. Я отдаю 8 гиг из 12-и, при том, что у меня на этой же машине еще Logstash и Kibana. Нормально всё работает.
В следующей заметке напишу о работе с Elasticsearch из питона.
Список источников
- esguardian.ru