了解LBHttpSolrServer中的查询行为

时间:2014-07-18 06:26:39

标签: solr solrj

我只想了解查询流程以及LBHttpSolrServer的负载均衡如何工作。我们设置了一个集合SolrCloud,该集合有4个分片,每个分片有两个节点,即一个主节点和一个副本。

我已经配置了LBHttpSolrServer,如下所示。

SolrServer lbHttpSolrServer = new LBHttpSolrServer("shard1_master:8080/solr/","shard2_master:8080/solr/","shard3_master:8080/solr/","shard4_master:8080/solr/","shard1_replica:8080/solr/","shard2_replica:8080/solr/","shard3_replica:8080/solr/","shard4_replica:8080/solr/",);

根据我的理解,solr和solrj的工作原理如下,

  1. LBHttpSolrServer持续ping服务器列表并维护实时服务器列表。
  2. 每次查询到来时,它都会从列表中选择一个服务器(循环方式)
  3. 向所选服务器服务器发送查询。
  4. 当查询到达solr节点时,它会在内部将查询分发给剩余的分片,收集,合并,排序结果并将响应发送回用户。
  5. 这里我的困惑在第4点,我的理解是否正确?如果不是,请纠正。我是否需要将所有8个节点传递给LBHttpSolrServer,否则只需4个就足够了。

1 个答案:

答案 0 :(得分:1)

是的,这是正确的。但是,您可以使用可识别云的SolrCloudServer,而不是使用LBhttpSolrServer。

CloudSolrServer将自动加载平衡请求 包含正在查询的集合的节点。较新 客户端的版本也会直接将更新路由到领导者 正确的分片,可以减少服务器上的负载并加快索引速度。

在内部,CloudSolrServer使用LBHttpSolrServer的实例,但是 URL列表是动态管理的,您的程序并不需要 担心它。

http://lucene.apache.org/solr/4_9_0/solr-solrj/org/apache/solr/client/solrj/impl/CloudSolrServer.html