在不使用SolrCloud的情况下使用复制分发Solr

时间:2015-08-18 06:30:08

标签: solr replication solrcloud master-slave

我想在不使用SolrCloud的情况下使用Solr复制。 我有三个Solr服务器,一个是主服务器,另一个是从服务器。

如何在不忙的Solr服务器上调度搜索查询?

有哪些工具可以做什么以及如何领导?

3 个答案:

答案 0 :(得分:3)

您可以使用任何负载均衡器 - Solr会谈HTTP,这使得任何现有的负载均衡技术都可用。 HAProxy,varnish,nginx等都可以按预期工作,并且您将能够使用不同软件包提供的所有高级功能。它也独立于客户端,这意味着您不仅限于SolrJ的LBHttpSolrServer类或您的特定客户端提供的类。某些LB解决方案还提供高吞吐量缓存(清漆)或实时节点之间的动态实时失败转移。

我们成功使用的另一个选项是将核心复制到每个Web节点,允许我们始终查询localhost进行搜索。

答案 1 :(得分:1)

您已在主从模式下配置solr。我想你可以使用solrj api中的LBHttpSolrServer来查询solr。您需要明确地将更新请求发送到主节点。 LBHttpSolrServer将为您提供所有指定节点之间的负载平衡。在主从模式下,slave负责保持自己与主服务器的更新。

  

NOT 使用此类在主/从方案中进行索引,因为必须将文档发送到正确的主服务器;没有完成节点间路由。在SolrCloud(领导/副本)方案中,此类可用于更新,因为更新将转发给相应的领导者。

我希望这会有所帮助。

答案 2 :(得分:1)

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(); 
   } 
} 

还有一些其他材料可能有用:

Basic Apache Camel LoadBalancer Failover Example

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

您可以使用camel作为客户端和服务器之间的代理

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