简体   繁体   中英

Distribute Solr Using Replication without Using SolrCloud

I want to use Solr replication without using SolrCloud. I have three Solr servers, one is master and others are slave.

How to dispatch the search query on the Solr server which isn't busy?

What tools do and how to lead?

You can use any load balancer - Solr talks HTTP, which makes any existing load balancing technology available. HAProxy, varnish, nginx, etc. will all work as you expect, and you'll be able to use all the advanced features that the different packages offer. It'll also be independent of the client, meaning that you're not limited to the LBHttpSolrServer class from SolrJ or what your particular client offers. Certain LB solutions also offer high throughput caching (varnish) or dynamic real time fallover between live nodes.

Another option we've also used successfully is to replicate the core to each web node, allowing us to always query localhost for searching.

You have configured solr in master-slave mode. I think you can use LBHttpSolrServer from solrj api for querying the solr. You need to send the update requests to master node explicitly . The LBHttpSolrServer will provide you the load balancing among all the specified nodes. In the master-slave mode, slave are responsible for keeping themselves updated with the master.

Do NOT use this class for indexing in master/slave scenarios since documents must be sent to the correct master; no inter-node routing is done. In SolrCloud (leader/replica) scenarios, this class may be used for updates since updates will be forwarded to the appropriate leader.

I hope this will help.

apache camel can be used for general load balancer. like this:

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

There is some other materials maybe useful:

Basic Apache Camel LoadBalancer Failover Example

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

But is seems there are not straight way to solr-camel integration, because camel can be used to balance the requests upon he java "Beans" components

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

There is another useful example:

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

And you can use camel as a proxy between client and server

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

There are some presentation to beginning with apache camel,its approach and architecture: http://www.slideshare.net/ieugen222/eip-cu-apache-camel

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM