Dear Wiki user, You have subscribed to a wiki page or wiki category on "Solr Wiki" for change notification.
The following page has been changed by NoblePaul: http://wiki.apache.org/solr/LBHttpSolrServer ------------------------------------------------------------------------------ - Load Balanced SolrServer + == What is LBHttpSolrServer? == + LB!HttpSolrServer or "!LoadBalanced !HttpSolrServer" is just a wrapper to !CommonsHttpSolrServer. This is useful when you have multiple !SolrServers and the requests need to be Load Balanced among them. it offers automatic failover when a server goes down and it detects when the server comes back up + == How to use? == + {{{ + SolrServer lbHttpSolrServer = new LBHttpSolrServer("http://host1:8080/solr/","http://host2:8080/solr","http://host2:8080/solr"); + //or if you wish to pass the HttpClient do as follows + httpClient httpClient = new HttpClient(); + SolrServer lbHttpSolrServer = new LBHttpSolrServer(httpClient,"http://host1:8080/solr/","http://host2:8080/solr","http://host2:8080/solr"); + }}} + + This can be used like any other !SolrServer implementations. + + == How does the Load Balancing happen ? == + This is a dumb round-robin Load Balancing .First request goes to 'host1' then to 'host2' and then'host3' and it starts with 'host1' again. + + == How does failover happen? == + LB!HttpSolrServer does not keep pinging the servers to know if they are alive. If a request to a server fails by an Exception then the host is taken off the list of live servers and moved to a 'dead server list' and the request is resent to the next live server. This process is continued till it tries all the live servers. If atleast one serveris alive the request succeeds , and if not it fails. + + == How does it know if a server has come back up ? == + LB!HttpSolrServer keeps pinging the dead servers once a minute as a to find if it is alive. The interval can be changed using + {{{ + lbHttpSolrServer.setAliveCheckInterval(60*1000); //time in millis + }}} + The ping is done not in a separate thread, it is done in a thread which made a normal request. + + == Can I add and remove servers ? == + Yes ,there are methods to add or remove servers to an existing LB!HttpSolrServer; + + example: + {{{ + //remove one + lbHttpSolrServer.removeSolrServer("http://host2:8080/solr") + //and add another + lbHttpSolrServer.addSolrServer("http://host4:8080/solr") + }}} + + == When to use this ? == + This can be used as a software load balancer when you do not wish to setup an external load balancer. The code is relatively new and the API is currently experimental +
