LBHttpSolrServer or "Load Balanced HttpSolrServer" is just a wrapper to CommonsHttpSolrServer. This is useful when you have multiple SolrServers and query 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.

This should NOT be used for indexing in traditional master/slave architectures since updates have to be routed to the correct master. In SolrCloud architectures, use CloudSolrServer which will take advantage of this class automatically.

How to use?

SolrServer lbHttpSolrServer = new LBHttpSolrServer("http://host1:8080/solr/","http://host2:8080/solr","http://host3: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://host3:8080/solr");

This can be used like any other SolrServer implementation.

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.

【RR模式负载均衡】

How does failover happen?

LBHttpSolrServer 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 server is alive the request succeeds , and if not it fails.

【LBHttpSolrServer并不定期检测server是否存活,在request过程中如果某个server执行失败,则将该server添加到‘dead server list’,并转移到下一个server执行,一直到执行成功。】

How does it know if a server has come back up ?

LBHttpSolrServer keeps pinging the dead servers once a minute (default value) to find if it is alive. The interval can be changed using

lbHttpSolrServer.setAliveCheckInterval(60*1000); //time in milliseconds

The ping is done in a separate thread.

【LBHttpSolrServer启动单独线程检测‘dead server’,默认一分钟检测一次。】

Can I add and remove servers ?

Yes, there are methods to add or remove servers to an existing LBHttpSolrServer;

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.

Alternatives to this built-in approach are to use a dedicated hardware load balancer or to use Apache httpd with mod_proxy_balancer as a load balancer. See Load balancing on Wikipedia.

What is LBHttpSolrServer?的更多相关文章

  1. Solr Cloud - SolrCloud

    关于 Solr Cloud Zookeeper 入门,介绍 原理 原封不动转自 http://wiki.apache.org/solr/SolrCloud/ ,文章的内存有些过时,但是了解原理. Th ...

  2. solrj-WiKi

    solrj是一个访问solr的客户端,它提供了一个接口,用于添加.更新.删除索引数据. solrj跨版本兼容 solrj一般保持向后兼容,所以你可以使用新版本的solrj访问老版本的solr服务,也可 ...

  3. Solr入门之SolrServer实例化方式

    随着solr版本的不断升级, 差异越来越大, 从以前的 solr1.2 到现在的 solr4.3, 无论是类还是功能都有很大的变换, 为了能及时跟上新版本的步伐, 在此将新版本的使用做一个简单的入门说 ...

  4. SolrServer SolrRequest

    SolrServer实现类 HttpSolrServer HttpSolrServer uses the Apache Commons HTTPClient to connect to solr. H ...

  5. solr 基本命令二(权重查找)

    package zr.com.solr.utils; import java.io.IOException; import java.util.HashMap; import java.util.Li ...

  6. solrserver实例化

    以下是httpClient实例化方式,需要tomcat运行Solr服务 1.ConcurrentUpdateSolrServer实例化SolrServer,该类实例化多用于更新删除索引操作 Concu ...

  7. Solr 6.7学习笔记(03)-- 样例配置文件 solrconfig.xml

    位于:${solr.home}\example\techproducts\solr\techproducts\conf\solrconfig.xml <?xml version="1. ...

  8. Solr 18 - 通过SolrJ局部更新Solr中的文档 (原子操作、非覆盖操作)

    目录 1 需求分析 2 需求实现 2.1 pom.xml依赖 2.2 Java代码示例 3 补充说明 3.1 关于文档中_version_的取值说明 3.2 store=true/false的区别 1 ...

随机推荐

  1. C++中输出字符到文本文档

    #include <iostream> #include <fstream> //ofstream类的头文件 using namespace std; int main() { ...

  2. urllib模块通过post请求获取数据

    功能: 输入你要查找的单词,会返回相对应的结果 import urllib.request import urllib.parse import json class youdaoSpider: de ...

  3. Light OJ 1199:Partitioning Game(SG函数模板)

    Alice and Bob are playing a strange game. The rules of the game are: 1.      Initially there are n p ...

  4. C语言--成绩汇总(5班)

    一.成绩列表 第0周成绩:[http://www.cnblogs.com/ranh941/p/7587567.html] 第1周成绩:[http://www.cnblogs.com/ranh941/p ...

  5. Plant(𝐶𝑜𝑑𝑒𝐹𝑜𝑟𝑐𝑒𝑠 − 185𝐴)

    #include<iostream> #include<cstring> using namespace std; ,mod=; struct Matrix { long lo ...

  6. 系统间通信——RPC架构设计

    架构设计:系统间通信(10)——RPC的基本概念 1.概述经过了详细的信息格式.网络IO模型的讲解,并且通过JAVA RMI的讲解进行了预热.从这篇文章开始我们将进入这个系列博文的另一个重点知识体系的 ...

  7. 玩vue+mockjs

    玩vue+mockjs vue中用mock制造模拟接口(本文主要解决坑),一定要看完哦 最近新入职一家公司,后端造接口速度很慢,想来想去还是搞一套模拟接口,来满足开发需求,有人会问,我造一个死数据不就 ...

  8. fold算法(拉格朗日插值)

    如果打表发现某个数列: 差分有限次之后全为0 例如: 2017新疆乌鲁木齐ICPC现场赛D题 ,,,,,,,,,,…… [2018江苏南京ICPC现场赛也有这样的题目] 那么可以使用以下黑科技计算出第 ...

  9. Spring Cloud 微服务实战

    Eureka 服务治理 Maven dependency 与spring boot的版本的对应 Finchley兼容Spring Boot 2.0.x,不兼容Spring Boot 1.5.x Dal ...

  10. 【Jmeter】分布式并发测试

    一.前提: 1.最近在做一下压测,但是单台服务器的CPU,内存可能不够支撑压测的项目,这时候,我们可以使用Jmeter分布式压测. 2.本次使用的环境: 1台服务器做master(调度器) 5台服务器 ...