Перейти к основному контенту

Solr: эксплуатационная настройка

Используйте эту инструкцию, чтобы подобрать память Solr, применить изменения и проверить работу поиска. Параметры потоков, пакетного индексирования и слияния сегментов описаны отдельно: Настройка производительности индексирования.

Перед началом

  • Проверьте расчёт ресурсов и фактический лимит памяти контейнера.
  • Откройте [Общие настройки] → [Поиск (Solr)] → [Инстансы SolrCloud] и сохраните исходные показатели памяти, времени запроса и состояния реплик.
  • Сохраните действующие .env и Docker Compose.
  • Для перезапуска Solr выберите окно обслуживания. В установке с одним экземпляром поиск на это время будет недоступен.

Выберите размер памяти

Solr работает внутри JVM. Переменная SOLR_HEAP задаёт размер её кучи; в штатной конфигурации Клавдия используется 4096m. Кроме кучи, память требуется самой JVM, операционной системе и файловому кешу. При совместном размещении оставьте ресурсы PostgreSQL и узлу Клавдия.

Память сервера Исходный ориентир
До 48 ГБ один Solr с кучей 8–16 ГБ, если это позволяет бюджет остальных компонентов
64 ГБ и больше один Solr с кучей до 31 ГБ; при недостатке ресурсов — дополнительные узлы индексирования

Эти значения не являются обязательным минимумом: для небольшой нагрузки может быть достаточно штатных 4 ГБ. В памяти находятся поисковые структуры и кеши, а не весь индекс.

Около 32 ГБ JVM может перестать использовать сжатые ссылки на объекты (compressed oops (!)). Точная граница зависит от JVM и её параметров. Значение до 31 ГБ — практический ориентир, а не гарантия для любой сборки. Не увеличивайте кучу выше этой границы без проверки режима JVM и измерения результата.

Высокое использование кучи не всегда означает нехватку памяти: JVM освобождает её при сборке мусора. Оценивайте длительность пауз и устойчивую загрузку вместе с очередью индексирования и задержкой поиска.

Измените SOLR_HEAP

  1. В каталоге установки откройте .env и задайте выбранное значение, например:

    SOLR_HEAP=8192m
    
  2. Проверьте, что Docker Compose передаёт его именно в контейнер klvd-solr:

    environment:
      SOLR_HEAP: ${SOLR_HEAP:-4096m}
    

    Добавляйте строку в существующий блок environment, сохраняя его формат и остальные параметры. Если значение уже задано непосредственно в compose-файле, измените его там.

  3. Пересоздайте контейнер с новыми параметрами:

    cd /opt/klvd
    docker compose up -d --force-recreate klvd-solr
    

Обычный restart не передаёт контейнеру изменённые переменные окружения. Том поискового индекса не удаляйте; сбрасывать индекс ради изменения памяти не требуется.

Проверьте результат

  1. В [Инстансы SolrCloud] убедитесь, что экземпляр вернулся в live_nodes и реплики находятся в состоянии active.
  2. В колонке [JVM Heap] (!) проверьте новый максимум памяти. Подсветка использования начинается с 75% и 90%.
  3. Повторите типичный поисковый запрос и сравните [QTime] (!) с исходным значением. Проверяйте одинаковые запросы при сопоставимой нагрузке.
  4. Проверьте журнал Solr и динамику очереди индексирования. Не должно быть повторяющихся аварий по памяти или длительных пауз сборки мусора.

{{СКРИНШОТ}}

Если задержки сохранились

  • Если куча постоянно заполнена, а паузы сборки мусора растут, пересмотрите её размер в пределах доступного бюджета.
  • Если увеличить память нельзя, уменьшите ramBufferSizeMB по инструкции настройки индексирования.
  • Если память свободна, проверьте нагрузку CPU, дисковые задержки и сложность запросов. Рост QTime сам по себе не доказывает нехватку памяти.
  • Для углублённой проверки используйте /solr/admin/info/system и средства мониторинга JVM. Схема, порт и аутентификация должны соответствовать вашему подключению к Solr.

При ухудшении верните прежний SOLR_HEAP и снова пересоздайте только контейнер Solr.

Когда нужны дополнительные экземпляры

Штатный способ масштабирования — добавить узлы с ролью [Индексация]. Каждый узел регистрирует один локальный Solr; порядок описан на странице Добавление и состояние экземпляров Solr.

Если на одном сервере требуется несколько экземпляров Solr, их размещение настраивается вручную:

  • каждому контейнеру нужны отдельные порт и том индекса;
  • у каждого контейнера задаётся собственный SOLR_HEAP в пределах общего бюджета сервера;
  • все экземпляры подключаются к ZooKeeper одного SolrCloud;
  • после запуска проверяются live_nodes и размещение реплик в CLUSTERSTATUS.

Типовой установщик создаёт один Solr на узел. Дополнительный контейнер на том же сервере не получает отдельной управляемой строки в реестре экземпляров Клавдия. Его вывод, включение и обслуживание выполняются вручную средствами SolrCloud. Несколько контейнеров на одном хосте также не защищают от отказа этого хоста.

При выборе ручного размещения заранее подготовьте отдельную конфигурацию контейнеров и регламент обслуживания; не копируйте работающий контейнер с тем же портом или томом.

Связанные материалы

Навигация по книге