Обладает ли Solr cloud балансировщиком нагрузки, например ГАПРОКСИЯ в мастерской ошибке - PullRequest
0 голосов
/ 26 июня 2019

Я много искал, но, к сожалению, немного путаюсь с облаком solr. Допустим, у меня есть три системы, в которых настроен solrCloud (1 ведущий и 2 подчиненных) и внешний Zookeeper на тех же трех машинах для составления кворума. Имена систем:

  • Мастер
  • Slave1
  • slave2
  • Государственно-Front

Public-Front - это система, в которой я настроил HAPROXY. Он получает запросы от WWW и отправки на внутренний сервер в зависимости от ACL.

Согласно моему пониманию, если я запрашиваю коллекцию Solr (т. Е. Master), она направляет ее в подчиненные устройства и, следовательно, выравнивает нагрузку. Здесь нет необходимости указывать рабов. Не так ли?

Теперь в Public-Front я должен настроить каждый Solr как отдельное ведомое устройство для балансировки нагрузки или просто для управления системой.

Теперь, если я сконфигурирую ведущую систему только как solr-сервер в HAPROXY, тогда, если solr-server (master) выйдет из строя, я думаю, что не смогу получить сервис от Solr из HAPROXY (хотя подчиненные работают до, но не настроены в HAPROXY).

Где я ошибаюсь и какой подход лучше?

1 Ответ

1 голос
/ 26 июня 2019

В Solr Cloud нет традиционных master или slave - есть набор реплик, одна из которых определяется как лидер.Выбор лидера является автоматическим - то есть первая реплика, которая говорит, что хочет быть лидером, получает этот статус.Это в состоянии сбора.В вашем примере есть три реплики, одна из которых предназначена для лидера.Если эта реплика исчезает, одна из двух оставшихся реплик становится новым лидером, и все продолжается как обычно.Роль лидера заключается в том, чтобы быть актуальной версией индекса и обрабатывать любые обновления - сначала для своего собственного индекса, а затем направлять эти обновления на любые реплики .

Там.также несколько типов реплик , и не все из них подходят для повышения до лидера - но в конфигурации по умолчанию они могут быть.

Вот в чем дело - поскольку нетНа самом деле, все три индекса содержат одни и те же данные, и все они являются репликами одного и того же шарда, поэтому запрос не нужно направлять через мастер.Если вы используете тупой haproxy, вы можете безопасно распределить запросы по всем трем узлам, и они должны быть в состоянии ответить на запрос, не связываясь с другими узлами (при условии, что все они содержат все сегменты коллекции).

Однако, если вы используете SolrJ или другой клиент с поддержкой Zookeeper (и используете клиент, совместимый с Zookeeper), клиент вместо этого будет поддерживать связь с Zookeeper и считывать информацию о состоянии вашего кластера.Это позволяет клиенту узнать, какие серверы в настоящий момент являются репликами для вашей коллекции, и связаться с любым из тех узлов, которые он может решить, имеют необходимую информацию для вашего запроса.В вашем случае результат будет таким же, за исключением того, что ваш клиент будет знать, не подключаться к каким-либо узлам, которые исчезают, и будет автоматически знать об узлах, которые добавляются в кластер.

«Запросы на маршрутизацию одного узла Solr к другому узлу» актуальны только в том случае, если у узла, к которому вы обращаетесь, нет реплик для запрашиваемой коллекции - т. Е. Ему придется связаться сдругой узел, чтобы получить этот контент.В этом случае будет происходить межкластерный запрос, и нагрузка на кластер будет немного выше, чем необходимо.Когда коллекция реплицируется на все три узла - или когда вы используете SolrJ, этот межкластерный запрос не должен выполняться.

...