Распространение Solr с использованием репликации без использования SolrCloud

Я хочу использовать репликацию Solr без использования SolrCloud. У меня есть три сервера Solr, один главный, а другие подчиненные.

Как отправить поисковый запрос на сервер Solr, который не занят?

Какие инструменты делают и как вести?


person htaghizadeh    schedule 18.08.2015    source источник


Ответы (3)


Вы можете использовать любой балансировщик нагрузки - Solr использует HTTP, что делает доступной любую существующую технологию балансировки нагрузки. HAProxy, varnish, nginx и т. Д. Будут работать так, как вы ожидаете, и вы сможете использовать все расширенные функции, предлагаемые различными пакетами. Он также не будет зависеть от клиента, что означает, что вы не ограничены классом LBHttpSolrServer из SolrJ или тем, что предлагает ваш конкретный клиент. Некоторые решения LB также предлагают кэширование с высокой пропускной способностью (лак) или динамическое переключение в реальном времени между живыми узлами.

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

person MatsLindh    schedule 18.08.2015
comment
Что вы подразумеваете под репликацией ядра на каждый веб-узел в качестве другого варианта? - person ARZ; 19.08.2015
comment
@ARZ Наличие локального экземпляра Solr на каждом узле, обслуживающем запросы, реплицируемого с центрального сервера Solr (на котором должны выполняться все обновления). - person MatsLindh; 19.08.2015

Вы настроили solr в режиме ведущий-ведомый. Я думаю, вы можете использовать LBHttpSolrServer из solrj api для запроса файла solr. Вам необходимо явно отправить запросы на обновление главному узлу. LBHttpSolrServer предоставит вам балансировку нагрузки между всеми указанными узлами. В режиме «ведущий-ведомый» ведомые отвечают за то, чтобы обновлять себя вместе с ведущим устройством.

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

Я надеюсь, это поможет.

person YoungHobbit    schedule 18.08.2015

apache camel можно использовать для общего балансировщика нагрузки. нравится:

public class LoadBalancer { 
public static void main(String args[]) throws Exception { 
  CamelContext context = new DefaultCamelContext(); 

context.addRoutes(new RouteBuilder() { 

    public void configure() { 
    from("jetty://http://localhost:8080") 
    .loadBalance().roundRobin().to("http://172.28.39.138:8080","http://172.168.20.118:8080"); 
    } 
}); 

context.start(); 

Thread.sleep(100000);   
context.stop(); 
   } 
} 

Могут быть полезны и другие материалы:

Базовый пример отработки отказа Apache Camel LoadBalancer

http://camel.apache.org/load-balancer.html

Но, похоже, нет прямого пути к интеграции solr-camel, потому что camel можно использовать для балансировки запросов по компонентам Java "Beans".

http://camel.apache.org/loadbalancing-mina-example.html

Еще один полезный пример:

https://svn.apache.org/repos/asf/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/CustomLoadBalanceTest.java

И вы можете использовать верблюда в качестве прокси между клиентом и сервером.

http://camel.apache.org/how-to-use-camel-as-a-http-proxy-between-a-client-and-server.html

Для начала есть несколько презентаций apache camel, его подхода и архитектуры: http://www.slideshare.net/ieugen222/eip-cu-apache-camel

person mhbashari    schedule 19.08.2015