首页 文章

使用solrj和LBHttpSolrClient访问单个solrcloud实例

提问于
浏览
0

在solrj中使用LBHttpSolrClient访问单个solrcloud实例是否比使用默认的solrj和zookeeper行为更不健壮?它可以正确地在单个solrcloud实例上进行负载 balancer 吗?

我可用的solrcloud实例有一个包含大约900万个文档的集合,分布在三个分片上,每个分片大约有300万个文档 . solrcloud中有三个节点(服务器),有3个分片,replicationFactor为2,maxShardsPerNode为2.对于这个solrcloud实例,还有3个zookeeper节点也在这三个服务器上运行 .

Note: 以下名为 solrUrls 的变量中列出的值应以"http://"为前缀,而不是"http_url_" . 我目前无法发布超过2个网址,所以我必须"encode" . 抱歉 .

这是我被告知使用的基本代码:

String zkUrls = "solrd1:2181,solrd2:2181,solrd3:2181";
String solrUrls = {"http_url_solrd1:8983", "http_url_solrd2:8983", "http_url_solrd3:8983"};

LBHttpSolrClient.Builder lbclient = 
    new BHttpSolrClient.Builder().withBaseSolrUrls(solrUrls);
CloudSolrClient solr = new CloudSolrClient.Builder()
    .withLBHttpSolrClientBuilder(lbclient)
    .withZkHost(zkUrls)
    .build();
cloudServer.setDefaultCollection(defaultCollection);

这个 LBHttpSolrClient 客户端是否能够正确使用提供的 solrUrls ,因为该变量中列出的每个节点都只是一个solrcloud中的节点?此负载 balancer 客户端是否自动查询所有其他节点以确保整个集合的结果完整,而不仅仅是该节点上存在的分片?

如果使用 LBHttpSolrClient 客户端是访问单个solrcloud实例的正确方法(优于solrj和zookeeper),那么有没有更好的方法让zookeeper提供基本的solr url?我的印象是 LBHttpSolrClient 客户端早于整个solrcloud设置,并且是一种在多个独立的solr实例上进行负载均衡的方法 . 如果是这样的话,那么与solrj和zookeeper相比, LBHttpSolrClient 客户端的使用是否会过时?

References:

1 回答

  • 2

    我认为你过于复杂,你甚至可以完全跳过代码中的LBHttpSolrClient,而Solrj将在幕后创建所需的实例 .

    简而言之,CloudSolrClient使用LBHttpSolrClient向正确的Solr实例发送请求 . 如果您想充分利用Solrcloud设置,请使用CloudSolrClient,如果您只使用LBHttpSolrClient(没有CloudSolrClient),那么您将不会知道Solr节点已经关闭(直到您收到请求失败) .

相关问题