Полнотекстовый поиск RX встаёт по трём причинам: куче JVM не хватило памяти, кончился лимит шардов или диск дошёл до порога, после которого запись закрывается. Калькулятор считает кучу, запас по шардам и пороги диска под ваш сервер и выдаёт файл настроек, запуск и команды.
Файл настроек и куча действуют после перезапуска. Команды из третьего блока применяются к работающему кластеру сразу.
Включите JavaScript, чтобы увидеть расчёт.
Параметр ядра vm.max_map_count нужен на сервере, где работает Elasticsearch, в том числе под Docker.
Реплики, срок хранения журналов и проверка результата.
Вместо пароля в командах стоит CHANGE_ME. Замените на свой. Порт 9200 откройте только для серверов RX и мониторинга: пароль защищает от случайного доступа, а не от перебора.
Elasticsearch под RX обычно ставят по инструкции и не трогают. Проблемы приходят через месяцы: индексов становится больше, диск заполняется, и поиск перестаёт находить новые документы.
Для полнотекстового поиска вендор поддерживает одну версию: Elasticsearch 7.17.23. Так написано и в справке RX 25.2, и в типовых требованиях к 4.12; ранее поддерживаемые 7.4, 7.16.3 и 7.17.13 вендор рекомендует обновить до 7.17.23. Под поиск RX вендор рекомендует сервер с 8 ядрами, 16 ГБ памяти и SSD, а размер индексов в среднем в 3–10 раз меньше суммарного объёма документов. Кластер для журналов к RX не привязан, там можно ставить 8.x.
Elasticsearch держит в куче служебные структуры индексов и результаты запросов, а сами данные читает через файловый кэш системы. Поэтому памяти нужно и тому, и другому: куча получает половину, вторая половина остаётся кэшу. Выше 31 ГБ Java перестаёт сжимать указатели, и куча в 32 ГБ вмещает меньше, чем в 31. Значения -Xms и -Xmx одинаковые: куча, которая растёт на ходу, даёт паузы.
Лимит контейнера ставится равным всей отведённой памяти, а куча задаётся явно через ES_JAVA_OPTS. Если кучу не задать, Elasticsearch посчитает её сам от лимита контейнера, и результат зависит от версии. Явное значение одинаково везде и видно в команде запуска.
При 85 % занятого места узел перестаёт принимать новые шарды, при 90 % начинает уводить шарды на другие узлы, при 95 % закрывает индексы на запись. Для RX третий порог означает, что новые и изменённые документы перестают находиться поиском, а очередь индексации в брокере растёт. Калькулятор переводит пороги в гигабайты, чтобы было видно, сколько места на самом деле рабочее. Наблюдение за диском стоит настроить на 80 %, до первого порога.
По умолчанию узел держит не больше 1000 шардов. Каждый шард занимает память кучи, поэтому ориентир скромнее: 20 шардов на гигабайт кучи. Чаще всего лимит съедают журналы: новые индексы каждые сутки по нескольку серий, без удаления старых. Когда лимит кончился, новый индекс в полночь не создаётся, и журналы перестают записываться при свободном диске.
По умолчанию у каждого индекса одна реплика, а разместить её на том же узле, где основной шард, нельзя. На одном узле кластер из-за этого всегда жёлтый, и мониторинг привыкает к жёлтому. Тогда настоящую проблему, когда основной шард не размещён, легко пропустить. Реплики на одном узле ставят в ноль.
Политика жизненного цикла удаляет индексы старше заданного срока. Шаблон с политикой действует только на индексы, созданные после него, поэтому к уже существующим её привязывают отдельной командой. Если её пропустить, старые индексы останутся навсегда, и через месяц лимит шардов кончится всё равно.
Так экономят серверы, но журналы растут непредсказуемо. Один день с лавиной ошибок заполняет диск, Elasticsearch закрывает запись на всём узле, и поиск по документам RX встаёт вместе с журналами. Если кластер общий, срок хранения журналов считайте с запасом, а наблюдение за диском ставьте обязательно.
Параметр bootstrap.memory_lock запрещает системе уводить кучу в файл подкачки: поиск с кучей на диске отвечает секундами. Для этого контейнеру и службе нужен лимит memlock без ограничений. Параметр ядра vm.max_map_count Elasticsearch проверяет при старте и без значения 262144 в рабочем режиме не запускается.
Чего калькулятор не делает: не оценивает размер индекса поиска RX по числу документов: он зависит от того, сколько текста в ваших документах. Реальный размер, заполнение лимитов и порогов показывает Диагностика за полминуты.
Собрать журналы RX и окружения в этот кластер. Конфигурация Vector
Elasticsearch пишет про circuit_breaking_exception, read-only-allow-delete или лимит шардов. Справочник ошибок