Я хочу использовать репликацию Solr без использования SolrCloud. У меня есть три сервера Solr, один главный, а другие подчиненные.
Как отправить поисковый запрос на сервер Solr, который не занят?
Какие инструменты делают и как вести?
Я хочу использовать репликацию Solr без использования SolrCloud. У меня есть три сервера Solr, один главный, а другие подчиненные.
Как отправить поисковый запрос на сервер Solr, который не занят?
Какие инструменты делают и как вести?
Вы можете использовать любой балансировщик нагрузки - Solr использует HTTP, что делает доступной любую существующую технологию балансировки нагрузки. HAProxy, varnish, nginx и т. Д. Будут работать так, как вы ожидаете, и вы сможете использовать все расширенные функции, предлагаемые различными пакетами. Он также не будет зависеть от клиента, что означает, что вы не ограничены классом LBHttpSolrServer из SolrJ или тем, что предлагает ваш конкретный клиент. Некоторые решения LB также предлагают кэширование с высокой пропускной способностью (лак) или динамическое переключение в реальном времени между живыми узлами.
Другой вариант, который мы также успешно использовали, - это репликация ядра на каждый веб-узел, что позволяет нам всегда запрашивать локальный хост для поиска.
Вы настроили solr в режиме ведущий-ведомый. Я думаю, вы можете использовать LBHttpSolrServer из solrj api для запроса файла solr. Вам необходимо явно отправить запросы на обновление главному узлу. LBHttpSolrServer предоставит вам балансировку нагрузки между всеми указанными узлами. В режиме «ведущий-ведомый» ведомые отвечают за то, чтобы обновлять себя вместе с ведущим устройством.
НЕ используйте этот класс для индексирования в сценариях главный / подчиненный, поскольку документы должны быть отправлены правильному главному устройству; межузловая маршрутизация не выполняется. В сценариях SolrCloud (лидер / реплика) этот класс может использоваться для обновлений, поскольку обновления будут пересылаться соответствующему лидеру.
Я надеюсь, это поможет.
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
Еще один полезный пример:
И вы можете использовать верблюда в качестве прокси между клиентом и сервером.
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