SolrCloud: архитектура
Клавдий использует службу полнотекстового поиска Apache Solr для поиска по архиву писем и содержимому вложений. На малых объёмах достаточно одного инстанса Solr, развёрнутого вместе с indexer(!)-узлом. При росте архива, для резервирования индекса и параллельного поиска кластер расширяется до нескольких инстансов Solr — без правки файлов развёртывания при добавлении каждого нового узла.
Этот раздел описывает серверную архитектуру поиска и операции, которые администратор выполняет при масштабировании и обслуживании кластера. Настройка подключения, просмотр состояния и управление бакетами по месяцам через веб-интерфейс — в Проверка состояния поиска (раздел [Поиск (Solr)]).
SolrCloud и координатор-ZK
Кластер поиска работает в режиме SolrCloud: несколько инстансов Solr объединяются в единый кластер, Solr сам шардирует и реплицирует индекс, распределяет запросы по узлам. Координацию кластера обеспечивает Apache ZooKeeper.
Модель Клавдия — координатор-ZK (не ансамбль ZK):
- Coordinator(!)-узел — первый indexer(!)-узел кластера (назначается автоматически, по наименьшему идентификатору). На нём работает локальный ZooKeeper (standalone(!), порт 2181) и локальный Solr в режиме cloud(!).
- Joiner(!)-узлы — прочие indexer(!)-узлы. На них работает только Solr (cloud(!)); ZooKeeper не запускается. Их Solr подключается к ZooKeeper coordinator(!)-узла и автоматически присоединяется к тому же кластеру SolrCloud.
ZooKeeper в этой модели — одиночный (на coordinator(!)). Он хранит только метаданные кластера (состав коллекций, размещение реплик); сами данные индекса восстанавливаются из базы Клавдия переиндексацией. Падение coordinator(!) означает простой поиска до его рестарта или переноса роли. Резервирование индекса достигается репликами SolrCloud (replicationFactor(!)), а не ансамблем ZooKeeper. В описанной конфигурации ZooKeeper не имеет собственного кворума; учитывайте это при планировании доступности поиска.
Размещение Solr
Solr всегда размещается совместно с indexer(!)-узлом (co-located) — в отдельном контейнере на том же хосте. Узел Клавдия обращается к локальному Solr по адресу https://127.0.0.1:8983/solr (HTTPS на WUI-сертификате из secrets/ssl_cert, self-signed(!), verify(!) отключён внутри узла). Кластер SolrCloud внутри себя роутит запросы по всем инстансам — Клавдий говорит с одним URL, а fan-out(!) по шардам и репликам выполняет Solr.
Дефолт в настройках —
https://127.0.0.1:8983/solr. Локальный Solr всегда поднимается на HTTPS (jetty keystore из WUI-серта, см. Замена TLS-сертификата). При внешнем Solr укажите его адрес (http://host:8983илиhttps://...) в настройках поиска.
Единый кластер при нескольких indexer(!)-узлах
Если в кластере Клавдия несколько узлов с ролью indexer, их локальные инстансы Solr
объединяются в единый кластер SolrCloud — индекс шардируется и реплицируется между всеми
инстансами, запросы балансируются автоматически:
- Coordinator(!)-узел (первый indexer(!), назначается автоматически по наименьшему UID) — на нём работает локальный ZooKeeper (standalone(!), порт 2181) и Solr в режиме cloud(!).
- Joiner(!)-узлы (остальные indexer(!)) — только Solr (cloud(!)); ZooKeeper не запускается. Их Solr подключается к ZooKeeper coordinator(!)-узла и автоматически присоединяется к тому же кластеру SolrCloud. Реплики коллекций распределяются по всем joiner(!)-узлам (replicationFactor(!), см. ниже).
Таким образом, все indexer(!)-узлы видят один и тот же индекс — письмо, проиндексированное на
одном узле, доступно для поиска на любом другом. Не нужно указывать отдельный Solr-URL на каждом
узле: каждый обращается к своему локальному Solr (https://127.0.0.1:8983/solr), а SolrCloud
гарантирует согласованность данных между инстансами.
Доставка настроек кластера
Узел Клавдия сам управляет параметрами SolrCloud без правки docker-compose при добавлении инстанса:
- При старте indexer(!)-узел регистрирует себя в реестре инстансов (
config.solr_instances): идентификатор узла, адрес Solr, роль (coordinator(!)/joiner(!)), адрес ZooKeeper. - Узел определяет свою роль: если coordinator(!) уже есть — узел становится joiner(!) и использует его ZooKeeper; если coordinator(!) отсутствует и узел первый — он становится coordinator(!).
- Параметры (роль, адрес ZooKeeper, адрес Solr) записываются в общий файл
/shared/solr-cluster.env. Entrypoint(!)-скрипты контейнеров Solr и ZooKeeper читают этот файл: на coordinator(!) запускается ZooKeeper, на joiner(!) — не запускается; Solr на joiner(!) стартует с привязкой к ZooKeeper coordinator(!)-узла.
Навигация по книге
- Следующая статья: Добавление и состояние инстансов Solr